逆向工程iOS 逆向

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

2019-01-21  本文已影响35人  Hanfank

砸壳原理

砸壳顾名思义就是对软件进行逆向操作,对已加密的软件进行解密,从而获取真实软件源码。
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
# Keep是MachO文件
$ otool -l Keep | grep crypt

2、dumpdecrypted

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

# clone 
$git clone https://github.com/stefanesser/dumpdecrypted.git
# 在文件的目录下执行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列表路径
$ps -A
$DYLD_INSET_LIBRARIES=路径
# Keep是MachO文件
$ otool -l `应用名.decrypted` | grep crypt

3、frida-ios-dump

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

安装Mac端frida

$python -V
Python 2.7.10
# 安装pip
$sudo easy_install pip
# 安装frida
$sudo pip install frida-tools

问题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环境

$sudo git clone https://github.com/AloneMonkey/frida-ios-dump
$sudo pip install -r 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

越狱手机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

手动砸壳

请跳转查看手动砸壳

上一篇下一篇

猜你喜欢

热点阅读