hooker

iOS逆向与安全6.1:Logos

2019-06-16  本文已影响0人  looha

Logos

Logos语法其实是CydiaSubstruct框架提供的一组宏定义。便于开发者使用宏进行HOOK操作。语法简单,功能强大且稳定。
http://iphonedevwiki.net/index.php/Logos

Logos语法分为三大类:

语法

这一类型的指令会开辟一个代码块,以%end结束。
%group、%hook、% subclass 、 %end

这个TopLevel指令不放在BlockLevel中。
%config、%hookf、%ctor、%dtor

EX


%hook ClassName

- (void)method{
 
}

+ (void)classMethod{
 
}

%end

%hook ClassName

%new
+ (void)ClassMethod{

}

- (void)newMethod{

}

%end

%group group1

%hook ClassName
- (void)method{
 
}

+ (void)classMethod{
 
}
%end


%end

%ctor(constructor)
构造函数,用于确定加载那个组。和%init结合用
%init
用来初始化某个组。

常用语法

@interface ViewController : UIViewController
    
+(void) New_classMethod;
    
@end

%new
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSLog(@"点击了屏幕");
    //调用类方法
    [%c(ViewController) New_classMethod];//新添加的方法,调用时需要头文件申明
}

%new
+(void) New_classMethod{//新添加的方法,调用时需要头文件申明
    NSLog(@"这是一个类方法");
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSLog(@"点击了屏幕");
    //调用类方法
    [%c(ViewController) New_classMethod];
}

完整的例子


#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
    
+(void)New_classMethod;
    
@end

%group group1
%hook ViewController

- (void)loginBtnClick:(id)sender{
    %orig;
    NSLog(@"chengg !");
}

%new
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSLog(@"点击了屏幕");
    //调用类方法
    [%c(ViewController) New_classMethod];
}

%new
+(void) New_classMethod{
    NSLog(@"这是一个类方法");
}

%end
%end


%group group2
%hook ViewController
- (void)loginBtnClick:(id)sender{
    NSLog(@"哥么我第二组!");
}
%end
%end



//构造函数
%ctor{
    NSString * v = [UIDevice currentDevice].systemVersion;
    if(v.doubleValue > 11.0){
        %init(group1);
    }else{
        %init(group2);
    }
}

添加FLEX工具,手机端界面调试

pod 'FLEX'
pod 导入FLEX框架

2.代码中引用
mokey中 Dylid.m文件中

引入 FlEX,然后显示FlEX工具

#import <FLEX/FLEX.h>

    [[FLEXManager sharedManager] showExplorer];//显示FlEX工具

显示FLEX工具

界面调试

dump 导出头文件
cycript调试查看

    UITableView * tableView = MSHookIvar <UITableView *>(self,"_tableView");//取出self的tableView成员变量

    NSMutableArray *dataSection = MSHookIvar<NSMutableArray*>(self,"_arrSections");//取出self的arrSections成员变量
- (long long)numberOfSectionsInTableView:(id)arg1{
    UITableView * tableView = MSHookIvar <UITableView *>(self,"_tableView");
    
    if([tableView.nextResponder.nextResponder isKindOfClass:%c(NewSettingViewController)]){//定位到设置界面
        //在原来基础上多搞一组
        return %orig+1;
        
    }else{
        return %orig;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读