iOS逆向之Logos语法

1,008 阅读2分钟

Logos 官方地址

Logos 官方地址

Logos 官方地址

常用的 Logos 语法简介

1. %hook 指定需要hook的类名,以%end结尾。

%hook ViewController

-(void)viewDidLoad{

%orig;//执行原始操作

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"我来了" delegate:nil cancelButtonTitle:@"你好" otherButtonTitles:@"好的", nil];

[alert show];

}

%end

示例代码为钩住 ViewController 类的 viewDidLoad 函数,先执行原始操作,再显示弹框。

2. %log 用来打印 log 的,将信息输入到 syslog 中,格式 %log([(<type><expr>,...)]).

%hook ViewController

-(void)viewDidLoad{

%orig;//执行原始操作

%log((NSString *)@"iOSRE",(NSString *)@"Debug");

}

%end

3. %orig 执行被 hook 函数的原始代码,类似于 super.method 功能,如果去掉,原始代码不会执行。还可以使用该函数更改原始函数的参数:

%hook SBLockScreenDateViewController

-(void)setCustomSubtitleText:(id)arg1 withColor:(id)arg2{

%orig(@"hello I am hibo",arg2);

}

%end

4. %group
  1. 该指令用于 %hook 的分组,%group 后边跟的是组名,

  2. %group 也是必须以 %end 结尾,其中可以包含多个 %hook

  3. 所有不属于某个自定义 group%hook 会被隐式归类到 %group_ungrouped 中.

5. %init

该指令用来初始化某个 %group, 一个 group 只有被初始化后才可生效,init 必须在 hook 中进行执行。

6. %ctor

tweak 的构造器,用来初始化,如果不显式定义,Theos 就会自动生成一个 %ctor,并在其中调用 %init(_ungrouped) .


%ctor { %init(_ungrouped)}。

7. %dtor

tweak的构造函数,完成收尾.如果不显示定义, Theos 会自动生成一个 %dtor.

8. %new

该指令用来给现有的 class 添加一个新的函数。与 Runtime 中的 class_addMethod相同。


%hook ViewController

%new

-(void)newMethod{

}

%end

9. %c

该指令用来获取一个类的名称,类似于 objc_getClass

直接使用 在 make 的时候会报错的


-(void)btnClick{

%orig;

// 调用新的方法

[[[ViewControlle alloc ] init] newMethod];

}

应该这么用:


[[[%c(ViewController) alloc ] init] newMethod];

ps: 在越狱手机中我们可以知道苹果设备的桌面程序 SpringBoard.app,砸壳后获取到 SpringBoard 对应的头文件。根据头文件我们可以大致猜测到类及类方法的作用,因此使用以上方法,我们也可以更改其他一些显示,修改桌面时间文本、颜色、电池状态、电量,当然这些可能没有实用价值,我们只是通过这种方式来进一步了解逆向。


End