iOS 逆

代码注入的攻与防

2018-06-21  本文已影响60人  烟影很美

一、代码注入

1. 通过修改LoadCommands段注入framework/dylib文件

参考: 逆向工程的代码注入

2. 在越狱机上, 通过DYLD_INSERT_LIBRARIES属性插入动态库, Tweak就是利用此原理

参考: Tweak使用及原理

二、代码注入的攻防

1. 通过修改LoadCommands注入的攻防博弈

(1) 围绕hook原理进行攻防

① 防守: 使用fishhook重绑定method swizzling相关方法, 使注入的代码hook失效.

由于依赖库加载顺序为: 插入的库->Link Binary With Libraries配置中依赖库按顺序载入->通过yololib注入的库.
所有开发者可以自己创建依赖库并加入到Link Binary With Libraries配置中的最前面. 只有先于注入代码重绑定才能阻断注入代码的hook.

② 攻击:

直接修改依赖库的mach-o文件的数据, 关键在于怎样定位选择合理的修改位置.

(2) 针对使用DYLD_INSERT_LIBRARIES注入的攻防

① 防守: DYLD源码中, 有判断如果Mach-O文件中存在__RESTRICT段和__restrict组, 则不插入动态库. 那么开发者可以主动添加该段来防止插入动态库.

添加方式: 在Other Linker Flags配置中添加如下项
-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null

② 攻击: 破坏LoadCommands段中的__RESTRICT__restrict字段, 即直接修改Mach-O文件.

③ 再防守: 在工程中, 查看自己的LoadCommands段, 如果__RESTRICT__restrict被修改, 则证明Mach-O文件被修改, 可以执行exit退出方式被hook

查看LoadCommands段的方法可在DYLD源码中找到.

④ 再攻击: 找到工程中判断__RESTRICT段是否存在的代码, 通过修改Mach-O文件的方式破坏其代码.

上一篇下一篇

猜你喜欢

热点阅读