0

我做了一个例子,使用 task_for_pid() 和 mach_vm_write() 写入进程内存。

task_for_pid(mach_task_self(), pid, &target_task);
mach_vm_write(target_task, address, '?', local_size);

有没有办法阻止从另一个进程(如 OS X 上的作弊引擎)访问特定进程的内存。

如何防止另一个进程调用 task_for_pid?

除了钩子之外,没有多少其他人浮现在脑海中。

4

1 回答 1

1

在 OS X 中,对 task_for_pid 的调用由 taskgated 控制。基本上,除非它是您的任务,或者您是 root(或者,在旧系统中,是 procview 组的成员),否则您不会获得那个难以捉摸的任务端口。但是,如果您被允许,那么您就拥有了端口,并且基本上可以做任何您想做的事情。

挂钩无济于事,因为 task_for_pid 是一个马赫陷阱——人们可以使用系统调用接口直接调用它。iOS 对其进行了更严格的控制(感谢 AppleMobileFileIntegrity.kext)。如果您想控制陷阱,那么有效的唯一方法就是编写一个小 kext 来为您解决问题。

于 2013-04-05T21:51:59.040 回答