iOS逆向砸壳

苹果商店下载的安装包是加壳的,故需要脱壳后才可操作

以下方案只能砸可执行文件,如果包含动态库,需要一个一个砸,比较麻烦。目前我了解的最佳实践是frida-ios-dump方式砸壳,可以直接获取到ipa文件,后续流程维护进来。

如何获取商店的安装包

准备工作

  1. 下载dumpdecrypted
  2. 越狱设备
  3. 越狱设备安装插件Apple File Conduit “2”
  4. Mac电脑安装iFunBox

生成砸壳工具动态库

  1. 将下载的dumpdecrypted-master.zip解压
  2. 终端进入解压后的根目录
  3. 执行make命令

得到一个名为dumpdecrypted.dylib的动态库

将生成的动态库注入至需要砸壳APP的沙盒目录

SSH进入越狱设备

1
ssh root@ip

如果觉得WIFI慢,可以使用usbmux进行转发

Cycript操作目标APP

  1. 获取目标APP名称
    1
    ps -ef

    通过进程列表可以拿到App可执行文件名称以及App可执行文件绝对路径

  2. 进入cycript操作APP的交互环境
    1
    cycript -p App可执行文件名称

通过cycript语言获取沙盒目录

1
[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]

如果导入过mjcript,可以使用如下命令

1
2
@import mjcript
MJDocPath

将动态库拷贝至沙盒目录下

  1. 使用iFunBox进入设备的沙盒目录(Documents目录下)
  2. 拖拽进去即可

执行砸壳命令

先进入沙盒目录下

1
cd Documents目录
1
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib App可执行文件绝对路径

eg:

1
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/D99C9215-D954-4067-BFD8-0F542C086F54/BitAutoPlusStore.app/BitAutoPlusStore

问题
如果出现以下错误:

1
could not load inserted library 'dumpdecrypted.dylib' into hardened process because no suitable image found

在Mac环境下将dumpdecrypted.dylib进行签名

  1. 获取所有证书,从中选一个
    1
    security find-identity -v -p codesigning
  2. 签名
    1
    codesign --force --verify --verbose --sign "Apple Development: Cheng Ren (A699T56LQP)" dumpdecrypted.dylib
  3. 将新的dumpdecrypted.dylib文件拖入至沙盒