十、iOS逆向之《越狱砸壳/ipa脱壳》

砸壳原理

砸壳顾名思义就是对软件进行逆向操作,对已加密的软件进行解密,从而获取真实软件源码。
App Store下载的包全都是经过苹果加密过的包。苹果不允许开发者自己加密ipa包,加密后的ipa包,我们是无法对其进行反编译的。也无法class-dump,需要对其进行解密才能反编译。

砸壳的两种方式
一、静态砸壳

使用已知的解密方法对软件进行解密叫静态砸壳,静态砸壳难度大,需要知道其软件的加密算法才能对其解密。

二、动态砸壳

从进程的内存空间中获取软件镜像(image)进行转存处理叫动态砸壳,动态砸壳无需关心软件的加密技术,只需要从内存中获取即可,这种方法相对简单。
为什么可以通过这种方式进行砸壳呢?
任何软件的加密方式都需要系统内核能读懂,系统内核不认识也就无法运行。系统内核能对其运行,也就对其解密了,解密后镜像会保存在内存中,我们就是通过这种方式对其进行获取的。


iOS动态砸壳系统内核流程

砸壳工具介绍

1、clutch

Clutch是由KJCracks开发的一款开源砸壳工具。工具支持iPhone、iPod Touch、iPad,该工具需要使用iOS8.0以上的越狱手机应用。
Clutch 是一个可执行文件,固不能直接clone代码来使用。我们可以在(release)页面下载最新的可执行文件来使用。

Clutch下载

Clutch是一个在手机执行的软件,我们要将其拷贝到手机(已越狱)。

  • 连接手机
# ssh root@手机IP
$ssh root@192.168.0.1
  • 拷贝文件到手机
# scp 被拷贝文件名 root@机IP:可执行文件地址;
# 手机中的这个目录地址(/usr/bin)的文件,是在任何地方都可以执行的目录文件。
$scp Clutch-2.0.4 root@192.168.0.1:/usr/bin
  • 列出可以砸壳的列表
# 列出可以砸壳的列表(列表中都是正在运行的APP)
$Clutch -i
  • 砸壳
# Clutch –d 应用ID
$ Clutch -d 4
  • 完成后会打印文件保存路径
# com.gotokeep.keep-iOS9.0-(Clutch-2.0.4)-2.ipa 是导出的包名
DONE: /private/var/mobile/Documents/Dumped/com.gotokeep.keep-iOS9.0-(Clutch-2.0.4)-2.ipa
Fnished dumping com.gotokeep.keep in 40.1 seconds
  • 通过ifunbox打开手机上面路径,将包拷贝到电脑
  • 验证是否砸壳成功(检查包内的MachO文件)
# Keep是MachO文件
$ otool -l Keep | grep crypt

2、dumpdecrypted

Github开源工具, dumpdecrypted这个工具就是通过建立一个名为dumpdecrypted.dylib的动态库,插入目标应用实现脱壳。

  • Git Clone
# clone 
$git clone https://github.com/stefanesser/dumpdecrypted.git
  • Make 编译生成动态库
# 在文件的目录下执行make
$make
  • 远程拷贝到手机
#拷贝到手机跟目录下
# scp 拷贝
# dumpdecrypted.dylib 动态库
# root 手机root账号
# 192.168.0.1 手机IP地址
# ~/ 手机根目录
$scp dumpdecrypted.dylib root@192.168.0.1:~/
  • 连接手机
# ssh root@手机IP
$ssh root@192.168.0.1
  • 查看需要砸壳的app列表路径
# 查看需要砸壳的app列表路径
$ps -A
  • 砸壳:通过DYLD_INSERT_LIBRARIES 环境变量插入动态库执行
$DYLD_INSET_LIBRARIES=路径
  • 完成后会生成应用名.decrypted 文件,dumpdecrypted只给我们导出了Mach-O文件,没有同时把资源导出来,也没有打包成ipa,所以它的速度更快一些。
  • 找到在手机跟目录的应用名.decrypted 通过ifunbox拷贝到电脑
  • 验证是否砸壳成功
