%hook
指定需要hook的class,必须以%end结尾。
例:
%hook SpringBoard
-(void)_menubuttonDown:(id)down {
NSLog(@"You've pressed home button.");
%orig;//call the original _menuButtonDown;
}
%end
%log
在%hook内部使用,将函数的类名、参数等信息写入syslog。
例:
%hook SpringBoard
-(void)_menubuttonDown:(id)down {
%log((NSString *)@"iOSRE",(NSString *)@"Debug");
%orig;//call the original _menuButtonDown;
}
%end
%orig
在hook内部使用,执行被hook的函数的原始代码。
例:
%hook SpringBoard
-(void)_menubuttonDown:(id)down {
NSLog(@"You've pressed home button.");
%orig;//call the original _menuButtonDown;
}
%end
如果去掉%orig,那么原始函数将不会得到执行。
%orig还可以用来更改原始函数的参数。
例:
%hook SBLockScreenDateViewController
-(void)setCustomSubtitleText:(id)arg1 withColor:(id)arg2 {
%orig(@"iOS 8 App Reverse Engineering",arg2);
}
%end
//这个方法会改变锁屏界面的日期显示
%group
将%hook分组,便于代码管理和按条件初始化分组,必须以%end结尾,一个%group可以包含多个%hook,所有属于未自定义的%group的%hook会被自动归类到%group _ungrouped中。
例子:
%group iOS7Class
%hook SpringBoard
-(void)_menubuttonDown:(id)down
{
NSLog(@"You've pressed home button.");
%orig;//call the original _menuButtonDown;
}
%end
%end
%init
用于初始化某个%group,必须在%hook或%ctor内调用;
可以指定需要初始化的%group,否则将会初始化_ungrouped。
%ctor
tweak的constructor,完成初始化工作,如果不执行%ctor默认会生成一个%ctor并调用%init(_ungrouped),如果执行%ctor,则必须执行%init(group/_ungrouped)。
例子:
%group iOS7Class
%hook SpringBoard
-(void)_menubuttonDown:(id)down
{
NSLog(@"You've pressed home button.");
%orig;//call the original _menuButtonDown;
}
%end
%end
%ctor
{
%init(iOS7Class);
}
//%ctor不需要以%end结尾
%new
在%hook内部使用,给一个现有class添加新函数。
%c
动态获取一个类的定义,在%hook或%ctor内使用。
网友评论