脱壳后软件闪退(去掉程序的保护外衣)
脱壳后软件闪退(去掉程序的保护外衣)动态砸壳 静态砸壳就是在已经掌握和了解到了壳应用的加密算法和逻辑后在不运行壳应用程序的前提下将壳应用程序进行解密处理。静态脱壳的方法难度大,而且加密方发现应用被破解后就可能会改用更加高级和复杂的加密技术。应用砸壳(解密)iOS应用被加密过后,我们安装到手机上。启动时,系统内核会对这个MachO进行解密,解密完成,将MachO交个DYLD执行。静态砸壳
砸壳
软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密)。
应用加壳(加密)
提交给Appstore发布的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也可以管理软件授权。经过App Store加密的应用,我们无法通过Hopper等反编译静态分析,也无法Class-Dump,在逆向分析过程中需要对加密的二进制文件进行解密才可以进行静态分析,这一过程就是大家熟知的砸壳(脱壳)。
应用砸壳(解密)
iOS应用被加密过后,我们安装到手机上。启动时,系统内核会对这个MachO进行解密,解密完成,将MachO交个DYLD执行。
静态砸壳
静态砸壳就是在已经掌握和了解到了壳应用的加密算法和逻辑后在不运行壳应用程序的前提下将壳应用程序进行解密处理。静态脱壳的方法难度大,而且加密方发现应用被破解后就可能会改用更加高级和复杂的加密技术。
动态砸壳
动态砸壳就是从运行在进程内存空间中的可执行程序映像(image)入手,来将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。
静态砸壳需要直接对加密进行解密,这是非常难的;而且就算成功,加密方式一旦改变,砸壳工具就失效了,成本非常大。所以市面上还没有静态砸壳成功的,全是动态砸壳。
砸壳工具明白了砸壳原理,动态砸壳其实就是在内存中,将文件导出,然后重新写成文件。
我们主要介绍三种工具Clutch,dumpdecrypted,frida-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 six
5、安装成功
②、iPhone安装
1、添加源 https://build.frida.re
- 软件源 Sources-> 编辑 Edit(右上角)-> 添加 Add(左上角)-> 输入 https://build.frida.re
2、安装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<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
3、修改脚本文件 dump.py ,将user相关的配置信息更改成ssh中config中的配置信息,使之对应。
4、执行脚本 $./dump.py 微信,dump出来微信。
可能报错,缺少一些Python的依赖,需要安装,这里缺少scp。
- $pip install scp 安装scp,但是又给我报了没有权限的错误
- $pip install scp --user 那就是按照提示安装,成功了
接下来可能会报别的错误,同样是缺少依赖,同样的方法进行安装。
可是,又报了另一个错误:
然而,非常简单,启动一下微信就行了。此处需要掌声...
一般使用的砸壳方式就这三种了,三种方式一种比一种简单。当然frida-ios-dump安装配置的时候有一些麻烦。
砸壳,去掉了程序的外衣,以后的调试工作就简单多了,学会了这些,恭喜你已经步入逆向的大门了!