美文网首页hooker
iOS逆向与安全6.1:Logos

iOS逆向与安全6.1:Logos

作者: looha | 来源:发表于2019-06-16 23:46 被阅读0次

    Logos

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

    • 文件
      .x 说明源文件支持Logos和C语法
      .xm 说明源文件支持Logos和 c/c++语法
      编译文件时,一般会导入相关的头文件,便于编译

    Logos语法分为三大类:

    语法

    • Block level

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

    • Top level

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

    • Function level

      这一块的指令就放在方法中。
      %init、%class、 %c、 %orig、%log

    EX

    • Hook某个类的方法
    
    %hook ClassName
    
    - (void)method{
     
    }
    
    + (void)classMethod{
     
    }
    
    %end
    
    
    • 为某个类添加新方法
    %hook ClassName
    
    %new
    + (void)ClassMethod{
    
    }
    
    - (void)newMethod{
    
    }
    
    %end
    

    • %group
      用来将代码分组。开发中hook代码会很多,这样方便管理Logos代码。
    
    %group group1
    
    %hook ClassName
    - (void)method{
     
    }
    
    + (void)classMethod{
     
    }
    %end
    
    
    %end
    
    
    • 组构造 构造函数 当有多个组的时候,必须在构造函数初始化
      %ctor{
      NSString * v = [UIDevice currentDevice].systemVersion;
      if(v.doubleValue > 11.0){
      %init(group1);
      }else{
      %init(group2);
      }
      }

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

    常用语法

    • %log
      能够输出日志!! 输出方法调用的详细信息 (调用者 方法名,参数)

    • %orig(original)
      这个就是保持原有的方法实现,如果原来的方法有返回值,那么%orig 就有返回值的。

    • %new
      给某个类添加方法,在%hook 和 %end 中使用。

    @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(@"这是一个类方法");
    }
    
    • %c
      类似getClass函数,获得一个类对象。一般用于调用类方法。
    -(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工具,手机端界面调试

    • 越狱后直接安装插件使用
    • 未越狱环境
      1.利用pod集成当前项目
    pod 'FLEX'
    
    pod 导入FLEX框架

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

    引入 FlEX,然后显示FlEX工具

    #import <FLEX/FLEX.h>
    
        [[FLEXManager sharedManager] showExplorer];//显示FlEX工具
    
    
    显示FLEX工具

    界面调试

    dump 导出头文件
    cycript调试查看

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

    相关文章

      网友评论

        本文标题:iOS逆向与安全6.1:Logos

        本文链接:https://www.haomeiwen.com/subject/lcunfctx.html