Theos

Theos 是一個越獄開發工具包,安裝方法能夠參考 Wikiphp

安裝 dpkg

dpkg(Debian Packager) 是 Theos 依賴工具之一,可使用 dpkg 製做 deb,Theos 開發的插件都會以 deb 的格式進行發佈,在安裝 Theos 以前須要安裝 dpkg,安裝藉助於 Homebrew 安裝,確保先安裝 Homebrew。git

brew install dpkggithub

安裝 Idid

Theos 開發中,iOS 文件的簽名使用 Idid 工具完成,代替了 XCode 中的 Codesign。bash

brew install ldid微信

安裝 Perl

brew install xz
sudo cpan IO::Compress::Lzma架構

安裝 Theos

將 Theos 安裝在 /opt/theos 目錄下app

sudo Git clone --recursive https://github.com/theos/theos.git /opt/theos框架

將 /opt/theos 權限改成本身iphone

sudo chown \((id -u):\)(id -g) /opt/theoside

配置環境變量

export THEOS=/opt/theos
export PATH=/opt/theos/bin/:$PATH

測試是否安裝成功

nic.pl

關閉終端,再次啓動,環境變量失效,nic.pl 執行失敗,能夠將環境變量寫入文件,沒必要每次都設置環境變量

touch ~/.bash_profile
open -t ~/.bash_profile
source ~/.bash_profile

Demo 案例

以啓動微信,彈出彈框爲力說明

  • 選擇Tweak,建立插件名稱,插件bundle id,目標應用的bundle id等基本信息
  • 設置完畢後,會生成Control,Makefile,Tweak.xm,ProjectName.plist 文件
  • 對 Makefile, Tweak.xm 修改後執行 make, make package, make install

Control 文件記錄了工程的基本信息,會被打包進 deb 包中

//用於描述這個 deb 包的名字,命名方式和 bundle identifier 相似,能夠按需更改
Package: com.ecarx.wechatphone
//用於描述工程的名字,能夠按需更改
Name: WeChatPhone
//用於描述 deb 包的依賴,以來是指程序運行的基本條件,若是iOS不知足依賴中所定義的條件,則 tweak 沒法正常工做,能夠按需更改
Depends: mobilesubstrate
//用於描述這個 deb 包的版本號,能夠按需更改
Version: 0.0.1
//用於描述 deb 安裝的目標設備架構,不要更改
Architecture: iphoneos-arm
//deb 包的簡單介紹,能夠按需更改
Description: An awesome MobileSubstrate tweak!
//用於描述 deb 包的維護人,即 deb 包的製做者而非 tweak 的做者,能夠按需更改
Maintainer: Mr.Roy
Author: Mr.Roy
//用於描述 deb 包所屬的程序類別,不要更改
Section: Tweaks

Makefile 文件制定工程編譯和連接要用到的文件,框架,庫等信息

//經過 SSH 服務,將安裝包安裝手機的 IP 指向的手機
THEOS_DEVICE_IP = 192.168.1.100
//arm
ARCHS = arm64
//SDK 版本
SDKVERSION = 11.3
//最低支持系統
Target = iphone:latest:8.0

//指定工程的 common.mk ,固定寫法,不要修改
include $(THEOS)/makefiles/common.mk
//創建工程時在命令行輸入的 Project Name,與 Control Name 對應,不要更改
TWEAK_NAME = WeChatPhone
//指定工程包含的源文件,若是多個,用空格分開,能夠按需更改
WeChatPhone_FILES = Tweak.xm

//指定工程的 mk 文件,由於新建的是 tweak 工程,因此是 tweak.mk,能夠是 application.mk,tool.mk 等
include $(THEOS_MAKE_PATH)/tweak.mk

//安裝後退出應用
after-install::
    install.exec "killall -9 WeChat"

Tweak.xm 逆向開發寫代碼的地方

  • %hook,%end,其中 %hook 後面指定 hook 的類名,另外一方面,hook 的整塊邏輯完成後結尾要加上 %end,在 hook 邏輯中能夠添加要 hook 的函數,並在函數內部實現想要添加的代碼邏輯
  • %orig,該語句表明執行原函數邏輯,即完成 hook 操做後能夠選擇是否掉用原函數的代碼,若須要,加上 %orig 便可
  • %log,在 log 中打印 hook 的函數的類名、參數等信息
%hook MicroMessengerAppDelegate
- (_Bool)application:(id)arg1 didFinishLaunchingWithOptions:(id)arg2 {
%orig;
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"tel://183187722753"] options:@{} completionHandler:nil];
return YES;
}
%end

Error

/makefiles/common.mk: No such file or directory
/tweak.mk: No such file or directory
No rule to make target `/tweak.mk'. Stop.

設置環境變量:export THEOS=/opt/theos

make[3]: *** [/Users/wangyaoguo/Desktop/Theos/hellocalculator/.theos/obj/debug/arm64/Tweak.xm.5956ecdb.o] Error 1
make[2]: *** [/Users/wangyaoguo/Desktop/Theos/hellocalculator/.theos/obj/debug/arm64/HelloCalculator.dylib] Error 2
make[1]: *** [internal-library-all_] Error 2
make: *** [HelloCalculator.all.tweak.variables] Error 2

檢查Tweak.xm 文件是否正確

Tweak

在 iOS 越獄開發中,各類破解補丁統稱爲 Tweak, 一般咱們說的越獄開發,都是指開發一個 Tweak。Tweak 依賴於一個名叫 Cydia Substrate 的動態庫,也稱爲 MobileSubstrate,是 Cydia 做者 Jay Freeman 的做品,它的主要功能是 hook 某個應用,修改代碼,替換其實現方法,Cydia 中的 Tweak 都是基於 Cydia Substrate 實現的。

Tweak 實質就是 iOS 平臺的動態庫,iOS 平臺有兩種形式的動態庫,一種是 dylib,一種是 framework。Tweak 利用 dylib 這種形式的動態庫,能夠在 /Library/MobileSubstrate/DynamicLibraries 目錄下查看存在的全部 Tweak。

Tweak.xm 是 Tweak 的核心代碼,其中 %hook,%orig,%log 等都是 theos 對 MobileSubstrate 提供的函數的宏封裝,MobileSubstrate 提供的方法的介紹能夠參考 Cydia Substrate

Tweak 的發佈有兩種方式,一種是在越獄上安裝 deb 安裝包,二是利用開發證書將補丁打包成 ipa,這種不越獄也能夠安裝。

相關文章
相關標籤/搜索