使用theos hook第一个越狱ios系统的app 转至元数据结尾

今天使用theos 进行了一个简单的hook。下面介绍具体过程,和踩过的一些坑。

一:物理环境

mac os x: 10.11.5

xcode:xcode7.3.1

xcode sdk:ios9.3

越狱手机:iphone4,ios7

有几点需要注意的地方:

1;mac系统的升级和xcode的安装颇费周折 具体解决的过程见Xcode编译器安装过程说明

2;mac os x系统和越狱手机一定要保证在同一局域网内

3;ios手机上要已经越狱并安装过openssh。


如上截图 则安装了本次试验的两个重要的源:Cydia Substrate和openssh。

其中Cydia Substrate则是包含了theos工具,而openssh则使得计算机可以远程操控ios设备。

openssh默认登录密码是:alpine。通常为了设备安全都建议更改密码。

ssh-keygen -R 伺服器端的IP或網址 清除旧的ssh登录证书

二:theos 安装使用流程

手动下载配置theos十分麻烦,这里有大神做好了准备:去https://github.com/DaSens/Theos-Script下载脚本。

1:将脚本放置在桌面 文件夹内容是


进入文件夹 运行TheosScript.sh脚本文件 一路跑下去 theos安装配置完成

发现多了个文件opt


在opt里则是我们需要的工具 theos。同时这也是我们工具的路径,后文中会讲到。


2:在创建theos工程之前,我们先来创建目标hook app。


介绍下这个app

a;这个app即是在viewController界面上创建一个红色button,点击这个button,这个button上即会出现you are ok的字样。

b;这个app的bundle ID是com.antiy.chendan

c;这个app的名字叫做test1

之所以没有hook app的私有函数发短信这个接口,是因为测试机iphone sim卡失效

下面是运行这个app的结果


目标app已有,现在要做的事情就是hook 它的- (void)buttonClick:(id)sender函数,使得按钮按下去显示you are under control。

3:创建theos工程

a:在桌面上创建test_hook的文件夹,这个文件夹作为工程文件夹

b:cd 进入这个文件夹 终端执行/opt/theos/bin/nic.pl

将会启动theos工程的创建过程,这过程中会一一配置工程参数

首先会出现


选择11

然后会要求输入Project Name:(输入创建的theos工程的名字,本例 test1)

再要求输入Package Name:(输入hook app的bundle ID,本例com.antiy.chendan)

再要求输入Author/Maintainer Name:(输入作者的名字,这个跟工程关系不大,但最后在Cydia源中会显示这些信息,本例chendan)

再要求输入hook app的bundle ID:(本例com.antiy.chendan)

最后输入SpringBoard启动项:为空(不填,直接回车)

经过这个过程theos的工程就创建完毕 如下图


下面分别来介绍一下这个四个文件的意义

control:控制文件,本demo不会用到。

test1.plist:目标hook app的bundle ID存储在这里,可随时更改

Makefile:重新打包配置文件

Tweak.xm:hook的具体细节在这里编码,主要采用logos标识符来hook操作

下面给出Makefile的最终文件形式



Makefile文件最开始的时候 这里大部分项都没有 都是需要配置的

export THEOS=/opt/theos:配置文件执行路径(如果没有这个,是找不到tweak.mk文件的,终端会报错)

THEOS_DEVICE_IP = 192.168.202.232:hook的越狱设备的IP地址,上文提过,必须mac电脑和越狱设备在同一局域网内,不然无法用openssh登录进行操作

ARCHS = armv7 arm64:不同的iphone机型配置不同的,本例iphone4,使用的是armv7,如不放心,可把armv7,armv7s,arm64全带上

TARGET = iphone:latest:9.3:xcode使用的sdk

TWEAK_NAME = test1:teak工程的名字,这个在工程创建的时候就已经有配置过,不能更改

test1_FILES = Tweak.xm:目标hook文件,就在那四个文件之一

test1_FRAMEWORKS = UIKit:hook操作中使用到的ios框架,如使用了私有函数则还需要添加test1_PRIVATE_FRAMEWORKS =

剩下的就不用介绍了,安装完成,终止进程,重新启动SpringBoard。

接下来给出Tweak.xm的hook细节


接下来诸事准备完毕,可以开始hook。

利用终端cd进入你创建的tweak项目目录,然后执行make package install,然后输入两次ssh的连接密码(ssh 默认密码alpine),

然后设备就会重启SpringBoard,然后我们再次打开HOOK的APP发现按钮的点击方法已经被替换了。


三:Cydia源

在Cydia源里查看如下


可知这个app被顺利的hook住了。此后无论xcode运行多少次,这个函数仍然是被hook住的,原来的此处代码无效。

要想恢复之前的app,可进入这个test1


然后卸载即可。

而且我发现 通过theos创建application然后给iphone安装的应用是具有最高权限的,删不掉。不得不说越狱开发真的有点变态。

这也就是那些基于系统的定制化开发,安卓上比比皆是,苹果上只有越狱了应用才能取得这种权限,一旦系统更新,不再越狱,则IOS对这个应用收回这个权限。

四:原理浅探

1,Cydia Substrate 和 Mobile Substrate

Cydia Substrate 原名为 Mobile Substrate 已经正式更名为 Cydia Substrate。

它是越狱后cydia插件/软件运行的一个基础依赖包。提供软件运行的公共库,可以用来动态替换

内存中的代码、数据等所以iOS系统越狱环境下安装绝大部分插件,必须首先安装Cydia Substrate。

Cydia Substrate主要由3部分组成:MobileHooker,MobileLoader 和 safe mode。

2,MobileHooker、Logos

MobileHooker用于替换覆盖系统的方法,这个过程被称为Hooking(挂钩)它主要包含两个函数:voidMSHookMessageEx(Classclass, SEL selector, IMP replacement, IMP *result);voidMSHookFunction(void*function,void* replacement,void** p_original);MSHookMessageEx 主要作用于Objective-C函数MSHookFunction 主要作用于C和C++函数Logos语法就是对此函数做了一层封装,让编写hook代码变的更直观,上面的例子用的就是logos语法。MSHookMessageEx 和MSHookFunction 使用方法这里就不介绍了,大家可去看书籍或者查询相关资料。

3,MobileLoader

MobileLoader用于加载第三方dylib在运行的应用程序中。

启动时MobileLoader会根据dylib的同名plist文件指定的作用范围,有选择的在不同进程里通过dlopen函数打开目录/Library/MobileSubstrate/DynamicLibraries/ 下的所有dylib。

4,safe mode

因为APP程序质量参差不齐崩溃再所难免,tweak本质是dylib,寄生在别人进程里,如果注入Springboard等。系统进程一旦出错,可能导致整个进程崩溃,崩溃后就会造成iOS瘫痪。

所以CydiaSubstrate引入了安全模式,在安全模式下所有基于CydiaSubstratede 的三方dylib都会被禁用,便于查错与修复。

建议自己测试的时候如果HOOK Springboard的时候一定要注意!如果出错,进入安全模式删除插件即可。

参考资料:http://www.jianshu.com/p/8982e9670fc6http://www.jianshu.com/p/2d2c492a283c

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

推荐阅读更多精彩内容