使用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
执行前后效果对比: