美文网首页逆向工程
iOS逆向:Logos语法

iOS逆向:Logos语法

作者: 码小菜 | 来源:发表于2020-07-29 07:01 被阅读0次

目录
一,三种类型
二,Block level
三,Top level
四,Function level
五,实战练习
六,logify.pl

官方文档:http://iphonedevwiki.net/index.php/Logos

一,三种类型

1,Block level:此类别中的指令会打开一个代码块,并且该代码块由%end指令来关闭
2,Top level:此类别中的指令是在代码块外使用的
3,Function level:此类别中的指令是在函数中使用的

二,Block level

1,%hook:指定想要hook的类
%hook ClassName // 想要hook的类名
// 想要hook的方法
- (void)instanceMethod {}
%end
2,%group:用于代码管理或按条件初始化
%group iOS9 
%hook iOS9Class
// iOS9以上hook此方法
- (void)iOS9Method {}
%end
%end

// 在_ungrouped分组中(默认分组)
%hook othersClass
// iOS9以下hook此方法
- (void)othersMethod {}
%end
3,%subclass:定义一个子类
%subclass YJPerson : NSObject
// 属性
%property (nonatomic, copy) NSString *name;
// 方法
%new
- (void)run {}
%end

三,Top level

1,%ctor:构造函数
%ctor {}
2,%dtor:析构函数
%dtor {}

四,Function level

1,%init:初始化某个分组
%ctor {
    NSString *version = [UIDevice currentDevice].systemVersion;
    if (version.doubleValue >= 9.0) {
        %init(iOS9); // 初始化iOS9分组
    } else {
        %init; // 初始化_ungrouped分组
    }
}
2,%c:获取类对象或元类对象
%hook ClassName 
- (void)instanceMethod {
    id cls = %c(NSObject); // 类对象
    id metaClass = %c(+NSObject); // 元类对象
}
%end
3,%orig:调用方法原来的实现
%hook ClassName 
- (void)instanceMethod:(id)arg1 {
    %orig; // 省略了参数,等同于%orig(arg1)
    %orig(@"111"); // 修改参数
}
%end
4,%log:打印方法调用详细的信息
%hook ClassName 
- (void)instanceMethod {
    %log;
    %log((NSString *)@"111", (NSNumber *)@(222)); // 追加打印其他信息
}
%end

五,实战练习

1,代码(微信发现页)
%group iOS9
@interface YJPerson
- (NSString *)name;
- (void)setName:(NSString *)name;
- (void)run;
@end

%hook FindFriendEntryViewController
- (void)updateViewWhenSelectTab:(_Bool)arg1 {
    NSLog(@"class-----%p", %c(FindFriendEntryViewController));
    NSLog(@"metaClass-----%p", %c(+FindFriendEntryViewController));

    YJPerson *person = [[%c(YJPerson) alloc] init];
    person.name = @"zhangsan";
    NSLog(@"name-----%@", person.name);
    [person run];

    %orig;
    %orig(NO);
}
%end

%subclass YJPerson : NSObject
%property (nonatomic, copy) NSString *name;
%new
- (void)run {
    NSLog(@"run-----");
    %log;
    %log((NSString *)@"111", (NSNumber *)@(222));
    NSLog(@"run-----");
}
%end
%end


%hook FindFriendEntryViewController
- (void)reloadData {
    NSLog(@"reloadData-----");
}
%end


%ctor {
    NSString *version = [UIDevice currentDevice].systemVersion;
    if (version.doubleValue >= 9.0) {
        %init(iOS9); 
    } else {
        %init;
    }
}
2,打印

六,logify.pl

1,位置
2,作用
  • 将头文件转换为带有打印代码的hook文件
3,头文件(微信发现页)
4,转换
5,hook文件
6,解决编译报错
  • struct stEntryRow替换为void
  • 删除.cxx_construct.cxx_destruct方法
7,查看打印信息(将make package调整为debug模式)
本文章仅供学习交流,如有侵权,请联系删除,谢谢!

相关文章

网友评论

    本文标题:iOS逆向:Logos语法

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