iOS 逆向: dumpdecrypted 砸壳记

今天是一个特别的日子, 高考的第一天, 祝各位莘莘学子金榜题名.


iOS 逆向: 砸壳 介绍了如何使用工具 Clutch 对 iOS 的应用进行砸壳操作, 今天继续给大家分享使用另外一个工具 dumpdecrypted 对 APP 进行砸壳.

概要

有些朋友就会问了, 既然 Clutch 已经很牛B了, 为什么还需要 dumpdecrypted 这个工具呢?

刚开始的时候, 我也很排斥使用 dumpdecrypted 这个工具的, 使用起来比较复杂, 并且套路不熟的情况下还很容易出错.

之前说过 Clutch 并不是万能的, 从 App Store 下载的 App(比如 WeChat)有些并不能使用 Clutch 来进行砸壳, 换句话说, 使用 Clutch 工具来进行砸壳会失败, 那么, dumpdecrypted 就登场了.

本次砸壳的系统依然是 iOS10.3.x, 工具使用 dumpdecrypted, 砸壳的对象是 WeChat 这个 App.

准备工作

  • MacOS PC
  • 越狱手机一台(我用的是iPhone6SPlus 10.3.1)
  • dumpdecrypted
  • class-dump
  • 在 Cydia 中安装 cycript, 可以先不用管 cycript 是什么, 下载安装即可.
  • iFunBox 或者其他助手工具

编译 dumpdecrypted

Github 下载 dumpdecrypted 源码, 源码就一个 C 源文件.

下载 zip 包之后, 解压, 如图:

在当前目录, 执行 make 即可完成编译, 如图所示:

编译成功后生成 dumpdecrypted.dylib 文件.

这里有个小插曲, 编译 dumpdecrypted 的时候报错了, 错误信息如下:

1
2
3
4
xcrun: error: SDK "iphoneos" cannot be located
xcrun: error: unable to lookup item 'Path' in SDK 'iphoneos'
clang: warning: no such sysroot directory: '-F/System/Library/Frameworks' [-Wmissing-sysroot]
dumpdecrypted.c:27:10: fatal error: 'stdio.h' file not found

无法找到对应的 SDKstdio.h 文件, 这种问题大多数是 Xcode 路径造成的.

使用下面的命令看一下系统指向的 Xcode 路径:

1
xcode-select -p

控制台输出:

1
/Library/Developer/CommandLineTools

显然不是 Xcode 的路径, 那只能重新切换一下其路径即指向正确的Xcode 路径即可.

命令如下:

1
sudo xcode-select --switch /Applications/Xcode.app

再次编译 dumpdecrypted 即可成功完成.

对 dumpecrypted.dylib 签名

如果不对该文件进行签名, 后续砸壳的操作会失败.

先找到已经在电脑上面安装的苹果开发者证书, 操作如下:

1
2
## 列出可签名证书, 找到 mac 上面已经安装的证书
security find-identity -v -p codesigning

为 dumpecrypted.dylib 签名, 命令如下:

1
codesign --force --verify --verbose --sign "iPhone Developer: xxx xxxx (xxxxxxxxxx)" dumpdecrypted.dylib

其中, "iPhone Developer: xxx xxxx (xxxxxxxxxx)" 为你自己本机安装的开发者证书名称.

SSH 连接手机

使用 OpenSSH 让 Mac 和手机连接起来 这样可以很方便的在 Mac 终端使用 shell 命令来操作手机的目录了.

关于 OpenSSH 的使用请参考我之前的博文 iOS 逆向: 越狱使用 SSH.

查找目标 App 所在进程

  • 双击 Home 按键后, 手动杀掉 iPhone 上面所有在后台的 App.
  • Home 到手机桌面.
  • 打开目标 App 即WeChat, 这里称之为 TargetApp.
  • Home 到手机桌面.
  • 查看当前运行的所有进程, 命令如下:
1
ps -e

看到这个货:

在如下目录:

1
/var/containers/Bundle/Application/2837EC87-7C28-45C5-9309-24FACD3A97C9/WeChat.app/WeChat

WeChat.app 就是我们要找的 TargetApp.

连接 SSH 成功后, 在 MacOS 终端 ls 一下该目录, 可以发现 WeChat.app 躺在那里.

砸壳

1. 查找 Documents 目录

WeChat 为当前的进程目标执行文件名称, 从上面的图可以看出, 其对应的进程 id 是 18983.

在命令行中通过 cycript 执行如下操作:

1
cycript -p 18983

再执行 OC 的方法, 如下:

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

可以看到对应的输出, 如下图所示, 这就是对应的 Documents 目录.

注意: 执行过程中, 在 iPhone 上面打开运行一下 App, 不然上面的执行一直卡在那里不动.

找到目录如下:

1
/var/mobile/Containers/Data/Application/2EFA08B6-DD7B-41A6-92C9-C6115CA6DDA1/Documents/

同理, 你也可以使用 iFunBox 查看该目录.

2. 拷贝 dumpdecrypted.dylib.

拷贝 dumpdecrypted.dylib 这个之前编译签名好的文件到iPhone 上面该 APP 的 Documents 目录有两种方法.

第一种方法, 直接在 mac 上面拖拽 dumpdecrypted.dylib 到 iFunBox 显示的这个目录中, 这种方法比较简单且快.

第二种方法, 使用 scp 命令进行操作.

1
scp ~/dumpdecrypted.dylib root@192.168.99.231:/var/mobile/Containers/Data/Application/2EFA08B6-DD7B-41A6-92C9-C6115CA6DDA1/Documents/

192.168.99.231 是 iPhone 设备的 ip 地址.

3. 退出 cycript, 回到命令行模式

1
ctrl + d

4. cd 到 Documents 目录

1
cd /var/mobile/Containers/Data/Application/2EFA08B6-DD7B-41A6-92C9-C6115CA6DDA1/Documents/

5. 砸壳

终端在 Documents 目录下面, 执行下面命令即可:

1
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/2837EC87-7C28-45C5-9309-24FACD3A97C9/WeChat.app/WeChat

执行过程显示如下:

最后生成了 WeChat.decrypted 文件, 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
-rw-r--r-- 1 root mobile 74513728 Jun 7 15:20 WeChat.decrypted
drwxr-xr-x 14 mobile mobile 448 Jun 7 15:20 .
-rw-r--r-- 1 root mobile 207760 Jun 7 15:15 dumpdecrypted.dylib
-rw-r--r-- 1 mobile mobile 8 Jun 7 13:22 db.globalconfig
-rw-r--r-- 1 mobile mobile 15 Jun 7 11:35 SafeMode.dat
drwxr-xr-x 26 mobile mobile 832 Jun 7 11:35 MMappedKV
drwxr-xr-x 3 mobile mobile 96 Jun 7 11:35 CrashReport
-rw-r--r-- 1 mobile mobile 1011 Jun 7 11:35 LocalInfo.lst
drwxr-xr-x 5 mobile mobile 160 Jun 7 11:35 MemoryStat
drwxr-xr-x 6 mobile mobile 192 Jun 7 11:35 00000000000000000000000000000000
drwxr-xr-x 15 mobile mobile 480 Jun 5 13:43 MMResourceMgr
-rw-r--r-- 1 mobile mobile 592 Jun 5 13:43 heavy_user_id_mapping.dat
drwxr-xr-x 2 mobile mobile 64 Jun 5 10:07 OpenImResource

使用 iFunBox 或者 scp 命令将 WeChat.decrypted 文件导出到 mac 的任意目录即可.

后续会跟大家分享如何使用砸壳后的文件, 敬请期待.

坚持原创技术分享!