iOS逆向系列:
1、iOS 逆向开发(一)界面分析 - Cycript&Reveal
2、iOS 逆向开发(二)砸壳/脱壳-Clutch、dumpdecrypted
3、iOS 逆向开发(三)代码分析-dump-class/Hopper Disassmbler
appStore下载的ipa文件是经过加密(加壳)的,我们只有先通过破解才能对app的二进制文件进行操作,这个过程称为:砸壳/脱壳。
查看二进制文件是否已砸壳
- 我们先将从appStore下载的app二进制文件导出到电脑,在手机
var/mobile/Containers/Bundle/Application
路径里找。 - 终端执行
otool -l 二进制文件名 | grep cryptid
,如果cryptid
为1
,则文件是未被砸壳的。如果是0
,才是砸壳过的。
砸壳/脱壳
这里推荐两种方式:
- 在Mac上通过ssh 登录手机(推荐usb登录,不知道怎么操作可以查看我的上篇文章)
-
Clutch -i
列出iPhone安装的app -
Clutch -d 序列号
(这里以微信为例)进行砸壳,成功后路径在:/private/var/mobile/Documents/Dumped/
- 通过爱思助手将砸壳后的ipa文件导出到电脑,修改后缀为
zip
,解压后得到的的app文件显示包内容,找出为WeChat
的文件,即为代码的二进制文件。
-
dumpdecrypted
下载dumpdecrypted,然后在下载的目录里执行
make
指令,获取dylib
文件.-
将
dylib
文件拷贝到iPhone的/var/root
目录里
在Mac上通过ssh 登录手机,ps -A 找到要砸壳的app安装位置
进入
var/root
目录,DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib app文件路径
-
成功后会在
/var/root
得到.decrypted
文件,这个就是脱壳后的可执行文件,将后缀去掉,导出电脑即可。
通过上述两种砸壳方式的到的二进制文件,我们再来通过otool -l WeChat | grep cryptid
查看下它是否已经砸壳成功.结果cryptid
为0
,砸壳成功。
遇到的问题:
- 使用
Clutch
砸壳某些大厂app的时候,出现错误问题,如喜马拉雅
,猜测这个错误的应该是他们根据Clutch
设置了防砸包的一些配置导致。解决办法可以换中方式砸包,如dumpdecrypted
Zipping tingTodayEx.appex
Writing new checksum
FAILED: <ting bundleID: com.gemd.iting>
Finished dumping com.gemd.iting in 41.9 seconds
- 刚开始使用
dumpdecrypted
砸包的时候,出现以下错误,错误原因:因为我的iPhone是iOS9的系统,Xcode是11,make
命令是在xcode.11版本生成的dylib
文件,所以系统不匹配报错。解决办法:下载我在Xcode10环境下生成的dylib文件 提取码: b8tg 重新导入var/root
文件夹里
dyld: Symbol not found: ___chkstk_darwin
Referenced from: dumpdecrypted.dylib
Expected in: /usr/lib/libSystem.B.dylib
in dumpdecrypted.dylib
我们砸壳成功后获取到的 二进制文件,我们就可以分析它的代码了(头文件,伪代码实现等),我们在下篇文章继续说。