Logos基本语法

%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内使用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容