手机

iOS逆向应用砸壳 逆向的第一步 开启破坏程式的大门

iOS逆向|应用砸壳 逆向的第一步 开启破坏程式的大门

砸壳

软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密)。

砸壳原理

应用加壳(加密)

提交给Appstore释出的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果稽核过的,也可以管理软件授权。经过App Store加密的应用,我们无法通过Hopper等反编译静态分析,也无法Class-Dump,在逆向分析过程中需要对加密的二进位制档案进行解密才可以进行静态分析,这一过程就是大家熟知的砸壳(脱壳)。

应用砸壳(解密)

iOS应用被加密过后,我们安装到手机上。启动时,系统核心会对这个MachO进行解密,解密完成,将MachO交个DYLD执行。

静态砸壳

静态砸壳就是在已经掌握和了解到了壳应用的加密算法和逻辑后在不执行壳应用程序的前提下将壳应用程序进行解密处理。静态脱壳的方法难度大,而且加密方发现应用被破解后就可能会改用更加高阶和复杂的加密技术。

动态砸壳

动态砸壳就是从执行在程序内存空间中的可执行程式映像(image)入手,来将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。

静态砸壳需要直接对加密进行解密,这是非常难的;而且就算成功,加密方式一旦改变,砸壳工具就失效了,成本非常大。所以市面上还没有静态砸壳成功的,全是动态砸壳。

砸壳工具

明白了砸壳原理,动态砸壳其实就是在内存中,将档案汇出,然后重新写成档案。

我们主要介绍三种工具Clutchdumpdecryptedfrida-ios-dump,这三种工具都是比较常用,好用的。

一、Clutch

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

安装

注意不要直接Git clone,我们需要寻找稳定版本。

1、官网: https://github.com/KJCracks/Clutch

2、找到释出版本

3、下载最新的

使用

下载下来最新的的稳定版本过后,我们来看看如何使用。

1、先看看这个这个档案,file 一下,发现这是一个可执行档案,并且架构都是支援手机的,显然这个需要到手机中去使用的。

2、对映埠,我们通过USB拷贝到手机中去。指令码中是USB埠对映。

3、通过USB连线5s手机。

4、将可执行档案拷贝到手机中去,因为/usr/bin 目录已经配置了环境变数,方便执行,所以这里直接拷贝到这个目录中去。

5、修改下档名称为 Clutch。

6、没有执行许可权。

7、新增执行许可权。

8、$Clutch 执行该执行档案,可以检视相关命令。因为在/usr/bin目录下,可以直接执行。

9、$Clutch -i 打印可dump的程式。

10、$Clutch -d 应用ID 可以dump出Keep。

二、dumpdecrypted

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

安装

1、官网:https://github.com/stefanesser/dumpdecrypted 直接Git Clone。

2、进到目录中,通过 $make 编译生成动态库 dumpdecrypted.dylib 。

使用

1、将 dumpdecrypted.dylib 拷贝到手机中。

2、检视可执行进行插入的App路径 $ps -A。

3、找到其中一个,通过DYLD_INSERT_LIBRARIES 环境变数插入动态库执行,这里举例keep。

4、会生成一个 Keep.decrypted 档案,copy出来。

5、检视一下,他是一个可执行档案,我们是5s手机,所以检视arm64架构,未加密的。

三、frida-ios-dump

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

frida 是需要Mac和iPhone都需要安装的。

①、Mac 安装

1、检视python版本,Mac都是自带的 $python -V

2、检视pip版本 $pip -V。

3、如果没有按照,那么安装pip $sudo easy_install pip,我这里安装了就不演示了。

4、安装frida $sudo pip install frida-tools。

报错出现下面这个错误,目录不归当前使用者所有,请检查该目录的许可权和所有者,需要sudo的-H标志。

$sudo -H pip install frida-tools出现这个错误

$sudo pip install six --upgrade --ignore-installed six5、安装成功

②、iPhone安装

1、新增源 https://build.frida.re

软件源 Sources-> 编辑 Edit(右上角)-> 新增 Add(左上角)-> 输入 https://build.frida.re2、安装Frida

③、Mac配置iOS-dump

1、下载指令码

$sudo git clone https://github.com/AloneMonkey/frida-ios-dump

2、进入目录安装依赖

$sudo pip install -r /opt/dump/frida-ios-dump/requirements.txt –upgrade

有可能报错。

*frida-tools 1.2.2 has requirement prompt-toolkit=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.63、修改指令码档案 dump.py ,将user相关的配置资讯更改成ssh中config中的配置资讯,使之对应。

4、执行指令码 $./dump.py 微信,dump出来微信。

可能报错,缺少一些Python的依赖,需要安装,这里缺少scp。

$pip install scp 安装scp,但是又给我报了没有许可权的错误

$pip install scp --user 那就是按照提示安装,成功了

接下来可能会报别的错误,同样是缺少依赖,同样的方法进行安装。

可是,又报了另一个错误:

然而,非常简单,启动一下微信就行了。此处需要掌声...

总结

一般使用的砸壳方式就这三种了,三种方式一种比一种简单。当然frida-ios-dump安装配置的时候有一些麻烦。

砸壳,去掉了程式的外衣,以后的除错工作就简单多了,学会了这些,恭喜你已经步入逆向的大门了!