iOS 逆向工程(十三)之加壳与脱壳

Posted 仲长可倾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 逆向工程(十三)之加壳与脱壳相关的知识,希望对你有一定的参考价值。

加壳:利用特殊算法,对可执行文件的编码进行改变(压缩、加密),达到保护程序代码的目的

脱壳:去掉壳程序,将未加密的可执行文件还原出来,或者称砸壳

脱壳方式:硬脱壳、动态脱壳

脱壳工具:Clutch(弃用)、dumpdecrypted(弃用)、frida、crakerx、flexdecrypt、bagbak

手机安装App的ipa文件位置:/var/containers/Bundle/Application/

判断是否加密: otool -l  Mach-O文件名 | grep crypt

flexdecrypt安装:

下载地址:https://github.com/JohnCoates/flexdecrypt/releases/download/1.1/flexdecrypt.deb

 

安装方式一:

1.下载flexdecrypt.deb文件;

2.将flexdecrypt.deb 拷贝到手机的 /var/root/Media/Cydia/AutoInstall目录;

3.在手机上通过Filza资源管理工具定位到 /var/root/Media/Cydia/AutoInstall ,点击安装;

4.远程登录iPhone5s,输入 killall SpringBoard (重启手机桌面)回车;

5.登录手机终端条件下,输入 flexdecrypt 回车;

 

安装方式二:

1.登录手机终端后,直接输入 wget https://github.com/JohnCoates/flexdecrypt/releases/download/1.1/flexdecrypt.deb

2.输入安装指令 dpkg -i flexdecrypt.deb 回车;

 

脱壳/砸壳操作:

1.登录iPhone5s后,输入 ps -A 回车,寻找要脱壳的的软件;

2.输入指令 flexdecrypt /var/containers/Bundle/Application/1EB14B56-6B19-442F-8289-A7A5D8290E5E/MobileMail.app/MobileMail 回车;

3.将 /tmp/MobileMail 路径下的 MobileMail 拷贝到Mac 工作文件夹, 用Hopper Disassembler 查看脱壳后的Mach-O文件

a.在Mac终端输入 scp -P 10010 root@localhost:"/tmp/MobileMail" ~/Desktop/jail_work 回车

b.Hopper Disassembler 查看Mach-O文件

 

Tips:不是所有的App都能使用flexdecrypt脱壳:WeChat、Aweme、唱吧脱壳失败,后续查找原因

 

另一种脱壳方式:frida-ios-dump

涉及设备:MacBook、iPhone5s(越狱,A7处理器,ARM64)

下载地址:https://github.com/AloneMonkey/frida-ios-dump

安装步骤:

iPhone端准备:

1.打开Cydia 【软件源】-->【编辑】-->【添加】,输入 https://build.frida.re 完成;

2.在软件源下,点击 【bulid.frida.re 】-->【全部软件包(或者开发)】选择 【Frida for pre-A12 devices】(根据手机CPU型号选择,5s是A7小于A12) 安装;

3.安装完成后,在Mac终端登录iPhone端,输入 killall SpringBoard (重启手机桌面)回车

 

注意:不需要在手机终端输入frida-ps -U ,会报 -sh: frida-ps: command not found 错误,frida-ps -U 检查安装成功指令是在Mac终端使用的

 

Mac端准备:

1.在终端输入 sudo pip install frida 回车,安装完成后输入 frida-ps -U 回车检测;

 

2.下载 frida-ios-dump 到 /opt/dump/ 文件夹下,输入 sudo mkdir /opt/dump && cd /opt/dump && sudo git clone https://github.com/AloneMonkey/frida-ios-dump 回车;

 

3.添加firda-ios-dump 的依赖,输入 sudo pip install -r /opt/dump/frida-ios-dump/requirements.txt --upgrade 回车;

 

4.修改 dump.py 的iPhone端关于USB端口号(22)映射到Mac端的端口(10010)和登录用户名及密码,输入 vim /opt/dump/frida-ios-dump/dump.py 回车;

 

5.设置指令别名;

a.在终端输入 vim ~/.bash_profile 回车;

b.在 alias python 下面添加 alias dump.py="/opt/dump/frida-ios-dump/dump.py”,按 “:”键后 输入 wq 回车;

c.生效配置文件,输入 source ~/.bash_profile 回车

 

注意:在设置指令别名的时候,由于我的bash_profile 文件是指向python3版本,所以在使用dump.py 指令的时候会报 ModuleNotFoundError: No module named \'frida\' 错,python3 版本下 dump.py 依赖frida出了点问题(默认安装的是python2 版本的frida), 解决思路有两种:a.重新配置bash_profile 文件的Python 执行版本路径,b.使用python2 来执行dump.py

报错:

 

脱壳/砸壳操作:

1.在Mac终端输入 cd /opt/dump/frida-ios-dump/ 回车;

2.打开iPhone上需要脱壳的程序;

3.在终端输入 python2 dump.py 【App Name】回车

 

Hopper Disassembler 查看Mach-O文件:

 

注意:由于 frida-ios-dump 文件夹是readonly 属性,在脱壳后会报 zip I/O error: Permission denied 错误

 

Permission denied解决方式:

1.将 /opt/dump/frida-ios-dump/ 下文件 dump.py 的内容拷贝一份出来,新建一个dump.py文件并粘贴拷贝的内容;

 

2.新建一个保存路径放在43行后,内容为 SAVE_PATH = os.path.join(os.path.expanduser("~"), \'Desktop\') 将存储路径指向桌面;

 

3.修改生成ipa文件的路径为SAVE_PATH;

 

4.将新建的dump.py文件替换 /opt/dump/frida-ios-dump/ 下的dump.py文件

 

以上是关于iOS 逆向工程(十三)之加壳与脱壳的主要内容,如果未能解决你的问题,请参考以下文章

IOS逆向学习-加壳脱壳

逆向工程之App脱壳

Android 逆向APK 加壳脱壳现状 | 判断 APK 是否加壳 | APK 逆向流程

Android 逆向脱壳解决方案 ( DEX 整体加壳 | 函数抽取加壳 | VMP 加壳 | Dex2C 加壳 | Android 应用加固防护级别 )

逆向基础:软件手动脱壳技术入门

iOS-逆向22-砸壳