iOS 逆向开发(二)砸壳/脱壳-Clutch、dumpdecrypted

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,如果cryptid1,则文件是未被砸壳的。如果是0,才是砸壳过的。

砸壳/脱壳

这里推荐两种方式:

  1. Clutch
    • 下载Clutch,
    • 将版本号去掉,进入下载目录在终端执行chmod +x Clutch,然后将Clutch通过爱思助手拷贝到usr/bin文件夹里。如下图:
  • 在Mac上通过ssh 登录手机(推荐usb登录,不知道怎么操作可以查看我的上篇文章)
  • Clutch -i列出iPhone安装的app
  • Clutch -d 序列号 (这里以微信为例)进行砸壳,成功后路径在:/private/var/mobile/Documents/Dumped/
  • 通过爱思助手将砸壳后的ipa文件导出到电脑,修改后缀为zip,解压后得到的的app文件显示包内容,找出为WeChat的文件,即为代码的二进制文件。
  1. 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查看下它是否已经砸壳成功.结果cryptid0,砸壳成功。


遇到的问题:

  • 使用Clutch砸壳某些大厂app的时候,出现错误问题,如喜马拉雅,猜测这个错误的应该是他们根据Clutch设置了防砸包的一些配置导致。解决办法可以换中方式砸包,如dumpdecrypted
Zipping tingTodayEx.appex
Writing new checksum
FAILED: 
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

我们砸壳成功后获取到的 二进制文件,我们就可以分析它的代码了(头文件,伪代码实现等),我们在下篇文章继续说。

你可能感兴趣的:(iOS 逆向开发(二)砸壳/脱壳-Clutch、dumpdecrypted)