class-dump

作者: 和风细羽 | 来源:发表于2019-11-30 11:52 被阅读0次

    class-dump 是用来 dump 目标文件的类信息的工具。它利用 Objective-C 语言的 runtime 的特性,将存储在 mach-O 文件中的 @interface 和 @protocol 信息提取出来,并生成对应的 .h 文件。官方介绍如下:

    This is a command-line utility for examining the Objective-C runtime information stored in Mach-O files. It generates declarations for the classes, categories and protocols. This is the same information provided by using ‘otool -ov’, but presented as normal Objective-C declarations, so it is much more compact and readable.

    一、安装 class-dump

    下载地址:http://stevenygard.com/projects/class-dump/

    打开链接后,选择 class-dump-3.5.dmg,进行下载。下载完成之后,将 dmg 文件中的 class-dump 复制到 /usr/local/sbin 目录,并在终端执行如下命令进行赋权:

    sudo chmod 777 /usr/local/sbin/class-dump
    

    运行 /usr/local/sbin/class-dump 指令,即可看到如下结果:

    其他文章说的 /bin//usr/bin/ 目录,都是不能拷贝文件进去的。

    对于 Mac OS X 10.11 El Capitan 及以上版本,由于系统启用了 SIP(System Integrity Protection),导致 root 用户也没有权限修改 /usr/bin/ 或者 /bin/ 目录。

    解决办法:重启 Mac,出现黑屏时按住 command+R 进入恢复模式。选择打开 Utilities下的终端,输入:csrutil disable 并回车,然后正常重启 Mac 即可。

    记得使用完后按同样的步骤启用 SIP,命令为 csrutil enable

    class-dump无法拖入/usr/bin目录

    二、使用 class-dump

    执行命令:

    /usr/local/sbin/class-dump -H /Users/cykj/Desktop/WeChat.decrypted -o /Users/cykj/Desktop/head
    

    说明:

    • /Users/cykj/Desktop/WeChat.decrypted:砸壳后的文件目录
    • /Users/cykj/Desktop/head:存放 dump 结果的 .h 文件的路径。

    执行上面的指令之后,我们可以在 /Users/cykj/Desktop/head 目录下看到生成的 .h 列表:

    有了这些 .h 文件之后,可以初步了解目标 App 的程序结构。后面可以结合Reveal 和 cycript 工具,更精准的分析目标 App 某个页面的功能实现。

    同样的,我们也可以导出 AppKit、UIKit 的头文件:

    /usr/local/sbin/class-dump -H /System/Library/Frameworks/AppKit.framework -o /Users/cykj/Desktop/head/AppKitHeaders
    

    【注意】:有时 class-dump 指令会执行失败,无法得到想要的头文件,或头文件的内容是加密的密文。出现这种情况是因为 class-dump 的作用对象必须是未经加密的可执行文件,一般 App Store 中下载的 App 都是经过签名加密的,这个时候需要先进行砸壳。

    【报错】:class-dump -H 时报 Error: Cannot find offset for address 0x580000000100bcd8 in stringAtAddress:

    原因:项目是用 OC 和 Swift 混编的,需要使用新的 class-dump,下载地址:https://github.com/AloneMonkey/MonkeyDev class-dump 文件在 bin 目录下。

    三、class-dump-z

    class-dump-z 是对 class-dump 和 class-dump-x 的改进版,完全用 C++ 重写,避免动态调用,这使得 class-dump-z 比 class-dump 和 class-dump-x 快 10 倍左右,并且可以在 Linux、Mac、 iPhone 上运行。

    下载地址:https://code.google.com/archive/p/networkpx/wikis/class_dump_z.wiki

    其他的和 class-dump 一样。

    相关文章

      网友评论

        本文标题:class-dump

        本文链接:https://www.haomeiwen.com/subject/wicowctx.html