【问题标题】:Preventing from accessing process memory防止访问进程内存
【发布时间】:2013-03-24 23:09:42
【问题描述】:

我做了一个例子,使用 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?

除了 hooking 之外,没有太多其他人想到。

【问题讨论】:

    标签: macos kernel anti-cheat


    【解决方案1】:

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

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

    【讨论】:

    • 我做了一个 kext 来用我的 task_for_pid 替换 task_for_pid。它阻止了对特定进程的访问,但很多应用程序调用 task_for_pid。调用我的 task_for_pid 有一个副作用。部分应用程序无法执行。
    • 如果不是您要保护的进程/任务,您只需允许应用程序正常继续。这样其他应用程序仍然可以正常执行和工作。
    • 如果我的kext是在我想保护的应用程序运行后运行的,没有问题。我不知道启动应用程序时会调用 task_for_pid。能知道哪个进程叫task_for_pid吗?
    猜你喜欢
    • 2022-08-18
    • 2011-03-11
    • 2019-08-07
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多