从 Mac OS X 10.4 开始,dyld 就开始支持库函数的注入了。例如,如果想注入 C 函数库里的 open(),那么首先要实现替代函数的动态共享库,并且在这个库的 __DATA (数据段)里包含__interpose字段。__interpose字段包含原始的函数名和新的函数名。然后利用 DYLD_INSERT_ LIBRARIES 变量使用这个库,就可以打开注入功能了。
下面这段程序替换了 open() 和 close()。
然后将代码编译成一个动态链接库,并利用变量 DYLD_INSERT_LIBRARIES 就可以达到目的了。
参考:<<Mac OS Internals: A Systems Approch>>