1.越狱概述
1.1
通过iOS系统安全启动链漏洞,从而禁止掉信任链中负责验证的组件。拿到iOS系统最大权限ROOT权限.
1.2
当启动一台iOS设备时,系统首先会从只读的ROM中读取初始化指令,也就是系统的引导程序(事实上所有的操作系统启动时都要经过这一步,只是过程略有不同)。这个引导ROM包含苹果官方权威认证的公钥,他会验证底层启动加载器(LLB)的签名,一旦通过验证后就启动系统。LLB会所一些基础工作,然后验证第二级引导程序iBoot。iBoot启动后,设备就可以进入恢复模式或启动内核。在iBoot验证完内核签名的合法性之后,整个启动程序开始步入正轨:加载驱动程序、检测设备、启动系统守护进程。这个信任链会确保所有的系统组件都有苹果官方写入、签名、分发,不能来自第三方机构,
越狱的工作原理正是攻击这一信任链。所有的越狱工具的作者都需要找到这一信任链上的漏洞,从而禁止掉信任链中负责验证的组件。拿到iOS系统最大权限ROOT权限.
1.3 完美越狱和非完美越狱
根据越狱的情况不同可以分为如下两种越狱:
完美越狱
所谓完美越狱就是破解iOS系统漏洞之后,每次系统重启都能自动调用注入的恶意代码,达到破坏安全验证,再次获得ROOT权限。
非完美越狱
所谓非完美越狱是指,越狱系统后,并没有完全破解安全链,有部分信息或功能应用不佳;比如;关机以后必须去连接越狱软件来引导开机;或者重启会导致越狱的失效;这样的越狱称为“不完美越狱”。
1.4 安装插件
2. 连接手机
2.1
通过OpenSSH插件可以连接手机,进行远程控制, 或者传送文件。
2.2 OpenSSH 插件
连接手机
通过插件使用Wifi连接手机:ssh 用户名@手机IP地址
$ssh root@192.168.31.231
默认密码:alpine
iOS 下两个用户:Root、mobile
Root用户:最高权限用户,可以访问任意文件
Mobile用户:普通用户,只能访问改用户目录下文件/var/Mobile
首次连接会显示
2.3 修改用户密码
修改账户登录密
ROOT用户可以修改所有用户的密码
$passwd 命令修改密码
$passwd 用户名
输入两次新密码,确认修改,因为是登录状态所以不用输入原始密码。
3.OpenSSH
3.1
OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。 SSH协议可以用来进行远程控制, 或在计算机之间传送文件。
3.2 SSH
SSH是一种网络协议,用于计算机之间的加密登录。
1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置
3.3OpenSSH
它是一款软件,应用非常广泛。
3.4 SSH登录过程
3.5 中间人攻击(Man-in-the-middle attack)
存在一种隐患.如果有人冒充服务器.将生成的虚假公钥 发给客户端.那么它将获得 客户端连接服务器的 密码
3.6 SSH其他操作
删掉保存的服务器地址的key
ssh-keygen –R 服务器IP地址(当SSH登录手机,手机就是服务器)
know_hosts文件:用于保存SSH登录服务器所接受的key
在系统~/.ssh 目录中保存
ssh_host_rsa_key.pub文件:作为SSH服务器发送给连接者的key
在系统/etc/ssh 目录中保存
Config文件
在~/.ssh 目录下创建一个config文件。内部可以配置ssh登录的别名。
Host 别名
Hostname IP地址
User 用户名
Port 端口号
3.7 免密码登录
免密码登录
免密码登录也称“公钥登录”,原理就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录 不再要求密码。
客户端在~/.ssh/目录下生成公钥 $ ssh-keygen
拷贝公钥给SSH服务器 $ssh-copy-id 用户名@服务器IP
下面是我们的验证和详细的说明:
我们用ssh-keygen生成密钥的指令,Enter file in which to save the key (/Users/admin/.ssh/id_rsa):这个是我们生成密钥默认路径,如果我们不选择系统默认的路径的话,我们自定义的路径跟在后面,并且后面跟上生成密钥的文件名,如下是我在桌面生成isa文件,然后我们就可以在桌面看到自己生成的公钥和私钥文件,
然后我们cd到系统默认存放密钥的路径下,把刚才生成的isa文件copy进去,
然后我们查看公钥
然后我们把公钥copy到手机上,
然后直接用ssh登录手机的时候就会发现此时不需要输入密码就会直接登录上去了,然后我们在手机的用户目录下查看刚才copy进来的公钥,跟刚才电脑端查看的公钥内容一致
然后我们rm公钥,电脑端也在ssh文件中删除公钥,
重新生成密钥的时候输入密码,然后copy到手机中 ,然后我登录手机时候就会发现输入公钥密码,这就是生成无密码的公钥和有密码公钥的区别。
3.8 区别名登录
在ssh文件的目录下,ls可以看到一个config文件,没有的话vim一个,里面的配置,范文:见上面ssh其他操作中的config文件,实例如下图所示,然后登录的时候直接用别名就可以登录了,如ssh 5s.
3.9 USB 连接
Python脚本端口映射:
python tcprelay.py -t 22:12345
将本地的12345端口映射到设备的TCP端口22.这样就可以通过本地的12345端口建立连接了。
通过USB进行SSH连接
ssh -p 12345 root@127.0.0.1
ssh连接本地的12345,由于做了端口映射,所以会通过usb连接对面设备的22端口。
Iproxy端口映射
安装libimobiledevice工具
$ brew install libimobiledevice
映射端口
iproxy 12345 22
如下所示,当我们用22端口登录的时候,就连接上了,当我们用224登录的时候就,接连不上了,由上可见,22是usb连接的默认端口。
usb使用的是brew自带的一个usbmuxd服务,如下图所示
这个文件在系统/资源库/privateframework/目录下,如下图所示:
我们在github中准备一个如下图所示的文件,
利用python执行一下这个文件,就可以进行端口映射了,
然后我们利用usb,12345端口的映射登录一下,然后当我们拔出数据线后就发现,ssh登录断开了 ,如下图所示
3.10 USB的shell登录
我们为了方便保存脚本文件和方便登录,我们把python脚本文件放在LMShell文件下,然后我们新建2个脚本,如下,然后我们直接sh 2个脚本就可以登录了
3.10 中间人攻击
当我们2个越狱手机都用localhost登录的时候,当切换手机的时候就会出现如下所示的警告,这是中间人攻击的警告,原因是远程客户端登录第一个手机的时候把公钥保存到了本地,当切换手机的时候,locahost域名没有发生变化,但是身为服务器的手机返回来的公钥不一样了,就会出现如下所示的中间人攻击的提示。
ls查看该目录,其中know_host中保存的远程传过来的公钥,
cat know_host如下所示,中间人攻击就是如下文件中保存的公钥发生了冲突导致的。当我们把最后一个公钥删除后,再次进行登录后,就会提示我们保存公钥。
那么如何解决不同手机登录,造成的中间人攻击的问题呢?我们在脚本中或者登录时候,保证不同手机不同时使用localhost域名,也就是一个使用192.x.x.x,另一个使用localhost,或者2个都是用自己手机的地址,从而使域名不同,保存的公钥不同,就不同造成中间人攻击的冲突了。如下图所示:
3.11 远程拷贝
使用wifi远程拷贝 scp + 文件名 + root域名+copy目录
如果是通过usb端口copy的话,如上所示在文件名前加端口
scp -p 12345 + 文件名 + root域名+copy目录
如果是把手机中的文件拷贝到电脑端,如下图所示,把root后面,左边是手机端文件的目录地址,右边是copy到电脑端的路径。
usb连接除了上述所说还有一个工具也可以进行接口的映射,如下所示和使用:
3.12 app瘦身
如下在iphone中安装的越狱app中,我们的keep,app中的二进制是多架构的二进制文件,我们对安装的app进行瘦身后重新,压缩放回ipa包中,进行手机上的安装后发现所占内存比之前更小了。
4. 砸壳
4.1 砸壳概述
软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密)。
4.2 砸壳原理
应用加壳(加密)
提交给Appstore发布的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也可以管理软件授权。经过App Store加密的应用,我们无法通过Hopper等反编译静态分析,也无法Class-Dump,在逆向分析过程中需要对加密的二进制文件进行解密才可以进行静态分析,这一过程就是大家熟知的砸壳(脱壳)
应用砸壳(解密)
静态砸壳
静态砸壳就是在已经掌握和了解到了壳应用的加密算法和逻辑后在不运行壳应用程序的前提下将壳应用程序进行解密处理。静态脱壳的方法难度大,而且加密方发现应用被破解后就可能会改用更加高级和复杂的加密技术
动态砸壳
动态砸壳就是从运行在进程内存空间中的可执行程序映像(image)入手,来将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。
4.3 iOS应用运行原理
4.4 Clutch
4.4.1 Clutch概述
Clutch是由KJCracks开发的一款开源砸壳工具。工具支持iPhone、iPod Touch、iPad,该工具需要使用iOS8.0以上的越狱手机应用。
4.4.2 Clutch使用
安装
官网: https://github.com/KJCracks/Clutch
找到发布版本
下载最新的
使用
映射端口拷贝工具到手机列出可以砸壳的应用列表 $Clutch -i
砸壳 $Clutch –d 应用ID
copy到手机前后,手机文件目录比较,修改文件名称:mv + 原来的文件名 + 新的文件名, 查找文件的所在的目录,
which + 文件名
Clutch -i
砸壳 $Clutch –d 应用ID
4.5 dumpdecrypted
4.5.1 dumpdecrypted概述
Github开源工具。 dumpdecrypted这个工具就是通过建立一个名为dumpdecrypted.dylib的动态库,插入目标应用实现脱壳
4.5.2 dumpdecrypted安装和使用
安装
官网 :https://github.com/stefanesser/dumpdecrypted 直接Git Clone
通过Make 编译生成动态库
远程拷贝到手机,下面进行的是usbcopy的,先进行端口映射连接
通过DYLD_INSERT_LIBRARIES 环境变量插入动态库执行
生成的decrypted从手机中拷贝到电脑桌面
查看是否砸壳成功
4.6 frida-ios-dump
4.6.1 frida-ios-dump概述
该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件。
4.6.2 安装frida
Mac安装方式:
查看python版本,Mac都是自带的。
查看pip版本
安装pip $sudo easy_install pip
安装frida $sudo pip install frida-tools
目录不归当前用户所有。请检查该目录的权限和所有者.需要sudo的-H标志。
sudo -H 。set-home 将 HOME 变量设为目标用户的主目录
$sudo -H pip install frida-tools
* Uninstalling a distutils installed project (six) $sudo pip install frida –upgrade –ignore-installed six
iOS安装方式:
1、添加源 https://build.frida.re
2、安装Frida
Mac配置ios-dump
下载脚本
$sudo git clone https://github.com/AloneMonkey/frida-ios-dump
进入目录安装依赖
$sudo pip install -r /opt/dump/frida-ios-dump/requirements.txt –upgrade
有可能报错。
*frida-tools 1.2.2 has requirement prompt-toolkit<2.0.0,>=0.57, but you’ll have prompt-toolkit 2.0.7 which is incompatible.
降低 prompt-toolkit 版本
卸载
$sudo pip uninstall prompt-toolkit
安装指定版本
$sudo pip install prompt-toolkit==1.0.6
安装成功
安装成功后可以查看电脑端的进程也可以通过usb查看手机端的进程
然后连接手机端的usb映射
在下载的frida-ios-dump文件中,打开dump.py文件,看看里面的User password host port,是否有符合设置。
如果没问题,直接在目录下执行./dump.py 应用名称or手机中应用的进程id,会直接 在此目录下生成砸壳的ipa包,
如果ipa包中的framework未完全砸壳,可能是因为你当前砸壳的应用没有运行,因为frida砸壳的原理是从内存中进行砸壳,如果没有运行的话,就有些东西没有运行在内存中,就会造成砸壳不完全。下图支付宝不完全,微信完全,因为我们砸壳的时候,微信刚好在运行中。
如果想在其他目录下也能方便的调用dump.py.我们需要配置环境变量,如下图我们已经把HKShell文件夹配置成环境变量,所以我们放在HKShell下的文件都可以全局调用,所以如果我们想快捷调用的话,我们也可以自己生成张三Shell,李四Shell,然后设置成环境变量就可以了,
我们在HKShell中放入frida-iOS-dump文件,然后自己配置一个dumpIPA.sh 文件里面,设置成可以执行frida-iOS-dump文件夹中的dump.py路径的文件,后面跟上一个变量,以便后面我们能方便的 传入应用的名称
这样我们即使在桌面的目录下也可以执行dump.py脚本砸壳应用程序
4.7 越狱环境使用cycript
当使用usbLogin登录手机之后,输入中文发现,无法显示,此时由于转译字符引起的,我们需要倒入一个文件,如下
此时再次退出手机登录,再次登录后就发现可以输入中文的字符了。
usblogin之所以也能输入vim clear等命令是由于在手机的cydia中安装了adv-cmds Vi IMproved两个工具,我们知道ps -A可以查看手机端的进程,ps -A | grep Ali 或 进程ID 可以查看该应用的进程调用情况,cycript//附加进程,同样也可以附加到系统的进程中,
cypriot -p Alipay //附加到哪一个进程
附加进程后,可以UIApp查看该APP的Application,
UIWindow.keyWindow()
#地址.roootView #地址.view
4.8 越狱环境 中使用自己的CY文件
要把自己的的cy文件copy到这个路径下/usr/lib/cycript
才可以在项目中@import引用,如下图hank.cy直接放在家目录下,是无法导入项目中引用的,
在这个路径下的com文件夹下新建一个自己的文件夹下放入自己的cy文件,
这样导入项目导入的路径也发生了变化com.logic.hank,如下图所示,
4.9 theos 配置
theos可以到github官方搜索查看theos官网安装和下载,我简单看一下官网中到样子,–recurs是循环遍历安装theos /opt/theos是选择的目录了、
ldid 是一个签名工具
我们下载后安装在该目录下
我们配置一下啊环境变量
这样方便我们在外部文件夹也可以调用,theos中我们主要使用的是nic.pl这个文件,如下图
4.10 支付宝动态分析和theos窃密
首先做好端口映射,手机usblogin登录,cycript附加支付宝的进程,导入自己py文件,并查看当前的控制器和列出当前列出的所有的View的层级关系,如下图:
在python查看“登录”的unicode编码
登录按钮的响应事件,在列出的view的层级关系中,find 刚才登录的unicode编码,发现有两个地方有,其中一个是登录,另一个是xxx登录,明显是页面中换一种方式登录,如下图可以看到text的上层button
如下图可以查看button的target和响应事件,可以找到button的响应方法onNext方法,可以看到调用的视图是ALUAccuratePWDView
然后frida砸壳手机中运行的支付宝程序,
用subline打开dump下来的heard文件,查看ALUAccuratePWDView,里面又一个属性loginbox,可以推测跟登录有关系
查看loginbox
发现里面的passwordInputbox应该跟密码有关系,所以动态调试查看一下,发现是我们输入的yytt测试密码,
所以支付宝中密码所在的位置如下图中
我们输入theos中的nic.pl选择对用的13
输入tweek中项目所需
zsh配置
在全局的zsh已经配置了 在这里可以不用配置了
如下图我们在tweek中写好hook代码编译,打包生成deb
如下图也可以打包和安装命令一起执行
如下图我们打开可以查看真机运行的日志,可以看到我们的测试代码,啤酒的打印
下面是我们hook密码所写的logos语法
然后我们编译,打包,安装如下图,
就会出现如下所示的效果,hook密码成功
下面是项目的介绍和版本详情
需要注意的是
1.如果你安装多个版本的xcode,打包的时候有可能会报错,所以我们需要制定一个xcode的路径,如下图
2.如果nic.pl生成的项目所在的目录或者包含的目录中含有中文目录,那么也会编译报错