在应用开发过程中,我们不仅仅需要完成正常的业务逻辑,考虑应用性能、代码健壮相关的问题,我们有时还需要考虑到应用安全的问题。
那么应用安全的问题涉及到很多方面。比如防止静态分析的,代码混淆、逻辑混淆;防止重签名的,应用ID检测、甚至是代码的HASH检测等等。那么这篇文章我想聊聊关于代码的注入检测,因为发现随着iOS系统的更新,我们防护的手段发生了一些变化。
代码注入的方式
代码注入的方式大致分为两种
- 越狱注入:通过修改
DYLD_INSERT_LIBRARIES
环境变量的值,来插入动态库并执行 - 非越狱注入:
- 直接将自定义的Framwork或者dylib库打包进入APP并重签名。
- 利用yololib修改MachO文件,添加库路径.在应用启动时,dyld会加载并执行.
早期防护方式
在工程的Build Settings中找到Other Linker Flages 并添加字段
-Wl,-sectcreate,__RESTRICT,__raestrict,/dev/null
此操作的作用是在可执行文件中添加一个Section.我们使用MachOView分析如下:
当MachO文件中拥有这个字段,那么我们通过越狱环境插入动态库的方式就会失效.起到防护的作用.其原理在DYLD源码中可以分析到.
dyld源码分析
首先这里分析的