Class-dump: class-dump-x和class-dump-z如何分析dylib等文件?

成功砸壳分析一个App Store应用后,想尝试分析一个dylib文件,但是按照类似的命令输入后,提示文件类型错误,如:

随后查了查,又注意到了class-dump-x/z两个修改版,如念茜的博客:iOS安全攻防(六),但个人还是不很清楚这三者

间的关系和应用区别,提两个疑问:

 1. class-dump: class-dump-x和class-dump-z三者的继承关系和各自的应用场景?

 2. 如何分析dylib文件和Frameworks文件?
1 个赞
  1. class-dump是祖宗,但有一段时间作者没有维护,对Objective-C 2.0的语法支持得不好,加上一些其他bug,不好用,所以改进版的class-dump-*就出现了;然后出现了基于Cycript的weak_classdump和直接作用在dyld_shared_cache上的classdump_dyld,构成了class-dump的大家族。值得一提的是,大多数的class-dump系软件都是开源的,如果有时间和精力,想往底层钻一钻的话,也可以考虑阅读源代码,写个自己的class-dump,对熟悉MachO数据格式,以及相关底层函数的调用都是有很大的促进作用的。至于应用场景嘛,没有什么特别的说法,哪个好用,哪个能用,就用哪个吧,得到的结果都差不多。
  2. .dylib和.framework都是MachO格式的动态链接库文件,可以跟可执行文件一样用IDA、class-dump来分析。之所以出现你上面的报错,我想可能有3个原因:i) 你所使用的class-dump版本不支持dylib文件,但最新版的肯定是支持的,我试过;ii) 这根本就不是一个MachO格式的文件,为了迷惑人,使用了.dylib后缀;iii) 这个dylib的头部并不是标准MachO格式(作者修改了头部来防逆向),不能被class-dump,但可以被launchd正常加载
4 个赞

谢谢@snakeninny 的解答,每次你的回答都很有助于帮助我全面的看问题,能引发思考和继续研究的冲动。疑问解决了,细节就该自己去补充和验证了:handshake:

追问: 3. 找到正确的Mach-o文件后,输入命令又出现如下错误:
zhaocaoyuan$ class-dump -H ResultObject.dylib -o ResultObject.dylib.
Error: Fat file doesn’t contain a valid Mach-O file for the specified architecture (armv6). It probably means that class-dump was run on a static library, which is not supported.网上没有找到详细的解析,应该如何处理?

其实错误信息已经很明确了:在这个fat文件里没有找到armv6架构的MachO文件。也就是说,如果不指定处理器架构,你的class-dump对于fat文件处理的默认目标是armv6。因此,你需要显式指定处理器架构,在class-dump命令中加入一条–arch armvX的选项即可

LZXdeMac:~ lzx$ class-dump --arch x86_64 -H /Users/lzx/Desktop/Optimizely-iOS-SDK-master/Optimizely.framework/Versions/A/Optimizely -o /Users/optimizelyheads
Error: Fat file doesn’t contain a valid Mach-O file for the specified architecture (x86_64). It probably means that class-dump was run on a static library, which is not supported.
我加了–arch 。。。但是还是报错,是为什么?求大神赐教

原版classdump直接可用啊。。。。。

是不是optimizely 只是用framework 文件夹,里面放了一个静态库,用nm 可以打印出静态库一些信息