[iOS 逆向 2] 越狱介绍

介绍

越狱,简单来说就是利用 iOS 系统中的漏洞,获取 root 权限,然后就可以为所欲为了。
越狱分三种:
1 引导式越狱
重启后无法开机,需要用工具重新引导
2 不完美越狱
重启后回到未越狱状态,需要重新越狱
3 完美越狱
重启后仍然保持越狱状态

至于如何寻找漏洞并利用漏洞,肯定不是初学者能搞的;
至于如何越狱,电脑端下载爱思助手,打开软件应该就能看见一键越狱了。
备注1 历代 iPhone 进入 DFU 模式的方法。如果总是进入恢复模式而不是 DFU 模式,则换成 USB-A 的线、换接口即可。
备注2 准备一个 VPN 和手机热点,一切“网络超时”相关问题都可以解决
备注3 不要用最新系统或最新款手机学习越狱,黑客还在找漏洞呢,需要一定时间

亲自尝试越狱后,Cydia 就相当于是扩展的 App Store,里面什么好东西都有。比如查看整个系统的文件,命令行工具,修改系统外观等等等等。 在这里插入图片描述
越狱系统常见安装程序类型:底层 App;Preference Bundle(“设置”里面新增一个选项);动态库;命令行工具;守护进程(Daemon)。

相关简述

越狱后移除沙盒了吗?如何访问系统目录?

没有。原有的 App 访问权限仍然不变,只能读写沙盒。
但越狱后可以通过 Cydia 安装系统级程序,这类程序拥有访问短信、联系人等应用数据的权限,比如 iFile,或者安装 OpenSSH,在电脑上通过命令行访问。
对于任意设备上的自签名应用,可以通过 Xcode 查看沙盒内容:在 Xcode 中,打开 Window - Devices and Simulators,选中设备,右侧 Installed Apps,选中 App,点击齿轮,即可查看沙盒。
对于已越狱设备,安装插件 AFC2,然后很多桌面端软件比如 iFunBox 就可以查看整个系统的文件。由于 iOS 版本更新较快,有时插件没及时更新而无法正常读取,但通过 OpenSSH 直接登陆的方式始终可以正确访问系统文件。(AFC2 安装方法、远程登陆方法、访问整个文件系统方法后面详述)

系统目录

通过 ssh 登陆到手机,仔细观察系统文件目录结构,可以总结出核心目录如下:
在这里插入图片描述
其中,个别的目录单独解释一下:

/Library/MobileSubstrate

此目录下保存了 MobileSubstrate.dylib,即 Cydia 底层,是越狱开发的基石。
它主要包括以下功能:
1 MobileLoader:用于将第三方动态库加载到运行的目标应用中。
2 MobileHooker:实现函数 Hook。
3 SafeMode:如果安装某个插件后系统崩溃,则进入该模式。该模式内不加载任何插件并可以卸载最近安装的插件。

该框架提供了让第三方开发者修改系统或者应用程序的功能。函数 Hook 会有专门的文章描述,这里介绍一下动态库注入方法。

方法 1
通过 DYLD_INSERT_LIBRARIES 环境变量设置要注入的动态库路径,即可注入。
方法 2
Cydia Substrate 框架提供的方法:将动态库放到 /Library/MobileSubstrate/DynamicLibraries/ 目录下,并放入一个同名的配置文件,文件内写明要注入的目标程序列表、其他规则,重新打开应用即可。原理就是程序打开时 Cydia Substrate 会通过 DYLD_INSERT_LIBRARIES 将自己注入,然后遍历目录下的所有配置文件,如果当前应用符合规则,则将对应的动态库通过 dlopen 打开。
方法 3
有一些工具可以增加 Mach-O 文件中的 LC_LOAD_DYLIB 加载命令,让 DYLD 加载指定的动态库。如 optool、insert_dylib 等。

/var/containers/Bundle/Application/[GUID]

iOS12 中,这个目录下保存的是来自 App Store 的各个 App,注意区分 /Applications 目录。 其他 iOS 版本可能路径不同。

/var/mobile/Containers/Data/Application/[GUID]

iOS12 中,这个目录下保存的各个 App 的沙盒。注意,不同 iOS 版本可能路径不同!

/Library/LaunchDaemons

里面存的是 要开机启动的应用 的配置文件(plist 文件),配置了启动参数、文件路径等等。

必备插件

后面的文章里肯定会不断介绍新的插件。Cydia 可以理解为 App Store,里面的应用(插件)总得有人上传吧,那么提供者,称为源。下面是几个源,直接在 Safari 打开,点击安装到 Cydia 即可。建议都安装上,因为 Cydia 自带的软件源毕竟有限。

