逆向学习笔记12——MonkeyDev的Hook

前面干了那么多准备工作,了解了那么多原理性的东西,你会发现想玩下别人的app,重签,代码注入之类的步骤实在太烦躁,难道就没有别人造好的轮子吗?答案是肯定的,比较常用的就是MonkeyDev了。当然在学习使用MonkeyDev之前,必须先了解Logos。

Hook

  • 1,先新建一个Demo,SB拖两个button,连线代码如下准备如下
- (IBAction)clickRightBtn:(id)sender {
    NSLog(@"点击右边");
}

- (IBAction)clickLeftBtn:(id)sender {
     NSLog(@"点击左边");
}

  • 2,新建monkeyAPP

image.png

将Demo.app放进TargetApp文件夹下。

  • 3,hook

xxxxxDylib.xm编写logos代码

#import 
@interface ViewController
+(void)test;
@end

%hook ViewController

- (void)clickRightBtn:(id)org {
    %orig;//调用原始函数,可以有返回值,也可以有参数
    NSLog(@"我用MonkeyDev hook到你了  ");
    %log;//打印参数信息self,_com,其他参数
}

- (void)clickLeftBtn:(id)org {
    NSLog(@"我用MonkeyDev hook到你了  ");
}


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    //%c类似self.class   也类似NSClassFromString()
    [%c(ViewController) test];
}

%new //添加新方法
+(void)test{
    NSLog(@"这是Monkey添加的test方法");
}

%end

点击左边按钮打印:

2018-05-16 15:41:49.515561+0800 HelloMonkeyDemo[7253:1877026] 我用MonkeyDev hook到你了  

点击右边按钮打印:

2018-05-16 15:43:06.922295+0800 HelloMonkeyDemo[7253:1877026] 点击右边
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 -[ clickRightBtn:>]

点击屏幕打印:

2018-05-16 15:45:01.759503+0800 HelloMonkeyDemo[7258:1878347] 这是Monkey添加的test方法

根据上面结果,可以得知,monkeyDev已经帮我们hook成功了,方法流程也简单。这个时候你是否有疑问,如果想做个系统判定,Logos怎么实现呢?当然Logos也提供了相应的方法——%group.代码如下:

%group iOS11
%hook ViewController
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"这是iOS11及其以上的版本");
}
%end
%end

%group iOS10
%hook ViewController
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"这是iOS11以下的版本");
}
%end
%end

//构造函数constructor
%ctor{
    NSLog(@"%f",[UIDevice currentDevice].systemVersion.floatValue);
    if([UIDevice currentDevice].systemVersion.floatValue >= 11.0){
        %init(iOS11);
    }else{
        %init(iOS10);
    }
}

我的手机是iOS11的版本,点击屏幕,打印:

2018-05-16 16:00:13.627899+0800 HelloMonkeyDemo[7271:1883283] 这是iOS11及其以上的版本

以上就是用monkeyDev一些简单的hook。
这里强烈推荐一个神器FLEX

你可能感兴趣的:(逆向学习笔记12——MonkeyDev的Hook)