多年来,在 Windows 上进行了大量逆向工程,导致了大量未记录的功能,例如NtCreateThreadEx
用于跨会话注入线程。
在 OSX 上,线程注入的话题似乎相对未知。由于操作系统如此之大,我可以从哪里开始寻找以发现我想要的功能?
例如,如果有人问我有关 Windows 的问题,我希望得到一个答案,告诉我开始逆向工程CreateRemoteThread
或开始研究内核如何创建用户线程并将它们指向ntoskrnl.exe
.
多年来,在 Windows 上进行了大量逆向工程,导致了大量未记录的功能,例如NtCreateThreadEx
用于跨会话注入线程。
在 OSX 上,线程注入的话题似乎相对未知。由于操作系统如此之大,我可以从哪里开始寻找以发现我想要的功能?
例如,如果有人问我有关 Windows 的问题,我希望得到一个答案,告诉我开始逆向工程CreateRemoteThread
或开始研究内核如何创建用户线程并将它们指向ntoskrnl.exe
.
诚然,我不太了解 OSX,甚至 Linux。但我建议查看GDB源代码。GDB 以某种方式能够附加到正在运行的进程以调试它们。我想这至少会提供您正在寻找的类似功能,并证明这是一个不错的起点。
如果您正在寻找系统调用,那么ptrace
GDB似乎就是这样做的。此外,这里有一个关于调试器如何工作的很好的概述。
更新:
实际上,Uninformed 似乎写了一篇文章,涵盖了这个主题。他们在文章中讨论:
很多人似乎从 Linux 或 BSD 背景转向 Mac OS X,因此期望 ptrace() 系统调用有用。然而,不幸的是,在 Mac OSX 上情况并非如此。出于某种不敬虔的原因,Apple 决定让 ptrace() 不完整,除了对反调试机制进行微弱的尝试或单步执行该过程外,它无能为力。
同样从那篇文章中,它看起来thread_create_running
可能是您正在寻找的功能。 链接到手册页。
对于 OS X 注入,我会查看 mach_star 项目(mach_override 和 mach_inject)
https://github.com/rentzsch/mach_star
此外,Pin 现在有 os x 支持
http://software.intel.com/en-us/articles/pin-a-binary-instrumentation-tool-downloads
你可能会发现这很有用——我最近写了一篇关于这个的教程,因为,正如你所注意到的,这些东西的文档总是那么粗略而且经常过时。
http://soundly.me/osx-injection-override-tutorial-hello-world/