iOS逆向之旅(進階篇) — HOOK(Logos)

洪呵呵發表於2018-10-26

Logos官方文件

簡介

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工程

image.png

  • 把App放到TargetApp目錄下

image.png

  • 開啟_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是不是很強大呢? 來看看效果

1371540288125_.pic.jpg

相關文章