代码注入&MethodSwizzle
2019-10-16 本文已影响0人
Code_人生
一、代码注入
一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork
或者Dylib
等三方库的方式注入。
- Framwork注入
- 通过Xcode新建Framwork,将库安装进入APP包
- 通过yololib注入Framwork库路径。命令:$yololib(空格)MachO文件路径(空格)库路径
- 所有的Framwork加载都是由DYLD加载进入内存被执行的
- 注入成功的库路径会写入到MachO文件的LC_LOAD_DYLIB字段中
- Dylib注入
- 通过Xcode新建Dylib库(注意:Dylib属于MacOS所以需要修改属性)
- 添加Target依赖,让Xcode将自定义Dylib文件打包进入APP包。
- 利用yololib进行注入。
二、MethodSwizzle
利用OC的Runtime特性,动态改变SEL(方法编号)和IMP(方法实现)的对应关系,达到OC方法调用流程改变的目的。主要用于OC方法。
- 多种HOOK方式
- class_addMethod方式:利用AddMethod方式,让原始方法可以被调用,不至于因为找不到SEL而崩溃
- class_replaceMethod方式:利用class_replaceMethod,直接给原始的方法替换IMP
- method_setImplementation方式:利用method_setImplementation,直接重新赋值原始的新的IMP