class-dump
class-dump,顾名思义,就是用来dump目标对象 的class信息的工具。它利用Objective-C语言的runtime 特性,将存储在Mach-O文件中的头文件信息提取出 来,并生成对应的.h文件。
安装 class-dump
1、下载 class-dump
2、将dmg文件里的class- dump复制到“/usr/local/bin”下
sudo cp /Volumes/class-dump-3.5/class-dump /usr/local/bin
3、更改权限:终端输入
sudo chmod 777 /usr/local/bin/class-dump
4、查看 class-dump 的一些基本参数
class-dump --help
使用流程
class-dump的对象是Mach-O格式的二进制文件, 如 Framework 的库文件和 App 的可执行文件。下面以一个App为例,来看看class-dump的完整流程。
1、定位 App 的可执行文件
首先将要 class-dump 的 app 拷贝电脑上的目录下,然后在Terminal中进入 App 所在的目录,找到对应的可执行文件的名称,可以用 Xcode 自带的 plutil 工具查看 Info.plist 中的 CFBundleExecutable
字段,如下:
当前目录下的 "Demo" 就是 App 的可执行文件。
2、class-dump 可执行文件
把 Demo 的头文件 class-dump 到“/path/to/headers/”下,并将头文件内容按名字排序,命令如下:
class-dump -S -s -H Demo -o /path/to/headers/
透过这些头文件,闭源App的程序架构就能初现端倪了,经验丰富的开发人员可以从中了解非常多的信息,这些信息是iOS逆向工程的基础。不过现在的 App 工程越来越大,而且还在不停地引用第三方代码,因此经?;岱⑾?class-dump 出来了成百上千个头文件,虽然靠人工及经验一点点地分析是很好的练习方式,但过程实在太复杂,让人头大。需要通过各种工具逐步缩小目标范围,最后精准地定位目标函数。
值得注意的是,从AppStore下载的App都是经过加密的,可执行文件被加上了一层“壳”,class-dump应付不了这样的文件。所以还得需要其他工具把壳砸开才行。