CaptainHook 的使用
在iOS逆向的时候发现一个很好用的库,他定义了一些hook常用的宏定义
CHDeclareClass
声明需要Hook的类
CHMethod
作用是对应的方法Hook的实现
CHConstructor
构造函数,在这里调用CHLoadLateClass加载Hook的方法和所在的类
CHLoadLateClass
加载Hook类
CHHook
注册Hook方法
CHOptimizedClassMethod
对类方法Hook
CHSuper
调用
使用方法
声明需要Hook的类
1
| CHDeclareClass(HookClass)
|
Hook 对应的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
CHMethod0(NSString *, HookClass, hookMethod) { return "需要的返回值" }
CHMethod1(void, AWEAwemeModel, setVideo, AWEVideoModel *, arg1) { BOOL isHookDownLoad = [UserDefaults boolForKey:HookDownLoad]; if (isHookDownLoad) { arg1.downloadURL.originURLList = arg1.playURL.originURLList; } CHSuper1(AWEAwemeModel, setVideo, arg1); }
CHOptimizedClassMethod0(self, NSArray *, AWEDynamicWaterMarkExporter, watermarkLogoImageArray) { BOOL isHookWaterMark = [UserDefaults boolForKey:HookWaterMark]; if (isHookWaterMark) { return @[]; } return CHSuper0(AWEDynamicWaterMarkExporter, watermarkLogoImageArray); }
|
Hook
1 2 3 4 5 6 7 8 9
| CHConstructor { CHLoadLateClass(AWEAwemeModel); CHHook1(AWEAwemeModel, setPreventDownload); CHClassHook0(AWEDynamicWaterMarkExporter, watermarkLogoImageArray); }
|
添加新属性
1 2 3 4 5 6 7 8 9 10 11 12 13
| @interface HookClass @property (nonatomic, copy) NSString *newProperty; @end
CHPropertyRetainNonatomic(HookClass, NSString*, newProperty, setNewProperty);
CHConstructor{ CHHook0(HookClass, newProperty); CHHook1(HookClass, setNewProperty); }
|
基本这些就够用了,剩下的都差不多,自己尝试下就好。