# Keep是MachO文件
$ otool -l `应用名.decrypted` | grep crypt

3、frida-ios-dump

该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件。

安装Mac端frida

  • 查看python版本,Mac都是自带的
$python -V
Python 2.7.10
  • 查看pip版本,没有则安装
# 安装pip
$sudo easy_install pip
  • 安装frida
# 安装frida
$sudo pip install frida-tools
  • 安装frida出现的问题

问题1:

chian$ sudo pip uninstall prompt-toolkit
The directory '/Users/chian/Library/Caches/pip/http' or its parent directory
is not owned by the current user and the cache has been disabled.
Please check the permissions and owner of that directory. 
If executing pip with sudo, you may want sudo's -H flag.
frida安装问题

解决办法:

$sudo-H pip install frida-tools

问题2:Uninstalling a distutils installed project (six)
解决办法:

$sudo pip install frida –upgrade –ignore-installed six

配置frida-ios-dump环境

  • clone iOS-dump
$sudo git clone https://github.com/AloneMonkey/frida-ios-dump
  • 进入目录安装即可
$sudo pip install -r frida-ios-dump/requirements.txt –upgrade
  • 安装出现的问题:
    问题1:
$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

越狱手机iOS端安装frida

  1. 启动 Cydia
  2. 添加软件源 软件源 Sources -> 编辑 Edit(左上角)-> 添加 Add(右上角)-> 输入 https://build.frida.re/
  3. 根据设备的32位或64位cpu构架安装对应的frida。
  4. 连接手机(连接教程)输入列出可砸壳应用命令检查是否可以使用frida-ps -U
  5. 修改dump.py参数
$vim /opt/dump/frida-ios-dump/dump.py
#用户名
User = 'root'
# 密码
Password = 'alpine'
# 手机IP地址或者映射地址
Host = 'localhost'
# 端口号,端口号在设置USB连接时修改了
Port = 2222
  1. 设置别名
    打开.bash_profile
$vim ~/.bash_profile

在末尾加上一条

# 注意:/opt/dump 是文件目录路径,可以按需更改。
alias dump.py="/opt/dump/frida-ios-dump/dump.py"

使别名生效

source ~/.bash_profile

通过frida砸壳

  1. 打开终端映射端口
# 映射端口
$iproxy 12345 22
  1. 新建终端窗口连接手机
# 127.0.0.1 是IP地址
# -p 表示端口号
$ssh -p 12345 root@127.0.0.1
  1. 砸壳
# 列出可砸到应用列表
$frida-ps -U
# 砸其中的QQ
$dump.py QQ

砸壳成功后会在frida-ios-dump目录下生成砸壳后的ipa包。

  1. 完成砸壳验证是否砸壳成功
# Keep是MachO文件
$ otool -l `应用名.decrypted` | grep crypt

手动砸壳

请跳转查看手动砸壳

推荐阅读更多精彩内容

  • 概述 软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密)。 砸壳原理 应用加壳(加密)提交给...
    没八阿哥的程序阅读 3,628评论 0 2
  • 砸壳 提交给Appstore发布的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也可以管...
    king_jensen阅读 543评论 0 1
  • 很久没有发文章了,最近沉迷逆向无法自拔,开始写点东西做个小总结吧,后续慢慢更新吧,全当记录,共同学习。 方法一、f...
    NBeanN阅读 6,390评论 1 7
  • 我们日常开发提交给Appstore发布的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也...
    妖精的菩萨阅读 7,234评论 1 10
  • —01— 我亦乖亦坏我不胖不瘦可不可以做你的丫头? 周六的教室很冷清,空无一人,空调不加吝啬地吹着风,刚刚立秋的季...
    啤酒鲈鱼阅读 2,481评论 34 57