编写一个iOS越狱插件(tweak)
折腾了几天,搞定一个tweak(FPSCounter),把一些重要步骤记录一下。
关于这个插件
这是个帧速计数器(FPSCounter),方便我们查看应用的帧速,从而做出相应优化。这里不仅可以看自己的应用,也可以看系统中其他应用。
截图:
如何安装
- 在Cydia中搜索
FPSCounter
.(你的Cydia中必须有BigBoss源) - 或者到source code下载后自行编译安装。
前提条件
一个越狱的iOS设备。
需要越狱的设备来获取可用的CydiaSubstrate, 同时也需要越狱设备来安装和测试。
安装和配置Theos
Theos大大简化了tweak的编写,建议大家从Theos开始编写tweak。
按照《iOS应用逆向工程》中所述,将Theos下载下来之后,还有一系列的配置。
我将这些配置工作写成了一个脚本,省去每次都做这些繁琐的配置。
这个脚本默认Theos是下载到“个人目录/jailbreak/Opensource”,如果不想修改脚本,可用使用与脚本相同的目录。
配置默认路径
修改.bash_profile文件,将~/jailbreak/Opensource/theos/bin加入到PATH中。
保存之后重新启动一下终端。
获取iOS系统头文件
按照《iOS应用逆向工程》的介绍,正规的获取方式是用dyld_decache从iOS设备中/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armXX将二进制文件提取出来,然后用class-dump去把头文件提取出来。
为了方便起见,这里采用第二种方法,就是直接用rpetrich的头文件。
将这些头文件放到Theos的include目录下。
开始编写tweak!
新建一个tweak
在终端运行nic.pl, 在出现的菜单中选择想要的tweak种类。
一般的tweak是选tweak类型。preference_bundle是可自定义的设置插件,如果你选择这种,会遇到一些奇怪的坑,下面会给出解决办法:)
普通的tweak会包含以下文件:
- control 包含deb包管理的基本信息
- tweak.x 插件源文件,支持c, objectiveC,Logos语法
- XXX.plist 指明插件在哪些应用中加载
- layout目录 相当于iOS设备根目录,里面的文件会被对应的安装到设备的对应位置。
- Makefile make文件
修改make文件
在Makefile最上面加上这两句:
1 2 |
|
上面一句表示要编译armv7 armv7s arm64三种cpu架构,
下面一句表示编译iPhone插件:用clang编译:用系统中最新SDK编译:目标系统是7.0(和以上)
编译
在终端输入:
1
|
|
编译成功后,输入
1
|
|
一条命令完成编译打包和安装。
如果有错误,请参考下面的问题。
遇到的问题
报错找不到IOSurfaceAPI.h。解决办法:rpetrich头文件包里有这个文件,手动拷贝到include目录。
编译错误,报错architecture not supported。解决办法:如果是报错在.m文件或.mm文件,Theos对.m的支持不好,将其后缀改为.x文件或.xm文件一般就可以解决。
link错误,Undefined symbols。解决办法:Makefile中有XXX_FRAMEWORKS = UIKit,在这后面把你用到的framework都加上。
如果还用了其他的库,需要在Makefile中加上XXX_LDFLAGS = -lx,这里x是变量,代指库名。
make package install时报错:make install requires that you set THEOS_DEVICE_IP in your environment. It is also recommended that you have public-key authentication set up for root over SSH, or you will be entering your password a lot.
需运行
export THEOS_DEVICE_IP=你手机的ip地址
。后面那句话是建议你把电脑ssh 公钥设为手机的authorized_keys,这样就不用每次输密码了。
在设备上插件不运行。解决办法:连上xcode看device log,是否是cpu type不支持或者其他原因。
如果还有问题,请仔细看编译警告、device log,并自己打log,直到确定问题所在。
tweak默认是mrc的,一定要正确保持和释放。这里不太建议改成ARC,除非你知道你在干嘛。
学习和模仿
成长离不开学习和模仿,有以下途径可以模仿:
- 在手机上用cydia查看已安装的tweak,看他们有哪些文件,然后用iFunbox将这些文件拷贝出来学习或逆向。
- github上有大量开源的代码(比如大神rpetrich、DHowett等),可以看看别人是怎么写的。
参考
http://iphonedevwiki.net/index.php/Main_Page
https://www.andyibanez.com/creating-aggregate-projects-theos-configurable-tweak/
https://github.com/mlnlover11/TouchIDEverywhere/issues/2
https://github.com/DHowett/theos/issues/73
http://bbs.iosre.com/t/theos-make-error-unsupported-architecture/1196