LQM_pig
(嗯哼)
1
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 延迟加载的细节.
LQM_pig
(嗯哼)
7
我又研究了了一下,感觉和iat虽然有点像,但是又不完全一样,(个人看法,可能知识有限,理解有误)iat需要一个确定的地址去替换,可这种并没有啊,,这个有点像,,extern ,,就是告诉程序,有这个符号,你去找就是了,,而且我的库里确实有这个符号。,,,。,。
LQM_pig
(嗯哼)
9
iat原理,感觉有点像fishhook,替换符号表的地址达到hook
1 个赞
IAT HOOK有两种实现方式, 一种是动态修改函数指针, 一种是修改导入的动态库文件名
LQM_pig
(嗯哼)
12

这就是我的问题额。,大佬,请问怎么修改导入的动态库文件名,。,而且,其实修改整个其实我用mach-oview实现了,但是一旦修改导致整个库的所有符号的查找路径都修改了(所有这个库的函数都去我的动态库查找)。,这并不是想要的结果啊。,
1 个赞
LQM_pig
(嗯哼)
16
…说好的技术交流呢,,,诶,你早说要钱啊,要钱我发一个悬赏贴好了额