发现一种新的hook技术,但是实现过程中遇到一个问题

hook目前最常用,就是开源fishhook(hook c函数)和Substrate(http://www.cydiasubstrate.com/),最近发现一种似乎有别于这两种的技术,研究了一下,感觉理论上可以实现,但是实现过程中遇到一点问题,之前也在群里问过,有给过思路,技术有限,没有研究出来,所以。。。。。
回到正题。
创建一个应用,代码很简单,如下:


直接运行,是会崩溃的(exit(0));
接下来写一个dylib,劫持这个exit系统调用

代码也很简单,只要有一个替换函数就行了.
接下来就运行一下。(此时还没有进行hook,运行是会闪退的)
然后获取生成的二进制文件:

用hopper 查看其调用;

可以看出,调用exit的流程,main()–>exit_test()–>exit()(exit是在系统库/usr/lib/libSystem.B.dylib查找)。

接下来,用010修改二进制文件:修改后,调用exit的调用发生了变化:

最后一个,就是问题所在,虽然调用符号改变了(exit------>exxt),但是查找路径没有变,依然会去系统库里找exxt,导致错误。

重签名二进制文件运行试一下就可以看出来:


lazy symbol binding failed;;;
请问各位大佬,怎么重新绑定一个符号的依赖路径。

30字总结: iOS怎么做IAT HOOK 111111111111111

所以,,,,怎么实现呢~

向libSystem.B.dylib插入自己的动态库?

其实我更建议你读下程序员自我修养的, 关于 PLT 延迟加载的细节.

参考WINDOWS iat hook 方法试试看

我又研究了了一下,感觉和iat虽然有点像,但是又不完全一样,(个人看法,可能知识有限,理解有误)iat需要一个确定的地址去替换,可这种并没有啊,,这个有点像,,extern ,,就是告诉程序,有这个符号,你去找就是了,,而且我的库里确实有这个符号。,,,。,。

嗯嗯 ,好的,有时间就研究下,,

iat原理,感觉有点像fishhook,替换符号表的地址达到hook

1 个赞

额,,,走远了大兄弟

IAT HOOK有两种实现方式, 一种是动态修改函数指针, 一种是修改导入的动态库文件名

这就是我的问题额。,大佬,请问怎么修改导入的动态库文件名,。,而且,其实修改整个其实我用mach-oview实现了,但是一旦修改导致整个库的所有符号的查找路径都修改了(所有这个库的函数都去我的动态库查找)。,这并不是想要的结果啊。,

1 个赞

我也不知道啊, 我就BB而已

大佬研究下??完了指点下我@.@

你给我打钱??

…说好的技术交流呢,,,诶,你早说要钱啊,要钱我发一个悬赏贴好了额

你叫别人干活, 还要回来教你, 不用给钱?

@.@,可以的,这波操作,满分:100:

如何创建一个简单的dylib文件?

这是什么问题