Tweak的实质就是iOS平台的动态库。iOS平台上有两种形势的动态库,dylib与framework。Framework这种开发者用的比较多,而dylib这种就相对比较少一点。而tweak用的正是dylib这种形势的动态库。
我们可以在/Library/MobileSubstrate/DynamicLibraries目录下查看越狱手机上存在着的所有tweak。这个目录下除dylib外还存在着plist与bundle两种格式的文件,plist文件是用来标识该tweak的作用范围, 而bundle是tweak所用到的资源文件.
一般使用Tweak是通过Theos.
Tweak使用
- 安装Theos参考其文档
注意: Theos安装不强制要求安装
xz
, 但是如果你不安装的话tweak打包(make package)会出问题:Error: IO::Compress::lzma
即tweak打包默认使用的是xz, 但是你并没有安装
如果你不想安装
zx
,
1.需要修改dm.pl文件为如下配置:vim $THEOS/vendor/dm.pl/dm.pl #use IO::Compress::Lzma; #use IO::Comperss::Xz;
2.修改deb.mk为如下配置
vim $THEOS/makefiles/package/deb.mk _THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= gzip
- 创建Tweak工程
$ nic.pl
NIC 2.0 - New Instance Creator
------------------------------
[1.] iphone/activator_event
[2.] iphone/application_modern
[3.] iphone/cydget
[4.] iphone/flipswitch_switch
[5.] iphone/framework
[6.] iphone/ios7_notification_center_widget
[7.] iphone/library
[8.] iphone/notification_center_widget
[9.] iphone/preference_bundle_modern
[10.] iphone/tool
[11.] iphone/tweak
[12.] iphone/xpc_service
Choose a Template (required): 11
Project Name (required): tweaktest
Package Name [com.yourcompany.tweaktest]:
Author/Maintainer Name [Daniel]:
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]:
Instantiating iphone/tweak in tweaktest/...
Done.
$ ls
Makefile Tweak.xm control tweaktest.plist
注意:
Package Name
要为全小写
MobileSubstrate Bundle filter
为你想要逆向的APP的bundleID
- 在
control
文件或~/.bash_profile
文件中添加如下内容
export THEOS_DEVICE_IP=youriPhoneIP
export THEOS_DEVICE_PORT=22
- 编辑Tweak.xm文件, 编写hook代码
- 安装tweak到手机
make package install
Tweak原理
在dyld加载程序的过程中, 会通过DYLD_INSERT_LIBRARIES
的值插入依赖库, 在dyld的源码中如下:
// load any inserted libraries
if ( sEnv.DYLD_INSERT_LIBRARIES != NULL ) {
for (const char* const* lib = sEnv.DYLD_INSERT_LIBRARIES; *lib != NULL; ++lib)
loadInsertedDylib(*lib);
}
Tweak就是通过设置要注入的APP的DYLD_INSERT_LIBRARIES
插入你的代码
修改DYLD_INSERT_LIBRARIES
的命令如下
// 在iPhone的目录下执行
DYLD_INSERT_LIBRARIES=yourdylib.dylib /var/mobile/Containers/Bundle/Application/E1CB16DE-9254-4189-AE03-1799CAA8B0F9/YouShaQi.app/YouShaQi