1.安装

导入环境变成,然后克隆下来

 echo "export THEOS=/opt/theos" >> ~/.profile

 git clone --recursive https://github.com/theos/theos.git $THEOS

2.新建项目

如下新建项目,我这里是新建一个deb文件

xxxx@mimi  ~/tool/tweak $ nic.pl
NIC 2.0 - New Instance Creator
------------------------------
  [1.] iphone/activator_event
  [2.] iphone/application_modern
  [3.] iphone/application_swift
  [4.] iphone/flipswitch_switch
  [5.] iphone/framework
  [6.] iphone/library
  [7.] iphone/preference_bundle_modern
  [8.] iphone/tool
  [9.] iphone/tool_swift
  [10.] iphone/tweak
  [11.] iphone/xpc_service
Choose a Template (required): 10
Project Name (required): test
Package Name [com.yourcompany.test]: 
Author/Maintainer Name [xxxx]: 
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.xxxx.xyk
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: TEST
Instantiating iphone/tweak in test/...
Done.

建好后会有四个文件,在 “Tweak.x” 写我们的HOOK代码。 关键字"HOOK_LOG"可以在日志打印的时候过滤

%hook NetWorkHelper 
+(id)doEncryptWithType:(int)type key:(id)key content:(id)content
{
    id ret = %orig;
    NSLog(@"[**HOOK_LOG**] NetWorkHelper doEncryptWithType Type=%d,key=%@,content=%@,ret=%@", type, key, content,ret);
    return ret;
}
%end

写好后保存并编译,安装

此处记得导入环境变量 “THEOS_DEVICE_IP” 此变量指向你的iphone

export THEOS_DEVICE_IP=192.168.1.1
make clean;make package;make install

可以进入iphone确认是否安装成功,如下显示即代表安装成功。

xxxde-iPhone:~ root# dpkg -l | grep test
ii  com.yourcompany.test                      0.0.1-1+debug   iphoneos-arm An awesome MobileSubstrate tweak!

然后我们现在打开APP看一下日志输出信息。

1577089560024.jpg

3.tweak开发事项

%hook 指定需要hook的类名,以%end结尾
%log 用来打印log的,将信息输入到syslog中,如%log((NSString *)@"ZeluLi")
%orig 执行被hook函数的原始代码,类似于super.method功能
%group 该指令用于%hook的分组,%group后边跟的是组名,%group也是必须以%end结尾,其中可以包含多个%hook
%init 该指令用来初始化某个%group,一个group只有被初始化后才可生效,init必须在hook中进行执行。
%ctor tweak的构造器,用来初始化,如果不显式定义,Theos就会自动生成一个%ctor,并在其中调用%init(_ungrouped). 如:%ctor { %init(_ungrouped)}
%new 该指令用来给现有的class添加一个新的函数。与Runtime中的class_addMethod相同。
%c 该指令用来获取一个类的名称,类似于objc_getClass。

详细可参考:http://iphonedevwiki.net/index.php/Logos