class-dump

TODO:

  • 【基本解决】砸壳抖音ipa后导出iOS抖音头文件

  • class-dump
    • 一句话描述:iOS逆向中导出ObjC的头文件的常用工具
      • 用于处理Objective-CMach-O文件信息的命令行工具,可以导出类的定义、分组和协议。
        • command-line utility for examining the Objective-C segment of Mach-O files
    • 说明
      • otool -ov导出的信息是一样的
        • 但是显示为Objective-C定义,更易读
    • 原理
      • 利用了Objective-C语言的运行时的特性
        • 将存储在Mach-O文件中的头文件信息提取出来,并生成对应的.h文件
    • 用途
      • 查看闭源的应用frameworksbundles
        • 查看其中的头文件信息
      • 对比一个 APP 不同版本之间的接口变化
        • 通过导出不同版本的库的头文件的对比看出来
      • 对一些私有frameworks做些有趣的试验

版本和下载

用法

class-dump系列

典型用法:

class-dump --arch <arch> -H -o <outputFolder> <inputBinaryFile>
classdumpc --arch <arch> -H -o <outputFolder> <inputBinaryFile>
  • 参数说明
    • --arch:指定架构
      • 最常见的值:arm64
      • 默认可以省略
        • 但如果是FAT=胖二进制时,则必须指定对应架构
    • -H:输出头文件
    • -o:输出目录

举例:

  • AwemeCore
    MonkeyDev/bin/class-dump --arch arm64 -H AwemeCore -o /Users/crifan/dev/DevRoot/iOSReverse/Aweme/class_dump_output
    
  • Aweme
    AloneMonkey/MonkeyDev/bin/class-dump --arch arm64 -H Aweme -o /Users/crifan/dev/DevRoot/Aweme/classDumpResult/17.8.0/Aweme
    
  • YouTube
    class-dump --arch arm64 -H ../ipa/YouTube_17.08.2_dumped/Payload/YouTube.app/YouTube -o .
    
  • MusicallyCore
    ./class-dump --arch arm64 -H ipa/Payload/TikTok.app/Frameworks/MusicallyCore.framework/MusicallyCore -o tiktok_headers_26.8.0
    
  • Apple Store
    class-dump --arch arm64 -H AppleStore/ipa/Payload/Apple\ Store.app/Apple\ Store -o AppleStore_headers_5.18.0.910
    
  • mobileactivationd
    classdump-c_4.2.0-RELEASE1/Release/classdumpc --arch arm64 -H -o ../staticAnalysis/headers mobileactivationd
    
  • 其他
    • class-dump AppKit
      • class-dump /System/Library/Frameworks/AppKit.framework
    • class-dump UIKit
      • class-dump /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/UIKit.framework
    • class-dump UIKit and all the frameworks it uses
      • class-dump /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/UIKit.framework -r --sdk-ios 4.3
    • class-dump UIKit (and all the frameworks it uses) from developer tools that have been installed in /Dev42 instead of /Developer
      • class-dump /Dev42/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/UIKit.framework -r --sdk-root /Dev42/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk

dsdump系列

resymbol

  • resymbol
    • 用法
      resymbol machoFile > outputHeaderFile.h
      
    • 举例
      resymbol ../../../input/mobileactivationd > mobileactivationd_headers_resymbol.h
      

常见问题

TODO:

  • 【记录】支持iOS的Swift和ObjC混编的class-dump
  • 【已解决】class-dump导出Framework二进制AwemeCore报错:Cannot find offset for address in dataOffsetForAddress
  • 【未解决】Mac中无法删除临时目录出现没有权限Operation not permitted
  • 【已解决】砸壳后抖音ipa安装失败:DeviceNotSupportedByThinning

class-dump导出头文件是空的

  • 现象:抖音的二进制AwemeCore,用class-dump导出头文件是空的
  • 原因:抖音内部代码应该是SwiftObjC混编代码,原版class-dump只支持ObjC的,不支持SwiftObjC混编,所以导出是空的。
  • 解决办法:找支持Swift的版本的class-dump去导出,即可

使用心得

Generated by class-dump可以看出原始用到了class-dump

之前从WebDriverAgent的源码中看到很多头文件的头部都有:Generated by class-dump

举例:

refer/WebDriverAgent/PrivateHeaders/XCTest/XCTestDriver.h

//
//     Generated by class-dump 3.5 (64 bit).
//
//     class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2013 by Steve Nygard.
//

-》说明这些文件都是通过class-dump从库文件中导出生成的。

results matching ""

    No results matching ""