人在年轻时,最头疼的一件事就是决定自己这一生要做什么。
——王小波 《工作与人生》
前言
- 很早之前就想研究了解一下iOS越狱开发和逆向相关的知识,然后就买了《iOS应用逆向工程》这本’小黄书’,也查了查相关的资料,比较出名的可能就是iOS女神念茜的iOS攻防系列文章了。
- 但是由于自身的惰性和其他的外界因素,导致’小黄书’翻了几章后就在公司的办公桌上处于长时间的休眠状态,而念茜的文章年代稍微比较久远也在读了两篇后被遗忘在chrome的书签里面,真真的从入门到放弃。🤣
- 最近这段时间刚好工作行有一些闲暇的时间,偶尔在网上看到《iOS 应用逆向与安全》这本书,这是自“小黄书”后的又一本关于逆向安全的书。随想再从头开始学习下iOS越狱开发和逆向相关的知识,并将学习过程及采坑经验记录于此,希望这一次会有始有终…
- 这是本系列的第一篇,希望不会成为最后一篇🐒😂
正文
- 现在Apple公司已经越来越注重开放性,iPhone已经不像几年前那样异常封闭,许多以前只有越狱才有的功能也慢慢的原生自带,越来越多的小伙伴已经没有了当前那种越狱的激情,而随着越来越多的越狱大神隐退、越狱组织解散,辉煌了近10年的越狱也渐渐走向了没落。
- 但如果想借鉴别人的App某个功能实现思路或者加强我们自己App的安全性,那么最好的途径就是从越狱开发和逆向入手,而这一切的开始的基础:你必须要有一部越狱过的iPhone手机。
- 所有资料文件&工具在这里
iOS 9x 32位系统越狱
配置
- 机型:iPhone4s
- 版本:美版
- 系统:9.3.2
越狱工具
- 使用
Home Depot
越狱工具,仅支持32手机系统,如果是64位手机系统请直接使用各种助手越狱 - 支持设备(32位设备):
- iPhone 4s、iPhone 5、iPhone 5c、iPad 2、iPad 3、 iPad 4、iPad mini、iPod touch 5G
- 支持iOS系统版本:
- iOS 9.1、iOS 9.2.1、iOS 9.3、iOS 9.3.2、iOS 9.3.3、iOS 9.3.4
- 越狱须知:
- 越狱前请备份您的重要资料以免造成丢失;
- 本次越狱属于不完美越狱,若设备重启,则会恢复到未越狱状态,Cydia 及已装得越狱应用会闪退,越狱插件也将失效,需要重新激活;但是安装插件Community Offsets后,重启设备越狱也不会失效,可实现完美越狱。
- 越狱工具请在这里下载
越狱步骤
- 1、首先下载签名工具以及越狱ipa,将签名工具解压到电脑桌面,打开Impactor,手机连接电脑后软件会读取到手机信息;
- 2、然后把32位iOS9越狱ipa(MixtapePlayer.ipa)拖入软件里;
- 3、提示输入你的Apple ID账号,和Apple ID密码。
- 4、Apple ID验证完成后软件会自动安装到手机里,可以在手机桌面看到
Home Depot
的图标,这个就是越狱工具; - 5、接下来进手机
设置-通用-设备管理
,找到你的ID后点进去并点击信任(设备须保持联网状态); - 6、然后回到设备桌面,运行
Home Depot
应用,- 点击
Prepare for jailbreak
, - 再依次点击
Accept
–>Dismiss
–>Proceed With Jailbreak
–>Begin Installation
–>Use Provided Offsets
; - 等待设备自动重启后,
Cydia
就会出现在手机桌面则代表越狱完成,如果越狱重启后没有出现Cydia
,则可以多试几次,直到成功为止;
- 点击
- 成功后打开Cydia,添加插件源「http://repo.tihmstar.net」,在Cydia中搜索「Community Offsets」并插件安装,安装后即使重启越狱也不会失效,Cydia也不会闪退,相当于完美越狱。
iOS 10x 32位系统越狱
配置
- 机型:iPhone5c
- 版本:美版
- 系统:10.3.2
越狱工具
- 使用
h3lix-RC5
越狱工具,仅支持32手机系统,如果是64位手机系统请直接使用各种助手越狱。 - 支持设备(32位设备):
- iPhone 4s、iPhone 5、iPhone 5c、iPad 2、iPad 3、 iPad 4、iPad mini、iPod touch 5G
- 支持iOS系统版本:
- iOS 10 - 10.3.x
- 越狱须知:
- 越狱前请备份您的重要资料以免造成丢失;
- 本次越狱属于不完美越狱,若设备重启,则会恢复到未越狱状态,Cydia 及已装得越狱应用会闪退,越狱插件也将失效,需要重新激活;
- 越狱工具
越狱步骤
- 1、首先下载签名工具以及越狱ipa,将签名工具解压到电脑桌面,打开Impactor,手机连接电脑后软件会读取到手机信息;
- 2、然后把32位iOS10x越狱ipa(h3lix-RC5.ipa)拖入软件里;
- 3、提示输入你的Apple ID账号,和Apple ID密码。
- 4、Apple ID验证完成后软件会自动安装到手机里,可以在手机桌面看到
h3lix
的图标,这个就是越狱工具; - 5、接下来进手机
设置-通用-设备管理
,找到你的ID后点进去并点击信任(设备须保持联网状态); 6、然后回到设备桌面,运行
h3lix
应用,- 点击屏幕中间的
jailbreak
, - 等待设备自动重启后,
如果提示如下错误,可不用管
Cydia
就会出现在手机桌面则代表越狱完成,如果越狱重启后没有出现Cydia
,则可以多试几次,直到成功为止;
- 点击屏幕中间的
插件安装
- iphone越狱后就需要安装一些插件来协助进行一些逆向辅助操作。
- 如果部分需要的插件找不到,可以先尝试添加一些Cydia源。如下是我添加的源地址:
tihmstar: http://repo.tihmstar.net
多玩源: http://yuan.duowan.com
BigBoss: http://apt.thebigboss.org/repofiles/cydia/
雷锋源 http://apt.abcydia.com
- 越狱必备工具(20180702):
- openSSH // 远程控制,如远程登录 (如果越狱工具自带
Dropbear
不需要安装) - MobileTerminal // 无法安装 可用
MTerminal
代替 - MTerminal
- LLVM+Clang // 32位手机需要下载32位的才可以安装,否则无法安装(试了两台手机都没有安装成功,不知道是不是以为32位系统或者16G的缘故)
- LD64
- Darwin CC Tools
- adv-cmds: 执行 ps 命令报错,需要安装这个工具;
- iFile: (没有安装成功) 可以安装Filza
- Filza:在手机上查看文件目录;(必装)
- Apple File Conduit”2”,安装完后iFunbox等助手软件可以读取手机Root文件
- scp:终端命令,把远程设备的文件复制到另一个设备;
- openSSH // 远程控制,如远程登录 (如果越狱工具自带
- 还需要的软件:
- Cydia Translations // 安装后自带
- Cydia Substrate // 允许第三方开发者在越狱系统的方法中打一些补丁或扩展方法。
- Cydia Installer // 安装后自带
SSH
SSH通过WiFi连接手机
- OpenSSH原是一个在Linux下很实用的一个软件。iPhone本身就是一个运行BSD系统(可认为是一种Liunx)的硬件,因此,Cydia的作者Saurik把OpenSSH这一软件移植到了iOS平台上,并且简化了安全认证密钥的繁琐,使之成为一款可以在iPhone上运行的Cydia插件。
关于ssh(Secure Shell)详细资料请自行搜索相关资料,可以简单理解成『远程登录』,可以通过一台设备远程登陆另一台设备。
- 保证你的Mac和iPhone在同一网段
- 确定iPhone的IP
- 远程登陆
Terminal输入
1 | ssh root@xxx.xxx.xxx.xxx // xxx.xxx.xxx.xxx为手机ip地址 |
如果系统是iOS10.3以上,默认是不能直接使用ssh通过wifi或者USB访问手机的,详情请参考iPhone10.3.X越狱后SSH连接不上的问题(已解决)
- 1.卸载手机上的OpenSSL和Openssh
- 2.添加源:http://cydia.ichitaso.com/test
- 3.搜索并下载:dropbear
- 4.安装完毕,执行ssh root@deviceIP,默认密码为alpine(也可以在iPhone里下载ssh软件进行连接测试)
- 5.成功后,再重新安装openssh和OpenSSL了(经测试不会影响SSH连接iPhone)。
第一次连接会提醒你是否连接,输入
yes
继续,输入密码,初始密码是alpine
。- 建议将改密码改掉,因为在默认密码的情况下,任何人都可以尝试登陆你的设备。
Ikee, iOS上的一种蠕虫病毒, 通过使用默认密码alpine入侵安装了openssh的越狱设备, 然后所有数据, 包括电话本, 短信, 甚至Apple ID都有可能被窃取.所以强烈建议您修改ssh密码
- 在登录之后,你可以更改你的密码:
1 | passwd root // 提示输入两次新密码即可修改 |
- 成功后可查看手机文件目录
SSH通过USB连接手机
- 比WIFI响应速度快,网络环境无限制
usbmuxd是网上开源社区,貌似是国外牛人倾力打造的一个专门针对该功能开源库
通过brew来安装(当然也可以自己去下源码手动安装,由于依赖项比较多,所以很繁琐)
1
brew install usbmuxd
usbmuxd 自带工具iproxy,iproxy 可以快捷的操作连接iPhone等操作。由于Mac上只支持4位的端口号,所以需要把iPhone的默认端口22映射到Mac上,相当于建立一个Mac和iPhone之间的通道。
1
2iproxy 7777 22
// waiting for connection以上命令就是把当前连接设备的22端口(SSH端口)映射到电脑的7777端口,那么想和设备22端口通信,直接和本地的7777端口通信就可以了。
终端提示
waiting for connection
,表示这两个端口之间已经可以通信了,保留当前终端(如果关闭就停止端口之间的通信了),新建另一个终端输入如下指令1
ssh -p 7777 root@127.0.0.1
如果是第一次使用USB连接手机,会提示如下信息,输入
yes
继续1
2
3
4The authenticity of host '[127.0.0.1]:7777 ([127.0.0.1]:7777)' can't be established.
ECDSA key fingerprint is SHA256:rBkW26LHWZbqrbfOsrkSCeLN1gr3fADxIF5PWB8VXDI.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[127.0.0.1]:7777' (ECDSA) to the list of known hosts.如果没有修改过root密码,则输入默认
alpine
,修改过,则输入修改过密码,完成后即可连接上iPhone。
配置免ssh密码登陆
每次连接手机都需要输入密码比较麻烦,可以通过如下配置免ssh密码登陆
如果本人是做iOS开发的,项目用到了GIT版本控制,一般都配置SSH密钥了。密钥已经存在了电脑的./ssh目录中,如果没有配置,那么可手动重新生成SSH密钥,如:
1
ssh-keygen -t rsa -b 4096 -C "your_email"
生成完成后,我们会在./ssh目录中发现id_rsa.pub公钥这个文件。
然后我们把它copy出来放到个人目录下,并重命名,比如:
1 | cp /Users/SevenCho/.ssh/id_rsa.pub ~/authorized_keys |
- 手动SSH进入设备中,或者通过
Filza
,查看是否存在var/root/.ssh目录,如果没有,我们手动创建下。可通过SSH连接后mkdir创建,或者Filza
手动创建。 - 创建后我们把authorized_keys拷贝到设备中,可利用SCP命令:
1 | scp ~/authorized_keys root@iphone ip:/var/root/.ssh // iphone ip 为你手机的ip地址 |
- 然后按正常连接步骤我们就可以直接SSH连接的时候不用输入密码了。
- 这个时候,如果我们使用tweak打包时候,也不会再让我们输入SSH密码了。
重置ssh登陆密码
- 如果你不幸忘记了ssh密码,可以在Cydia中下载
Filza
软件,通过Filza找到/private/etc/master.password
文件,文件中会有以下一段:
root:xxxxxxxxxxxxx:0:0::0:0:System
Administrator:/var/root:/bin/sh
mobile:xxxxxxxxxxxxx:501:501::0:0:Mobile
User:/var/mobile:/bin/sh
- 将root:及mobile:后面的13个x字符处修改成/smx7MYTQIi2M,修改后保存此文件,你iphone的ssh密码就重新回到默认的alpine
交叉编译
- 交叉编译指在一个平台上生成另一个平台上的可执行代码。如我们将会在MAC上编写编译可在iPhone上运行的可执行文件。
编译是由编译器完成的,所以我们首先要找到合适的编译器。关于目前Apple公司开源及很多大公司使用和维护的Clang编译器详细资料请看结构化编译器前端 Clang 介绍
编写代码
1
2
3
4
5
6
7
8touch helloworld.c // 新建c文件
open helloworld.c // 打开.c文件,编写测试代码,如下面代码:
#include <stdio.h>
int main(){
printf("Hello world !!!\n");
return 0;
}生成可执行文件
- 生成可在iPhone平台运行的二进制可执行文件
- iOS的指令集参考文章结尾
1
2// 格式:xcrun -sdk iphoneos clang -arch armv7s -o [目标文件名] [源文件名]
xcrun -sdk iphoneos clang -arch armv7s -o helloworld helloworld.c传输可执行文件
通过ssh传输本地文件到iPhone(服务器)
1
2// scp /path/filename username@servername:/path/filename
scp helloworld root@192.168.1.42:/helloworld
关于iOS10.2系统越狱后无法调用
scp
,可参考[Tutorial] How to fix scp on Yalu / Dropbear坑
:使用iPhone5 iOS10.3 还是无法使用scp传输文件,后来发现因为是32位系统,而使用上面解决方法下载的scp
是64位的,手动安装授权32位就可以了,如下先下载scp二进制文件及相关库文件:scp、libcrypto.0.9.8.dylib、libcrypto.dylib
在电脑上用iTools把
scp
文件导入到usr/bin
目录中,把另外两个文件导入到usr/lib
目录中通过手机
MTerminal
,登陆进来root模式进入usr/bin目录,执行下列命令
1
2ldid -S scp
chmod 777 scp进入usr/lib目录
1
2chmod 755 libcrypto.0.9.8.dylib
chmod 755 libcrypto.dylib
将iPhone(服务器)文件传输到本地
1
2// scp username@servername:/source/path/filename /des/path/filename
scp root@192.168.1.42:/iphone/path/helloworld /mac/path/helloworld
查看iPhone文件目录是否存在对应文件
helloworld
,在终端执行可执行文件传完可执行文件后, 此时可执行文件并没有权限, 所以要执行以下命令给权限:
1
chmod a+x helloworld
运行可执行文件
- 如果执行失败,报
Killed: 9
,可能是因为执行文件没有签名,使用ldid -S helloworld
签名即可。
1
./helloworld
- 如果执行失败,报
注意
- 如果越狱成功,一定要安装可以远程访问手机的工具,和手机端可以查看越狱系统文件的工具。(以防手贱把
Cydia
给误删了,需要恢复) - 千万要注意:删除某些安装的工具的时候有可能会把
Cydia
也给一起删除的。 - 如果想重新使用Apple ID签名越狱, 输入Apple ID账号密码后遇到如下错误
1 | provision.cpp:81 |
此时需要删除上一个certificate,操作步骤:
选择菜单栏Xcode -> revokeCertificates
如果revokeCertificates失败,提示如下错误
1
progress hpp:87_assert false
下载旧版本Impactor,如
Impactor_0.9.42
, 使用旧版本软件重新revokeCertificatesrevokeCertificates成功如下
关于生成可执行文件采用的iOS的指令集
armv6
- iPhone、iPhone 3G
- iPod 1G、iPod 2G
armv7
- iPhone 3GS、iPhone 4
- iPod 3G、iPod 4G、iPod 5G
- iPad、iPad 2、iPad 3、iPad Mini
armv7s
- iPhone 5、iPhone 5C
- iPad 4
arm64
- iPhone 5S iPhone 6 iPhone 6Plus 以及之后的
- iPad Air, Retina iPad Mini 以及之后的
参考
- iOS攻防——(一)ssh登陆与交叉编译
- 《iOS 应用逆向与安全》读后感
- 不用换ID,完美解决 Cydia Impactor 错误81
- iPhone6s 10.3.1越狱失败 提示./plist.hpp:201 not PLIST_STRING
- 32位设备iOS 10-10.3.x越狱工具h3lix发布
- 32位设备iOS9.1-9.3.4越狱图文教程
- iPhone10.3.X越狱后SSH连接不上的问题(已解决)
- [Tutorial] How To Access SSH Using Dropbear In iOS 10.3.x To Fix Filza’s Root Permission Using Your Device!
- SSH Over USB
- [Tutorial] How to fix scp on Yalu / Dropbear