iOS脱壳技术
前言
在iOS开发中,经常遇到需要去对别人的app做一些参考或者修改。在app被打包到 app store
后,ipa
可执行文件会被加密并加壳,那么我们如何解密并脱壳已达到使用 class-dump 命令或者 Hopper
软件查看ipa
文件的结构呢?下面我将介绍两个开源库。
Clutch工具
安装方法
进入 github 下载最新的插件,我这里以 2.0.4版本号为例
将下载后的文件拖到Mac桌面并重命名为 Clutch
(方便后续的更新)。将Clutch
文件放入到 iPhone => user/bin
目录下,这样做的目的是为了在iPhone终端中直接敲出 Clutch 命令
如果在输入 Clutch 命令后提示 Permission denied
,可以使用如下命令
使用方法
iPhone:~ root# Clutch
Usage: Clutch [OPTIONS]
-b --binary-dump <value> Only dump binary files from specified bundleID
-i --print-installed 生成安装后未破解的序号
-d --dump <value> 输入序号或者BundleID开始破解
--clean Clean /var/tmp/clutch directory
--version Display version and exit
-? --help Display this help and exit
-n --no-color Print with colors disabled
1.使用Clutch -i
查看未脱壳的app,并生成序号
2.使用Clutch -d 加上序号或者BundleID
开始脱壳
3.将脱壳成功后生成的
ipa
保存到Mac本地,方便后面使用
对比是否脱壳成功
查看未脱壳mach-o
文件
找到在iPhone中安装好后未脱壳的app mach-o
文件(可执行文件)。
iPhone:~ root# ps -A | grep WeChat
942 ?? 0:43.14 /var/mobile/Containers/Bundle/Application/DCBB48DF-CD56-4B2E-ACAB-1941FEF8FBE5/WeChat.app/WeChat
将文件拖拽到Mac桌面,用于对比
未脱壳 mach -o
使用MachOView
库或者otool
查看cryptid
如果cryptid
值大于0就表示改mach-o
未脱壳
查看已脱壳mach-o
文件
将保存到Mac本地并且已经脱壳成功后的ipa
解压,将其中的可执行mach-o
文件拖到桌面
使用MachOView
库或者otool
查看cryptid
可以看到,脱壳成功后,改cryptid
值已经变成0。这样在使用class-dump
或者Hopper
时,就没有任何障碍了。
dumpdecrypted工具
安装方法
进入 github,下载后解压,并使用make
命令进行编译
可能产生的报错和解决方法:
报的错:
xcrun --sdk iphoneos --find gcc "iphoneos" cannot be located
解决方法:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
将生成的dumpdecrypted.dylib
文件传入到iPhone => /var/root
下(方便在root根环境下使用)
使用方法
1.终端进入root目录
2.使用DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 手机端mach-o文件地址
3.生成的WeChat.decrypted会在保存在/var/root
目录下
ps:可以使用ps -A | grey 查询的关键字
来进行app运行期间的进程模糊搜索