一、砸壳
正版应用的MachO的cryptid 为 1,越狱应用的MachO的cryptid 为 0软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密)。
只有砸过壳的才能反汇编分析、才能class-dump、才能重签名
1、砸壳原理
1.1、应用加壳(加密)
提交给Appstore发布的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也可以管理软件授权。经过App Store加密的应用,我们无法通过Hopper等反编译静态分析,也无法Class-Dump,在逆向分析过程中需要对加密的二进制文件进行解密才可以进行静态分析,这一过程就是大家熟知的砸壳(脱壳)
1.2、应用砸壳(解密)
- 静态砸壳:静态砸壳就是在已经掌握和了解到了壳应用的加密算法和逻辑后在不运行壳应用程序的前提下将壳应用程序进行解密处理。静态脱壳的方法难度大,而且加密方发现应用被破解后就可能会改用更加高级和复杂的加密技术。
- 动态砸壳:动态砸壳就是从运行在进程内存空间中的可执行程序映像(image)入手,来将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。
2、iOS应用运行原理
二、工具一:Clutch
Clutch是由KJCracks开发的一款开源砸壳工具。工具支持iPhone、iPod Touch、iPad,该工具需要使用iOS8.0以上的越狱手机应用,iOS11以上好像也没法用了。
1、安装
- 官网:https://github.com/KJCracks/Clutch
-
找到发布版本
-
下载最新的
2、使用
映射端口
python tcprelay.py -t 22:12345
-
拷贝工具到手机
scp -P 12345 Clutch-2.0.4 root@localhost:/usr/bin
拷贝到/usr/bin
,是为了在任何地方都可以用Clutch-2.0.4
,如果不放在这个文件夹下,则需要到放Clutch-2.0.4
的文件夹下./
执行Clutch-2.0.4
mv Clutch-2.0.4 Clutch
移动一下,重命名
mv 文件名1 文件名2
把文件名1重命名为文件名2,mv
移动的意思
mv 文件1 位置1
把文件1移动到位置1
Clutch
在~
目录下tab不出来,那是Clutch
没有权限,添加个权限即可
- 列出可以砸壳的应用列表
$Clutch -i
- 砸壳
$Clutch –d 应用ID(或编号)
eg:Clutch -d com.tencent.edu
或$Clutch –d 4
- 拷贝到电脑上
scp -P 12345 root@localhost:/private/var/mobile/Documents/Dumped/ketang.ipa ~/Desktop/
拷贝到桌面
可以用Xcode安装.ipa了,
三、插入动态库
是插入,不是注入哦
选择项目
TestDyz
Build一下会把所有的Framework都Build出来;选择对应的
Framework
Build一下会把对应的Framework Build出来;TestDyz
Framework
test1.framework
拷贝到桌面拷贝到手机
scp -P 12345 -r ~/Desktop/test1.framework root@localhost:~/
查看运行的machO
ps -A
插入,是插入不是注入
DYLD_INSERT_LIBRARIES=动态库的路径 运行的machO的路径
eg:
DYLD_INSERT_LIBRARIES=test1.framework/test1 /var/mobile/Containers/Bundle/Application/98E64AC3-BB0C-4E0B-AB5A-55182669FE87/AlipayWallet.app/AlipayWallet
这个
test1.framework/test1
动态库依附在/var/mobile/Containers/Bundle/Application/98E64AC3-BB0C-4E0B-AB5A-55182669FE87/AlipayWallet.app/AlipayWallet
这个MachO上运行
四、工具二:dumpdecrypted
Github开源工具。 dumpdecrypted这个工具就是通过建立一个名为dumpdecrypted.dylib的动态库,插入目标应用实现脱壳。
1、安装
官网 :https://github.com/stefanesser/dumpdecrypted 直接Git Clone
dumpdecrypted
砸出来的是可执行文件MachO-
通过Make 编译生成动态库
-
远程拷贝到手机
scp -P 12345 dumpdecrypted.dylib root@localhost:~/
通过
DYLD_INSERT_LIBRARIES
环境变量插入动态库执行-
查看运行的machO
ps -A
、ps -A | grep Ali
(添加了筛选)
插入
DYLD_INSERT_LIBRARIES=动态库的路径 运行的machO的路径
eg:DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/DF6975A8-3987-4B3C-8617-268C90EA378D/AlipayWallet.app/AlipayWallet
然后ls,多出来一个
AlipayWallet.decrypted
,这个是砸过壳之后的MachO-
拷贝到电脑
五、工具三:frida-iOS-dump
该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件。
1、安装frida
1.1、Mac安装方式:
查看python版本,Mac都是自带的。
python -V
、python3 -V
、V
大写-
查看pip版本。
pip -V
V
大写
安装pip。
$sudo easy_install pip
安装frida。
$sudo pip install frida-tools
-
frida-ps
查看电脑的进程 -
frida-ps -U
查看USB链接端的进程,此时电脑可以不用登录(SSH USB登录)手机,但是手机的Cydia必须要安装Frida插件
1.2、iOS安装方式:
1、添加源 http://build.frida.re
2、安装Frida
1.3、Mac配置ios-dump
下载脚本
git clone 网址;下载到当前文件夹
$sudo git clone https://github.com/AloneMonkey/frida-ios-dump
进入下载好的frida-ios-dump
目录安装依赖
$sudo pip install -r requirements.txt --upgrade
如果报没有权限就加一个--user
$sudo pip install -r requirements.txt --upgrade --user
1.4、执行
- 先要端口映射一下
usbConnect.sh
-
./dump.py Display name or Bundle identifier
eg:./dump.py 支付宝
- 会在当前文件夹下生成一个砸过壳
.ipa
包 - 自己配置脚本之后就是:
dumpIPA.sh 微信