2

在 OS X Lion 下工作,我最近做了一些代码注入工作,以逐个进程插入系统调用。

在此过程中,我学到了很多东西,现在看来,至少出于研究目的,“简单地”插入对某些系统函数的所有调用,例如pwrite,如果这样的事情是可能的,它会更有意义。

对于每个进程对某些系统调用(例如)的每次调用,是否可以调用我的代码而不是操作系统?pwrite

如果是这样,我能知道是什么进程发出了调用吗?

编辑:以免有人认为我是恶意软件作者,因为我的问题的性质,我会解释为什么我现在在这里,问我在问什么:

我正在尝试让一个大型、复杂的闭源软件按其应有的方式工作。为什么不等待供应商修复它?两年前,他们开始指责另一个派对,而那个派对则指指点点。这种情况是荒谬的,值得在没有任何一方帮助的情况下尝试克服,因为该软件被电影和视频制作人员使用,他们每小时收取数百美元的费用,因为他们的创意和技术先进的工作,不应该浪费他们的时间与他们的工具搏斗。

到目前为止,我努力的问题是我需要使用代码注入和插入来找到问题的根源(这就是我上面所说的“研究”)。一旦我找到问题的根源,解决方案也可能是注入和插入,或者替换动态库,或者一些晦涩的低级系统调优,或者谁知道呢?我正在分析的软件非常庞大,它又利用了其他框架、库和后台任务,其中一些是 OS X 的一部分,还有一些是相关软件包的一部分。逐个组件的代码注入和插入变得有点疯狂,这就是为什么我想监视系统调用结束时发生的事情,所以我可以看到,例如,pwrite呼叫发起和呼叫的细节。

我希望这种澄清会有所帮助,并且有人可以为我指明正确的方向。谢谢!

4

1 回答 1

0

您应该查看 DTrace:http ://en.wikipedia.org/wiki/DTrace现在它是 OS X 的一部分。对于介入,我认为有几种方法,其中许多可能会受到 Gatekeeper/Code Signing 的阻碍。如果不担心,您可以使用 otool 编辑应用程序链接,使其加载其库的修改版本。对于代码注入,我相信过去人们已经使用输入组件破解了这个......但我真的不知道这是否仍然有效。我猜这不是一个真正的答案。

于 2012-07-31T23:16:31.567 回答