iOS_使用swift-demangle还原二进制中的swift函数名

4,228 阅读1分钟

使用swift编写的代码,编译后类名方法名变的很长很混乱,这是因为Swift 在编译过程中,会破坏原来的格式,变为一种不利于人类阅读的格式。

例如下面这段简单的代码:


经过编译后,我们把TestSwift001这个APP的二进制文件放到 IDA 中看一下tryPlay函数变成了什么样子:



在逆向分析过程中,这种复杂的函数名很难阅读。为提高可读性,我们使用Xcode自带的swift-demangle 工具还原函数名。

打开终端,输入命令并执行:

xcrun swift-demangle s12TestSwift00114ViewControllerC7tryPlay6userIdSSSi_tF

特别注意的是,在ida中看到的函数名一般第一个字符是'_',我们在终端中要删除函数名前的'_'符号

_sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC

 改为

sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC


终端还原效果:

$s12TestSwift00114ViewControllerC7tryPlay6userIdSSSi_tF ---> TestSwift001.ViewController.tryPlay(userId: Swift.Int) -> Swift.String

结果非常清晰,能看到函数原来的名字、函数的参数和返回值类型。

--------------------------------------------------------------------------------------

庆幸的是看到网上已经有人编写了适用于ida的脚本,用于还原swift函数名:

地址:https://github.com/tobefuturer/ida-swift-demangle

使用说明:

1、Download entire folder ida-swift-demangle 

根据上面的网址下载ida-swift-demangle

2、Open IDA Menu bar : File -> Script file... 

在ida中,菜单选择 File->Script file...

3、Select the script(ida-swift-demangle/ida-swift-demangle.py)

选择刚才下载的文件,我这里选的是 ida-swift-demangle.py

执行前后效果对比: