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 | xcrun: error: SDK "iphoneos" cannot be located |
无法找到对应的 SDK
和 stdio.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 | ## 列出可签名证书, 找到 mac 上面已经安装的证书 |
为 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 | -rw-r--r-- 1 root mobile 74513728 Jun 7 15:20 WeChat.decrypted |
使用 iFunBox
或者 scp
命令将 WeChat.decrypted
文件导出到 mac 的任意目录即可.
后续会跟大家分享如何使用砸壳后的文件, 敬请期待.
越狱系列文章
基于 iOS10.3.1 进行的实践。
总有一天,你一定会感激正在努力的自己~