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,这种不越狱也能够安装。

相关文章
相关标签/搜索