iOS越狱(7)THEOS

一、安装签名⼯工具ldid

  1. 先确保安装了了brew
 $ /usr/bin/ruby -e "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. 利用brew安装ldid
$ brew install ldid

二、修改环境变量

  1. 编辑用户的配置⽂文件
$ vim ~/.bash_profile
  1. 在.bash_profie⽂件后面加入以下2⾏
 export THEOS=~/theos
export PATH=$THEOS/bin:$PATH
  1. 让.bash_profiel配置的环境变量立即生效(或者重新打开终端)
$ source ~/.bash_profile

三、下载theos

建议在$THEOS目录下载代码(也就是刚才配置的~/theos目录)

 $ git clone --recursive https://github.com/theos/theos.git $THEOS

四、新建tweak项⽬

  1. cd到⼀一个存放项⽬代码的⽂件夹(⽐如桌⾯)
$ cd ~/Desktop
$ nic.pl
  1. 选择[13.] iphone/tweak
  2. 填写项⽬信息
  • Project Name
    项⽬名称
  • Package Name
    项⽬ID(随便写) Author/Maintainer Name
  • 作者
    直接敲回⻋按照默认做法就行(默认是Mac上的⽤户名)
  • [iphone/tweak] MobileSubstrate Bundle filter
    需要修改的APP的Bundle Identifier(喜⻢拉雅FM的是com.gemd.iting)
    可以通过Cycript查看APP的Bundle Identifier
  • [iphone/tweak] List of applications to terminate upon installation
    直接敲回⻋按照默认做法就⾏

五、编辑Makefile

  1. 在前⾯加⼊环境变量,写清楚通过哪个IP和端⼝访问⼿机
export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=10010

include $(THEOS)/makefiles/common.mk
TWEAK_NAME = ting_tweak
ting_tweak_FILES = Tweak.xm
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
    install.exec "killall -9 SpringBoard"
  1. 如果不希望每个项目的Makefile都编写IP和端口环境变量,也可以添加到用户配置⽂件中
    编辑完毕后,$ source ~/.bash_profile让配置生效(或者重启终端)
$ vim ~/.bash_profile
export THEOS=~/theos
export PATH=$THEOS/bin:$PATH
export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=10010
$ source ~/.bash_profile

六、编写代码

打开Tweak.xm⽂件

%hook XMAdAnimationView
- (id)initWithImageUrl:(id)arg1 title:(id)arg2 iconType:(long long)arg3
jumpType:(long long)arg4{
    return nil; 
}
%end

%hook XMSoundPatchPosterView
- (id)initWithFrame:(struct CGRect)arg1{
      return nil;
 }
%end

%hook XMSoundPatchPosterViewTwo
- (id)initWithFrame:(struct CGRect)arg1{
      return nil;
 }
%end

七、编译-打包-安装

  • 编译
make
  • 打包
make package
//release版本
make package debug=0
  • 安装(默认会⾃动重启SpringBoard)
make install

八、可能遇到的问题

1、make package的错误

$ make package
Can't locate IO/Compress/Lzma.pm in @INC (you may need to install the
IO::Compress::Lzma module) (@INC contains: /Library/Perl/5.18/darwin-
thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-
thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2
/System/Library/Perl/5.18/darwin-thread-multi-2level
/System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-
multi-2level /System/Library/Perl/Extras/5.18 .) at
/Users/admin/theos/bin/dm.pl line 12.
BEGIN failed--compilation aborted at /Users/admin/theos/bin/dm.pl line 12.
make: *** [internal-package] Error 2

是因为打包压缩方式有问题,改成gzip压缩就⾏

  • 修改dm.pl⽂件,用#号注释掉下⾯两句
$ vim $THEOS/vendor/dm.pl/dm.pl
#use IO::Compress::Lzma;
#use IO::Compress::Xz;
  • 修改deb.mk⽂件第6⾏的压缩⽅式为gzip
$ vim $THEOS/makefiles/package/deb.mk
_THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= gzip

2、 make的错误

  • 第一种错误
$ make
Error: You do not have an SDK in
/Library/Developer/CommandLineTools/Platforms/iPhoneOS.platform/Developer/S
DKs

是因为多个xcode导致路径(有可能安装了了好几个Xcode),需要指定一下Xcode。

 $ sudo xcode-select --switch
/Applications/Xcode.app/Contents/Developer/
  • 第二种错误
$ make
> Making all for tweak xxx...
make[2]: Nothing to be done for `internal-library-compile'.

是因为之前已经编译过,有缓存导致的,clean⼀一下即可

$ make clean
$ make

九、theos资料查询

  1. 目录结构
  2. 环境变量
  3. Logos语法
  • %hook、%end :hook一个类的开始和结束
  • %log :打印方法调用详情
    可以通过Xcode -> Window -> Devices and Simulators查看日志
  • HBDebugLog :跟NSLog类似
  • %new :添加一个新的⽅法
  • %c(className) :⽣成⼀个Class对象,⽐如%c(NSObject),类似于
    NSStringFromClass()、objc_getClass()
  • %orig :函数原来的代码逻辑
  • %ctor:在加载动态库时调⽤
  • %dtor:在程序退出时调⽤
  • logify.pl :可以将⼀个头文件快速转换成已经包含打印信息的xm文件
logify.pl xx.h > xx.xm
  1. 如果有额外的资源文件(⽐如图片),放在项目的layout文件夹中,对应着手机的根路径/。最好放到项目的layout/Library/PreferenceLoader/Preferences/myDirectory/xxx.png下面。

⼗、theos-tweak的实现过程

  • 编写Tweak代码
  • $ make :编译Tweak代码为动态库(*.dylib)
  • $ make package :将dylib打包为deb文件
  • $ make install :将deb⽂件传送到手机上,通过Cydia安装deb
  • 插件将会安装在/Library/MobileSubstrate/DynamicLibraries文件夹中
    *.dylib:编译后的Tweak代码
    *.plist:存放着需要hook的APP ID
  • 当打开APP时
    Cydia Substrate(Cydia已⾃自动安装的插件)会让APP去加载对应的dylib
    修改APP内存中的代码逻辑,去执⾏dylib中的函数代码
  • 所以,theos的tweak并不会对APP原来的可执⾏⽂件进⾏修改,仅仅是修改了了内存中的代码逻辑
  • 疑问
    未脱壳的APP是否⽀持tweak?
    支持,因为tweak是在内存中实现的,并没有修改.app包中的可执⾏文件 tweak效果是否永久性的?
    取决于tweak中⽤到的APP代码是否被修改过
    如果一旦更新APP,tweak会不会失效?
    取决于tweak中⽤到的APP代码是否被修改过
    未越狱的⼿机是否支持tweak?
    不支持
    能不能对Swift\C函数进行tweak?
    可以,⽅式跟OC不⼀样
    能不能对游戏项⽬进⾏tweak?
    可以
    但是游戏大多数是通过C++\C#编写的,⽽且类名、函数名会进行混淆操作

⼗一、logify.pl注意点

logify.pl⽣成的xm文件,有很多时候是编译不通过的,需要进⾏一些处理

  • 删掉__weak
  • 删掉inout
  • 删掉协议,或者声明⼀下协议信息@protocol XXTestDelegate;
  • 删掉- (void).cxx_destruct { %log; %orig; }
  • 替换HBLogDebug(@" = 0x%x", (unsigned int)r);为HBLogDebug(@" = 0x%@", r);
  • 替换类名为void,⽐如将XXPerson *替换为void *,或者声明⼀下类信息@class XXPerson;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354