使用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。


使用theos hook第一个越狱ios系统的app 转至元数据结尾_第1张图片
使用theos hook第一个越狱ios系统的app 转至元数据结尾_第2张图片

如上截图 则安装了本次试验的两个重要的源: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


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

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


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


使用theos hook第一个越狱ios系统的app 转至元数据结尾_第4张图片
使用theos hook第一个越狱ios系统的app 转至元数据结尾_第5张图片
使用theos hook第一个越狱ios系统的app 转至元数据结尾_第6张图片

介绍下这个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的结果


使用theos hook第一个越狱ios系统的app 转至元数据结尾_第7张图片
使用theos hook第一个越狱ios系统的app 转至元数据结尾_第8张图片

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

3:创建theos工程

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

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

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

首先会出现


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

选择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的工程就创建完毕 如下图


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

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

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

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

Makefile:重新打包配置文件

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

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


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


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细节


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

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

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

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


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

三:Cydia源

在Cydia源里查看如下


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

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

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


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

然后卸载即可。

而且我发现 通过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/8982e9670fc6,http://www.jianshu.com/p/2d2c492a283c

你可能感兴趣的:(使用theos hook第一个越狱ios系统的app 转至元数据结尾)