Tweak使用及原理

Tweak的实质就是iOS平台的动态库。iOS平台上有两种形势的动态库,dylib与framework。Framework这种开发者用的比较多,而dylib这种就相对比较少一点。而tweak用的正是dylib这种形势的动态库。

我们可以在/Library/MobileSubstrate/DynamicLibraries目录下查看越狱手机上存在着的所有tweak。这个目录下除dylib外还存在着plist与bundle两种格式的文件,plist文件是用来标识该tweak的作用范围, 而bundle是tweak所用到的资源文件.

一般使用Tweak是通过Theos.

Tweak使用

  1. 安装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
  1. 创建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

  1. control文件或~/.bash_profile文件中添加如下内容
export THEOS_DEVICE_IP=youriPhoneIP
export THEOS_DEVICE_PORT=22
  1. 编辑Tweak.xm文件, 编写hook代码
  2. 安装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

你可能感兴趣的:(Tweak使用及原理)