2013-04-03 59 views
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從類似作弊引擎另一個進程訪問特定進程的內存?

除了掛鉤以外,其他人並不在意。

回答

1

在OS X中,對task_for_pid的調用由taskgated調整。基本上,除非是你的任務,或者你是根(或者,在舊系統中,procview組的成員),否則你不會得到那個難以捉摸的任務端口。但是,如果你被允許,那麼你有端口,並且可以做任何你想要的事情。

掛鉤不會有幫助,因爲task_for_pid是一個mach陷阱 - 人們可以使用系統調用接口直接調用它。 iOS有更嚴格的控制(感謝AppleMobileFileIntegrity.kext)。如果你想控制陷阱,有效的唯一方法就是寫一個小的kext來爲你做詭計。

+0

我做了一個kext來將task_for_pid替換爲我的task_for_pid。它阻止特定進程的訪問,但很多應用程序調用task_for_pid。有一個調用我的task_for_pid的副作用。一些應用程序無法執行。 – tnrgus

+0

您只需要允許應用程序正常運行,如果它不是您要保護的進程/任務。這樣其他應用程序仍然可以執行並正常工作。 – Technologeeks

+0

如果在運行我想保護的應用程序後運行我的kext,則沒有問題。我不知道啓動應用程序時調用了task_for_pid。我可以知道哪個進程稱爲task_for_pid? – tnrgus