class-dump简介
class-dump就是提取目标对象的class信息的工具,利用了Objective-C的runtime特性,将存储在Mach-O文件夹中的头文件信息提取出来,生成对应的.h文件。需要注意的是我们从App Store下载的APP是经过加密的,在可执行文件上加了一层“壳”,我们的class-dump是不能处理这种文件的,需要先用其他工具来砸壳,才能使用。
安装class-dump
下载地址:http://stevenygard.com/projects/class-dump/
下载class-dump-3.5.dmg,下载完成后,将dmg文件里的class-dump复制到"/usr/local/bin"下,然后打开终端,输入“sudo chmod 777 /usr/local/bin/class-dump”,给class-dump赋予执行权限。此时在终端运行class-dump命令,看到下图,就表示安装成功
class-dump的使用
class-dump的对象是Mach-O格式的二进制文件,比如Farmework的库文件和可执行文件。在class-dump一个对象的时候,首先要找到这个对象的可执行文件目录,在Xcode中的位置如图:
使用我们可以借助Xcode自带的plutil工具查看info.plist中的CFBundleExecutable字段。先将.ipa的文件后缀改为.zip,然后解压,在终端cd 到这个解压文件中的.app文件,然后执行plutil -p Info.plist | grep CFBundleExecutable,效果如图:
最后得到的"wmcw"就是APP的可执行文件,然后就是对可执行文件进行class-dump,并将头文件内容按照名字排序。命令如下:class-dump -S -s -H wmcw -o /Users/zhaoyongsheng/Desktop/Payload 执行完毕后打开/Users/zhaoyongsheng/Desktop/Payload文件夹,效果如图:
好了,现在去对比一下自己源码的头文件和class-dump头文件的差别吧,你会发现参数类型被改成了id,参数名用arg1,arg2等替换了,其他的基本是一样的。