簡介
Logos本是Theos的一個元件,Monkey將裡面libsubstrate.dylib移植出來,所以在Monkey工程下也可以使用Logos進行Hook程式碼
常用到的一些語法
- HOOK 某個類裡面的某個方法
%hook 類名
- (void)方法名:(id)arg1 ....
{
}
%end
複製程式碼
- 為某個類新增新的方法
%hook class_name
// 新增一個響應事件
%new
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self.view endEditing:YES];
}
// 新增一個類方法
%new
+(void) new_func_name {
NSLog(@"這是一個類方法!");
}
%end
複製程式碼
- 建構函式和解構函式
%ctor 建構函式
%dtor 解構函式
複製程式碼
- 組的概念
%group group1
%hook class_name
- (void)func_name:(id)arg1 ....
{
//修改替換成的內容
}
%end
%end
%group group2
%hook class_name
- (void)func_name:(id)arg1 ....
{
//修改替換成的內容
}
%end
%end
// 定義了組就必須對其初始化
%ctor{
NSString * version = [UIDevice currentDevice].systemVersion;
if(version.doubleValue >= 10){// 當iOS版本大於10則使用組2的Logos程式碼,否則使用組1的
%init(group2)
}else{
%init(group1)
}
}
複製程式碼
- 常用的巨集
%log 列印原始方法的所有引數資訊
%orig 執行原始的方法
[%c(ViewController) click]; %c獲取類
複製程式碼
案例
本案例在Monkey工廠下,利用Logos語法實現與 iOS逆向之旅(進階篇) — HOOK(Method Swizzling)中案例一模一樣的功能。
- 首先新建一個Monkey工程
- 把App放到TargetApp目錄下
- 開啟_6_HOOK_LogosDylib.xm檔案,在檔案上面進行開發
先刪除掉執行的內容,開始寫Logos語法進行HOOK
%hook WCAccountLoginControlLogic
- (void) onFirstViewLogin {
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"你想登入??" message:nil preferredStyle:UIAlertControllerStyleAlert];
[alertVC addAction:[UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleCancel handler:nil]];
[[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:alertVC animated:true completion:nil];
}
%end
複製程式碼
通過這段簡單的程式碼,就完成我們之前一系列複雜的HOOK,Logos是不是很強大呢? 來看看效果