前面干了那么多準(zhǔn)備工作晾浴,了解了那么多原理性的東西溉躲,你會(huì)發(fā)現(xiàn)想玩下別人的app榜田,重簽,代碼注入之類的步驟實(shí)在太煩躁锻梳,難道就沒有別人造好的輪子嗎箭券?答案是肯定的,比較常用的就是MonkeyDev了疑枯。當(dāng)然在學(xué)習(xí)使用MonkeyDev之前辩块,必須先了解Logos。
Hook
-
1荆永,先新建一個(gè)Demo废亭,SB拖兩個(gè)button,連線代碼如下準(zhǔn)備如下
- (IBAction)clickRightBtn:(id)sender {
NSLog(@"點(diǎn)擊右邊");
}
- (IBAction)clickLeftBtn:(id)sender {
NSLog(@"點(diǎn)擊左邊");
}
-
2具钥,新建monkeyAPP
image.png
將Demo.app放進(jìn)
TargetApp
文件夾下豆村。
-
3,hook
在xxxxxDylib.xm編寫logos代碼
#import <UIKit/UIKit.h>
@interface ViewController
+(void)test;
@end
%hook ViewController
- (void)clickRightBtn:(id)org {
%orig;//調(diào)用原始函數(shù)骂删,可以有返回值掌动,也可以有參數(shù)
NSLog(@"我用MonkeyDev hook到你了 ??????");
%log;//打印參數(shù)信息self,_com,其他參數(shù)
}
- (void)clickLeftBtn:(id)org {
NSLog(@"我用MonkeyDev hook到你了 ??????");
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//%c類似self.class 也類似NSClassFromString()
[%c(ViewController) test];
}
%new //添加新方法
+(void)test{
NSLog(@"這是Monkey添加的test方法");
}
%end
點(diǎn)擊左邊按鈕打印:
2018-05-16 15:41:49.515561+0800 HelloMonkeyDemo[7253:1877026] 我用MonkeyDev hook到你了 ??????
點(diǎn)擊右邊按鈕打犹已:
2018-05-16 15:43:06.922295+0800 HelloMonkeyDemo[7253:1877026] 點(diǎn)擊右邊
2018-05-16 15:43:06.922501+0800 HelloMonkeyDemo[7253:1877026] 我用MonkeyDev hook到你了 ??????
2018-05-16 15:43:06.923438+0800 HelloMonkeyDemo[7253:1877026] ?[1;36m[MonkeyHookDylib] ?[m?[0;36m/Users/ioskaifa/Desktop/Demo/OC/FishHook/MonkeyHook/MonkeyHookDylib/Logos/MonkeyHookDylib.xm:13?[m ?[0;30;46mDEBUG:?[m -[<ViewController: 0x12dd22930> clickRightBtn:<UIButton: 0x12de08110; frame = (235 267; 108 64); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x1c40313c0>>]
點(diǎn)擊屏幕打踊捣恕:
2018-05-16 15:45:01.759503+0800 HelloMonkeyDemo[7258:1878347] 這是Monkey添加的test方法
根據(jù)上面結(jié)果拟逮,可以得知撬统,monkeyDev已經(jīng)幫我們hook成功了,方法流程也簡(jiǎn)單敦迄。這個(gè)時(shí)候你是否有疑問恋追,如果想做個(gè)系統(tǒng)判定凭迹,Logos怎么實(shí)現(xiàn)呢?當(dāng)然Logos也提供了相應(yīng)的方法——%group.代碼如下:
%group iOS11
%hook ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
NSLog(@"這是iOS11及其以上的版本");
}
%end
%end
%group iOS10
%hook ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
NSLog(@"這是iOS11以下的版本");
}
%end
%end
//構(gòu)造函數(shù)constructor
%ctor{
NSLog(@"%f",[UIDevice currentDevice].systemVersion.floatValue);
if([UIDevice currentDevice].systemVersion.floatValue >= 11.0){
%init(iOS11);
}else{
%init(iOS10);
}
}
我的手機(jī)是iOS11的版本苦囱,點(diǎn)擊屏幕嗅绸,打印:
2018-05-16 16:00:13.627899+0800 HelloMonkeyDemo[7271:1883283] 這是iOS11及其以上的版本
以上就是用monkeyDev一些簡(jiǎn)單的hook撕彤。
這里強(qiáng)烈推薦一個(gè)神器FLEX