先来看看效果:
最近在看 《ios应用逆向工程(第二版)》刚好看到利用theos创建tweak工程于是就上手试了一下。
1.安装THEOS
1.1
打开终端,设置目录
export THEOS=/opt/theos
安装 THEOS
sudo svn co http://svn.howett.net/svn/theos/trunk $THEOS
1.2 下载ldid
下载到tmp
sudo curl -s http://dl.dropbox.com/u/3157793/ldid > /tmp/ldid
复制
sudo cp /tmp/ldid $THEOS/bin/
权限
sudo chmod +x $THEOS/bin/ldid
删除
rm /tmp/ldid
1.3dpkg,打包用
安装Xcode Command Tools
xcode-select --install
安装Macport 选择自己的系统版本
https://guide.macports.org/chunked/installing.macports.html
设置下Port的环境 不然一直报command not found: port
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
安装dpkg
sudo port install dpkg
2.1创建Theos工程
如果之前的command已经关闭,重新输入运行 export THEOS=/opt/theos 设置环境变量
$THEOS/bin/nic.pl
2.2 选择个工程模板
创建tweak工程选择11
输入相应的参数
2.3 创建好后会生成4个文件
Makefile、Tweak.xm、control、iOSREProject.plist 下面进行简单说明。
2.3.1Makefile
Makefile 文件指定工程用到的文件、框架、库等信息,将整个过程自动化,下图为里面内容说明。
2.3.2Tweak.xm
用 Theos 创建 tweak 工程, 认生成的源文件是 Tweak.xm。
如果后缀名是单独一个“ x”,说明源文件支持 Logos 和 C 语法;
如果后缀名是“ xm ”,说明源文件支持 Logos 和 C/C++ 语法,与“ m ”和“ mm ”的区别类似。
Tweak.xm 语法众多,在这里简单介绍一些,详细语法大家可以去看书籍。
● %hook
指定需要 hook 的 class, 必须以 %end 结尾
%hook SpringBoard
- (void)_menuButtonDown:(id)down {
NSLog(@"You've pressed home button.");
%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 更改原始 数的参数,例如:
%hook SBLockScreenDateViewController
- (void)setCustomSubtitleText:(id)arg1 withColor:(id)arg2 {
%orig(@"li lei", arg2); }
%end
2.3.3control文件
control文件 录了deb包管理系统所需的基本信息,会被打包进deb包里。
iOSREProject 里 control 文件的内容如下:
2.3.4iOSREProject.plist文件
简单来说就是里面描述了tweak 的作用范围,也就是需要作用的APP的bundle identifier。
也就是在创建项目的时候填写的这个地方:
3.1 工程配置完成后,开始打包编译安装
cd theos工程目录
make package install
再次过程中需要输入两次密码
**补充
如果在打包安装的时候出现如下错误:
找到:
把原来的打包方式改成gzip即可: