ios有什么办法可以反动态库注入?
代码层面的和配置上的
dladdr dyldimageinfo RESTRICT ,etc
谢谢!自己也整理了一下
反动态库注入
动态注入是利用了 iOS系统中 DYLD_INSERT_LIBRARIES这个环境变量,如果设置了DYLD_INSERT_LIBRARIES 环境变量,那么在程序运行时,动态链接器会先加载该环境变量所指定的动态库;也就是说,这个动态库的加载优先于任何其它的库,包括 libc。
我们可以在代码中通过判断环境变量来检测是不是被注入:
char *env = getenv("DYLD_INSERT_LIBRARIES");
如果方法返回非空,我们可以做一些上报之类的.
后面两个工具都是用来注入的:
insert_dylib通过向 mach-o文件的 loadcommand段插入 LC_LOAD_DYLIB数据来加载第三方库。
对于 insert_dylib,我们可以通过在 Xcode的Build Settings中找到“Other Linker Flags”在其中加上
-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null
指令来绕过 dylib加载额外的第三方库
(但是破解这一招也非常简单,上面的链接也说了,用 0xED打开二进制文件,把__RESTRICT全局替换成其它名字即可。)
__RESTRICT改名可以用getsectdata来方法,然后攻击者会修改MachO头部来逃逸gsd校验,然后你又会开始parse自己头部寻找多余的lc
我觉得其实没有办法防注入,你在代码里加上
char *env = getenv(“DYLD_INSERT_LIBRARIES”);
然后对其进行判断,那我可以hook你的这段代码,返回为空。而且越狱后的应用DYLD_INSERT_LIBRARIES
默认都带SubstrateBootstrap.dylib
所以iOS这种情况的安全是比攻击者和开发者谁知道更多的Trick
使用dladdr 这种方法好像不能上架了,而且iOS10之后应该不允许了。