简介
Class-dump 是一款用来检测存储在 Mach-O 文件里的 Objective-C runtime 信息的命令行工具。他可以检测出 class,category,protocol 的声明。和 ‘otool -ov‘
产生的信息类似,但是 Class-dump 产生的是 Objective-C 语法格式的声明,所以它的可读性更高。
为什么使用 Class-dump
它一个强大的工具。有了它,你可以查看一些闭源的应用,framework 及 bundle。查看不同版本之间接口的变化。体验私有库,或者查看 AppKit 有哪些私有的 API。学习 Mail.app 使用了哪些扩展的私有API。
下载
安装
下载完成后把 class-dump-3.5.dmg
内的 class-dump
拷贝到 /usr/bin/
路径下,并且赋予执行权限。
sudo cp class-dump /usr/bin
sudo chmod 777 /usr/bin/class-dump
使用
class-dump [options]
where options are: -a 显示实例变量的偏移量。 -A 显示实现的地址。 --arch 从一个通用架构类型的二进制文件(ppc,ppc64,i386,x86_64)中选择一个指定的架构类型。 -C 仅显示匹配正则表达式的类。 -f 在方法命中查找字符串。 -H 在当前目录生成头文件,或者使用 -o
参数指定生成头文件的目录。
-I 对 类,categories,procotols 按照继承关系排序(会覆盖 -s
参数) -o
指定输出目录,配合 -H
使用。 -r 递归扩展 frameworks,并且修复 VM
共享库。
-s 把类和 categories 按名称排序。 -S 把方法按名称排序 -t 限制输出头,用于测试 --list-arches 列出文件的架构类型, 然后退出 --sdk-ios 指定 iOS SDK 版本 (将会查找 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk --sdk-mac 指定 Mac OS X 版本 (将会查找 /Developer/SDKs/MacOSX.sdk --sdk-root 指定 SDK 完整根路径(或者简单使用 --sdk-ios
/--sdk-mac
)
实践
我们知道从 App Store 下载的 App 都是经过加密的,有一层壳,我们得先砸壳,本文不讲砸壳,本只讲 class-dump 的使用。
我随机选取了我手机里的一款 App,名字叫《早朝》,是一款简单的 RSS 阅读工具,(说实话,简单到完全没什么逆向的价值)。砸完壳之后的文件可以在 这里下载,然后我们直接对其
dump 一把。
class-dump -H iOSRSS.decrypted -o iOSRSS.h
然后我们可以看到在当前目录下生成了 iOSRSS.h
的文件夹,所有 dump 出来的头文件都在里面了。
然后我们就可以查看每个类,category,protocol 的声明了。