前言

logos 语法主要是对Cydia Substrate的MSHookMessageEx函数作了一层封装。

I 、Logos语法

1.1 %hook

指定需要hook的class,必须以%end结尾。

1.2 %log

该指令在%hook内部使用,将函数的类名、参数等信息写入syslog,可以%log([(),……])的格式追加其他打印信息。

1.3 %orig

该指令在%hook内部使用,执行被hook的函数的原始代码;也可以用%orig更改原始函数的参数。

1.4 %group

该指令用于将%hook分组,便于代码管理及按条件初始化分组,必须以%end结尾。
一个%group可以包含多个%hook,所有不属于某个自定义group的%hook会被隐式归类到%group_ungrouped中。

1.5%init

该指令用于初始化某个%group,必须在%hook或%ctor内调用;如果带参数,则初始化指定的group,如果不带参数,则初始化_ungrouped.

注:
切记,只有调用了%ini,对应的%group才能起作用!

1.6 %ctor

tweak的constructor,完成初始化工作;如果不显示定义,Theos会自动生成一个%ctor,并在其中调用%init(_ungrouped)。

1.7 %new

在%hook内部使用,给一个现有class添加新函数,功能与class_addMethod相同。

注:
Objective-C的category与class_addMethod的区别:
前者是静态的而后者是动态的。

1.8 %c

该指令的作用等同于objc_getClass或NSClassFromString,即动态获取一个类的定义,在%hook或%ctor内使用 。

【类】
1、类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。
2、类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。
3、类的实例称为对象。

see also

用到的工具:
cycript、Hopper、SSL Kill Switch 2、MachOView、Reveal

相关文章及代码参考:
https:///Urinx/iOSAppHook
http://yulingtianxia.com/blog/2017/02/28/Make-WeChat-Great-Again/
https:///iosre/WeChatRobotForExample/
http://www.jianshu.com/p/262b9849fa10