【问题标题】:Can OS X system calls be overridden or interposed on a system-wide basis?能否在系统范围内覆盖或插入 OS X 系统调用?
【发布时间】:2012-07-28 18:56:15
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • [已删除冗长的讨论]
  • 响应您的编辑 - 这是一个公共论坛,您试图将熟练和有经验的开发人员拉入其中,就您承认两个供应商之间已经存在争议的主题提供建议。我不想去那里,SO 上的其他人也不应该去那里。
  • @MartinJames:可悲的是,虽然 Windows 很容易接受过滤器驱动堆栈(许多病毒扫描程序都使用),但 OS X 不支持这个概念.

标签: macos system-calls interposing library-interposition


【解决方案1】:

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

【讨论】:

  • 非常感谢关于 DTrace 的建议。几周前我用它得到了一些非常不错的结果,但由于 D 语言的限制,特别是在流量控制领域,我最终停止使用它。鉴于我现在的选择很少,我很感激您的提醒,并认为我会再试一次。
  • 另外,记录一下,Inject and Interpose 项目对于整洁的注入和插入非常有用!
猜你喜欢
  • 2012-07-16
  • 1970-01-01
  • 2019-01-26
  • 2011-06-12
  • 2016-08-26
  • 2014-06-04
  • 2016-01-16
  • 1970-01-01
  • 2014-09-24
相关资源
最近更新 更多