常用的 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
-
该指令用于
%hook
的分组,%group
后边跟的是组名, -
%group
也是必须以%end
结尾,其中可以包含多个%hook
。 -
所有不属于某个自定义
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