iOS安全:Tweak开发环境及入门
原创 2021-08-26
Tweak原指微调以增强电子系统功能的实用工具;在iOS中,Tweak是广泛使用的越狱插件开发工具,通过创建dylib注入到宿主进程,完成各种HOOK操作。阅读本文将快速入门Tweak开发。
Tweak开发环境
Theos
Theos是一个越狱开发工具包,用来创建Tweak项目。
export THEOS=/opt/theos
git clone https://github.com/theos/theos.git $THEOS
cd /opt/theos
git submodule update --init --recursive
ldid
ldid是签名工具,运行在越狱手机上用于取代XCode自带的codesign。下载之后放在/opt/theos/bin
目录,并赋予可行性权限:
sudo chmod 777 /opt/theos/bin/ldid
OpenSSH
在越狱iPhone Cydia中搜索OpenSSH安装,安装完成即可通过ssh登录到iPhone。
/*
保持mac和iPhone链接同一个WiFi。iOS上用户有两个:root和mobile。密码默认是:alpine。
*/
ssh mobile@iphone's IP
CydiaSubstrate
CydiaSubstrate是HOOK框架,为进程注入指定了标准接口,是Tweak项目的依赖库。
在越狱iPhone上通过OpenSSH拷贝CydiaSubstrate.framework
中的两个库文件到/opt/theos/lib/
,并重命名。
sudo scp mobile@(iphone's IP):/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate* /opt/theos/lib/
sudo mv CydiaSubstrate libsubstrate.dylib
dpkg-deb
deb是越狱开发安装包的标准格式,dpkg-deb是用于制作deb安装包的工具。下载dm.pl,重命名为dpkg-deb,放到/opt/theos/bin/
目录下,赋予其可执行权限:
Tweak项目入门
新建Tweak项目
环境准备好之后,新建一个工作目录,创建一个Tweak项目:
/opt/theos/bin/nic.pl
选择iphone/tweak
序号,依此输入工程名称、包名、作者名称等信息即可创建完成。默认会创建四个文件:
- control
包含工程名称、包名、作者名称、版本号依赖等。
- Makefile
编译脚本文件。
- Tweak.x
采用Logos语法的Tweak源代码文件,类似于C/C++源代码。通过Makefile中的[Project Name]_FILES指定参与编译的源文件。有两种格式的后缀:x和xm:x代表源文件支持Logos和C语法;xm代表源文件支持Logos和C/C++语法。
- [Project Name]Test.plist
{ Filter = { Bundles = ( "com.apple.springboard", "com.easeapi.app" ); }; }
指定该Tweak项目将注入那些APP。
exec of lzma -c1 failed:
open2: exec of lzma -c1 failed: No such file or directory at /opt/theos/bin/dm.pl line 116.
make: *** [internal-package] Error 2
vim $THEOS/makefiles/package/deb.mk
_THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= lzma
//修改为:
_THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= gzip
Makefile解释
include $(THEOS_MAKE_PATH)/tweak.mk
Theos工程有Application、Tweak和Tool三种类型,对应的.mk文件分别是application.mk、tweak.mk和tool.mk。
ARCHS = armv7 arm64
指定处理器架构。
TARGET := iphone:clang:latest:7.0
指定SDK版本。
[Project Name]_FRAMEWORKS = UIKit CoreTelephony
导入公开的framework。[Project Name]请替换成项目名称。
[Project Name]_PRIVATE_FRAMEWORKS = ChatKit IMCore
导入私有framework。如果导入的是自己的framework等,需要把framework放在/opt/theos/vendor/lib
目录,头文件放在/opt/theos/vendor/include
或当前工程根目录都可以。
[Project Name]_FILES = One.cpp Tweak.x
指定参与编译的文件。
[Project Name]_LDFLAGS = -lz –lsqlite3.0
配置链接库。
编译命令
make
编译。
make package
编译打包,实际上是先执行make,再执行dpkg-deb。make package之后会生成.thos/_目录,就是deb的格式。
make package install
在Makefile最前面添加:
THEOS_DEVICE_IP = "iOS IP"
ARCHS = armv7 arm64
TARGET = iphone:latest:8.0
执行make package install就可以将动态库安装到iOS越狱iOS设备上,目录为:
/Library/MobileSubstrate/DynamicLibraries
Logos语法
%hook
指定需要HOOK的class,必须以%end结尾。
%log
在%hook和%end内使用,打印log。
%orig
在%hook和%end内使用,执行被hook的函数的原始代码。
%ctor
类似C/C++的constructor函数,完成初始化工作。
%new
在%hook和%end内使用,给class添加函数。
相关文章:
iOS Flutter 开发环境部署
iOS 13 Scene Delegate and multiple windows
iOS DeviceCheck详解
iOS安全:使用dumpdecrypted/Clutch 砸壳
iOS TestFlight的局限性及改进措施