我做了一个使用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?
除了挂钩之外,没有其他人会想到。
答案 0 :(得分:1)
在OS X中,对task_for_pid的调用由taskgated调节。基本上,除非它是你的任务,或者你是root(或者,在旧系统中,procview组的成员),你将无法获得难以捉摸的任务端口。但如果你被允许,那么你就拥有了这个端口,基本上可以做你想做的任何事情。
挂钩无济于事,因为task_for_pid是一个机器陷阱 - 人们可以使用系统调用接口直接调用它。 iOS对它有更严格的控制(感谢AppleMobileFileIntegrity.kext)。如果你想控制陷阱,有效的唯一方法就是写一个小kext来为你做这个技巧。