十、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

手动砸壳

请跳转查看手动砸壳

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

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