Ios有什么办法可以反动态库注入?

ios有什么办法可以反动态库注入?
代码层面的和配置上的

dladdr dyldimageinfo RESTRICT ,etc

1 个赞

谢谢!自己也整理了一下

反动态库注入

动态注入是利用了 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全局替换成其它名字即可。)

3 个赞

__RESTRICT改名可以用getsectdata来方法,然后攻击者会修改MachO头部来逃逸gsd校验,然后你又会开始parse自己头部寻找多余的lc

我觉得其实没有办法防注入,你在代码里加上

char *env = getenv(“DYLD_INSERT_LIBRARIES”);

然后对其进行判断,那我可以hook你的这段代码,返回为空。而且越狱后的应用DYLD_INSERT_LIBRARIES默认都带SubstrateBootstrap.dylib

所以iOS这种情况的安全是比攻击者和开发者谁知道更多的Trick

使用dladdr 这种方法好像不能上架了,而且iOS10之后应该不允许了。

1 个赞