从Mach-O中导出swift对象定义的小工具:SwiftDump

项目地址
SwiftDump是从Mach-O文件中获取swift对象定义的命令行工具,类似大家都用过的OC类dump工具class-dump,SwiftDump专注于处理swift对象(当前只支持swift 5)。对于采用OC/Swift混编的Mach-O文件,你可以将 class-dump 和 SwiftDump结合起来使用。

同时,我在Frida中实现了一个简单版本 FridaSwiftDump
你可以根据需要选择使用, SwiftDump 可以解析处理Mach-O文件,而 FridaSwiftDump 可以对一个前台运行的app进行解析。

如果你对解析Mach-O的过程感兴趣,请查看该文档最后的配图。

效果演示:
在这里插入图片描述
用法

USAGE: SwiftDump [--debug] [--arch <arch>] <file> [--version]
 
ARGUMENTS:
  <file>                  MachO File
 
OPTIONS:
  -d, --debug             Show debug log.
  -a, --arch <arch>       Choose architecture from a fat binary (only support x86_64/arm64).
                          (default: arm64)
  -v, --version           Version
  -h, --help              Show help information.

SwiftDump ./TestMachO > result.txt
SwiftDump -a x86_64 ./TestMachO > result.txt
特点
完全使用swift编写,项目小巧
支持 dump swift 5 的 struct/class/enum/protocol
支持解析 enum with payload case
支持解析 swift类继承 和 protocol
由于采用swift编写,所以借助于swift的运行时函数来还原修饰符(demangle) 比如, swift_getTypeByMangledNameInContext 和 swift_demangle_getDemangledName
受益于swift运行时函数, SwiftDump可以还原复杂的数据类型, 比如某个使用RxSwift声明的变量类型能达到如下的解析效果: RxSwift.Queue<(eventTime: Foundation.Date, event: RxSwift.Event<A.RxSwift.ObserverType.Element>)>

TODO
考虑添加导出函数地址
待定
Compile
Clone the repo
Open SwiftDump.xcodeproj with Xcode
Modify ‘Signing & Capabilities’ to use your own id
Build & Run
默认输入参数使用目录 Demo/test 的Mach-O文件, 你可以在Xcode里修改输入参数: Xcode - Product - Scheme - Edit Scheme - Arguments

(Xcode Version 11.5 (11E608c), MacOS 10.15.5 测试通过)

Mach-O File Format
下图展示了 SwiftDump 是如何从测试文件 Demo/test 解析 swift 类型的,你可以使用 MachOView 打开这个测试文件,对照下图查看。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黑猫成仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值