Exemple #1
0
    def attach(self):
        if self.eport is None:
            task_port_struct = mach_port_t(self.port)
            print "[*] Getting exception port on task %d..." % self.port
            eport_struct = mach_port_t()
            mask = exception_mask_t(EXC_MASK_ALL)
            # mask = EXC_MASK_BAD_ACCESS;
            me = ls_kernel.mach_task_self()
            ls_kernel.mach_port_allocate(me, MACH_PORT_RIGHT_RECEIVE,
                                         byref(eport_struct))
            ls_kernel.mach_port_insert_right(me, eport_struct, eport_struct,
                                             MACH_MSG_TYPE_MAKE_SEND)
            old_ports = old_exc_ports_t()

            # hackity hack hack
            count = c_uint()
            count_p = pointer(count)

            ls_kernel.task_swap_exception_ports(task_port_struct, mask,
                                                eport_struct,
                                                EXCEPTION_DEFAULT |
                                                MACH_EXCEPTION_CODES,
                                                x86_THREAD_STATE,
                                                old_ports.masks,
                                                count_p,
                                                old_ports.ports,
                                                old_ports.behaviors,
                                                old_ports.flavors)
            old_ports.count = count_p.contents
            print "[++] Exception port: %d" % eport_struct.value
            self.old_exc_port = old_ports
            self.eport = eport_struct.value
        else:
            print ("[--] Task %d already has an exception port (%d)!"
                   % (self.port, self.eport))
Exemple #2
0
 def task(self):
     if self._task is None:
         task_port_struct = mach_port_t()
         print "[*] Getting task port on process %d..." % self.pid
         ls_kernel.task_for_pid(ls_kernel.mach_task_self(), self.pid,
                                byref(task_port_struct))
         if task_port_struct.value is not None:
             print "[++] Task port: %d" % task_port_struct.value
             self._task = Task(task_port_struct.value, self)
         else:
             raise TaskForPidException(self.pid)
     return self._task
Exemple #3
0
 def detach(self):
     if self.eport is not None:
         me = ls_kernel.mach_task_self()
         task_port_struct = mach_port_t(self.port)
         ls_kernel.mach_port_deallocate(me, self.eport)