ABCydia雷锋源:apt.abcydia.com
Ant蚂蚁源:apt.cydia.love
Cydiakk中文源:apt.cydiakk.com
多米诺骨牌源:apt.wxhbts.com

AFC2

苹果文件连接(AFC)是一个运行在每台 iPhone 上的文件传送服务,它允许通过 USB 连线存取 iPhone 的 /var/mobile/Media 目录里的文件。这个服务只能访问特定目录,那么如果我想通过 USB 连线存取任意目录呢?于是有人就模仿写了一个 AFC2,提供整个文件系统的读写权限。这意味着一台没有密码保护或在未锁定状态的越狱过的 iPhone,只要连接上一个 USB 充电站或其他人的电脑,就给了另一方整个文件系统的读取存取权限,他们可以窃取你的任何数据或安装后门插件。

如果你越狱的 iOS 版本低于 iOS11,Cydia 自带的软件源就可以,搜索 Apple File Conduit 安装就行;
如果设备版本较高,建议安装雷锋源,然后搜索 afc2,选 AFC2 iOS11~13 安装即可

在电脑端,比如 爱思助手、iFunBox 打开后,插上手机,就可以操作所有系统文件了。

OpenSSH

SSH 是一种协议,为远程登陆提供安全性。OpenSSH 是实现了这个协议的一个程序。该协议具体如何保障安全的,不展开说了。

在 Cydia 搜索安装,后面会详述远程登陆。

AppSync

越狱后安装 App 仍然会验证签名,如果一个 ipa 文件签名不正常就无法安装。
在 Cydia 搜索安装 AppSync 插件,即可屏蔽签名验证。

远程登陆

SSH 密码登陆

熟悉 Linux 的应该都会,这里简单提一下。
安装 OpenSSH 后,手机打开 Wi-Fi 查看 IP,电脑和手机需要在一个网络环境内。电脑打开命令行,运行
ssh root@IP地址,默认密码 alpine
上面是 root 用户,mobile 用户也是一样的密码,权限是用户级。
su 命令切到 root 用户;passwd 命令修改 root 密码;passwd mobile 命令修改 mobile 用户密码。

SSH 公钥登陆

免密码登录,即 ssh 公钥登陆
电脑端ssh-keygen -t rsa -P '' 生成一对公私钥,我的在 ~/.ssh/ 目录下
把公钥用 scp 命令存到手机指定位置,iOS 一般为 /var/root/.ssh/authorized_keys
这样 root 用户就免密,mobile 用户同理,把 root 换为 mobile 即可。
scp 命令使用方法:scp /path/of/local/file IP:/path/of/remote/directory/

但是每次都要输入一串 [email protected] 还是很麻烦,于是在电脑 ~/.ssh/config 文件内写入:

Host 6p
	HostName 192.168.1.107
	User root
	IdentityFile ~/.ssh/id_rsa

我让 6p 代表苹果 6 Plus,这样每次直接输入 ssh 6p 就能连接了。如果出现警告 WARNING: UNPROTECTED PRIVATE KEY FILE! 则执行 chmod 600 ~/.ssh/id_rsa 即可。(比较旧的 ssh 使用的 IdentityFile 是 ~/.ssh/id_rsa.pub)

然后 scp 命令也可以简化:
scp 本地文件 6p:/某目录

USB 登陆

适用于没有 Wi-Fi 的情况。
需要一个工具帮忙转发:mac 用 brew install usbmuxd,之后可以使用命令:
iproxy LOCAL_TCP_PORT DEVICE_TCP_PORT [UDID]
执行 iproxy 2222 22 相当于把手机的 22(即 SSH 端口)接到电脑的 2222 端口(随便一个就行)。
这时通过 ssh root@localhost -p 2222 就相当于模拟了通过 IP 地址的访问。

让远程支持中文

登陆到手机后,命令行不能输入中文,编辑 .inputrc 文件放到 /var/root 下,内容:
set meta-flag on
set convert-meta off
set input-meta on
可以在电脑上编辑好然后 scp 发送,也可以用 echo 往文件里输,也可以去 Cydia 下载一个 vi 编辑。
之后虽然看到的汉字是 \346\210\221 这种,但至少可以用了。

如果有些命令找不到,比如 vim,ps 等, 都可以去 Cydia 搜索、安装。
ps -ef 是标准格式显示进程信息
ps aux 是 BSD 格式显示进程信息,特点是可以看资源占用量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章