背景
theos是一个跨平台的软件开发框架,常用于管理,开发和部署iOS项目,同时也是开发iOS越狱插件的主要工具。和MonkeyDev不同的是,它不依赖于xcode,可以在多个操作系统上运行。一个完整的iOS越狱开发流程包括:越狱设备,砸壳App,分析controller,编写注入程序,打包并注入dylib,重签名应用运行等步骤。本文只总结了在获得砸壳app后,使用theos注入自己编写的依赖库的步骤。
执行环境:
- pc:Apple M1 Pro
- os: Sonoma 14.5
相关工具
- otool:查看目标文件信息的工具,
用来发现应用中使用到了哪些系统库,调用了其中哪些方法,使用了库中哪些对象及属性比如查看iOS的Mach-O格式的二进制文件的信息。 - zsign:程序重签名工具。
- theos:是一个跨平台构建系统,可用于做ios越狱插件的开发
- insert_dylib:将动态库注入到二进制文件中的工具。
- install_name_tool:修改应用程序对动态库的依赖路径。
安装依赖环境
-
安装dpkg和ldid(theos依赖这两个库)
brew install dpkg ldid
-
安装theos
export THEOS=/opt/theos git clone https://github.com/theos/theos $THEOS export PATH=$PATH:$THEOS/bin update-theos
-
安装insert_dylib
export INSERTLIB = /opt/insert_dylib git clone https://github.com/Tyilo/insert_dylib $INSERTLIB cd /opt/insert_dylib xcodebuild export PATH=$PATH:$INSERTLIB/build/Release/
-
安装zsign
参考:https://github.com/zhlynn/zsign
创建iphone/tweak项目
- 创建iphone/tweak项目
- 文件目录介绍
-
Makefile:工程用到的文件,框架,库等信息。可以置顶SDK版本,处理器架构等。(在此文件中加上我们需要注入的framwork,同时需要将对应的framework源码移入theos的lib目录中才能编译)
-
wechatinject.plist:制定bundle为tweak的作用对象,可指定多个。
-
control:tweak所需的基本信息。
-
Tweak.x:重要文件,用来编写hook代码。(.x 文件支持Logos语法,.xm 文件支持Logos和C/C++语法)。logos语法请参考:https://theos.dev/docs/logos-syntax
- 编译
编译成功后,动态库位于~/.theos/obj/debug目录make clean make
- 替换libsubstrate.dylib
非越狱手机中没有CydiaSubstrate库,手动替换。install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib .theos/obj/debug/wechatinject.dylib
注入依赖库
-
注入libsubstrate库,这个库在非越狱手机中没有,需要手动将这个库打进ipa包中。
libsubstrate库能够在程序运行时加载我们注入的动态库。git clone https://github.com/TKkk-iOSer/TKTweakDemo.git cp others/libsubstrate.dylib ~/Downloads/Payload/WeChat.app/
-
将我们编译的dylib库移动到ipa包中。
cp .theos/obj/debug/wechatinject.dylib ~/Downloads/Payload/WeChat.app/
-
在WeChat库中执行注入,会得到WeChat_patched文件
cd ~/Downloads/Payload/WeChat.app/ insert_dylib @executable_path/wechatinject.dylib ~/Downloads/Payload/WeChat.app/WeChat
替换wechat文件
rm WeChat mv WeChat_patched WeChat
-
重签名
zsign -f -k ~/Downloads/cert.p12 -p xxxxxx -m xxxxx.mobileprovision -o ~/Downloads/wechat2.ipa ~/Downloads/Payload -
安装验证。
参考
https://github.com/TKkk-iOSer/TKTweakDemo