的OS X系统调用居间(Interposing of OS X system calls)

2019-06-26 08:31发布

我需要干预(让我的函数调用,而不是原来的功能)一些OS X系统调用来克服在一块封闭源代码软件的一个漏洞。

优选地,得到的解决方案将10.5(Leopard)的和更新下工作,但我也许能需要10.6(雪豹)如果参数有足够的力量。

优选地,得到的解决方案是一个可执行文件,但我会满足于一个脚本。

优选地,得到的解决方案是能够干预甚至目标应用程序运行之后(“偷矢量”),但我会满足于作为加载应用程序必须注入自己的技术。

优选地,得到的解决方案将使用C或C ++来开发,但我可以勉强接受的Objective-C或别的东西。

到目前为止,我已经尝试过:

1) 的DTrace脚本,这已经教会了我很多,但d语言的局限性(流控制等),使之成为我在做什么,更何况,其结果将是一个脚本,一个重大的痛苦,这是不一样整洁和自足的就是我拍摄的。

2)DYLD_INSERT_LIBRARIES介入,这是华而不实的方法很多,但也许由于命名空间压扁(我不会假装深刻理解这是什么意思),它很好地反对简单的可执行文件,但使我的目标应用呛,甚至当我建立一个什么都不做库实际上不干预任何来电。

我最近的想法是mach_star(实验https://github.com/rentzsch/mach_star ),但我第一次在这里停,问堆栈溢出社区里面总是知道的比我...

......我应该寻找除mach_star未来的东西吗?

Answer 1:

我想你已经做出了正确的选择,看着mach_star。

如果你真的想学习达尔文链路装载机是如何工作的,等等,我把更多的时间到您的dyld的插入的问题。 但很明显,你正在寻找一个快速的解决方案,而不是深入的学习经验。 我怀疑任何人都将是能够找出您所遇到的问题,而无需访问项目。 所以,这可能是一个死胡同。 此外,马赫压倒一切和注射是更多的乐趣呢。

马赫注射的基础实际上并没有那么难,但有一吨的你必须得到正确的事,其中大部分是无据可查。 你会,你得到的东西,你的系统上工作之前获得11件事情错了,那么它不会为你尝试下功能工作,那么它不会在10.5或者10.8的工作,和...。mach_star库包装了所有的东西给你。 那么,为什么不使用它呢?

我要指出,我没有,因为英特尔的前几天使用mach_star。 但它看起来像它仍然被定期更新十岁上下,与64位x86和10.7的Xcode 4等的变化。



文章来源: Interposing of OS X system calls