MASTG-TOOL-0068:SwiftShield
SwiftShield 是一个为您的 iOS 项目的对象(包括您的 Pods 和 Storyboards)生成不可逆的加密名称的工具。 这提高了逆向工程师的门槛,并且在使用 class-dump 和 Frida 等逆向工程工具时会产生不太有用的输出。
警告:SwiftShield 不可逆地覆盖您的所有源文件。 理想情况下,您应该仅在您的 CI 服务器和发布版本上运行它。
一个示例 Swift 项目用于演示 SwiftShield 的用法。
- 查看 sushi2k/SwiftSecurity。
- 在 Xcode 中打开项目,并确保项目构建成功(Product / Build 或 Apple-Key + B)。
- 下载 最新版本的 SwiftShield 并解压缩。
- 转到您下载 SwiftShield 的目录,并将 swiftshield 可执行文件复制到
/usr/local/bin
cp swiftshield/swiftshield /usr/local/bin/
- 在您的终端中,进入 SwiftSecurity 目录(您在步骤 1 中检出的目录)并执行命令 swiftshield(您在步骤 3 中下载的命令)
$ cd SwiftSecurity
$ swiftshield -automatic -project-root . -automatic-project-file SwiftSecurity.xcodeproj -automatic-project-scheme SwiftSecurity
SwiftShield 3.4.0
Automatic mode
Building project to gather modules and compiler arguments...
-- Indexing ReverseEngineeringToolsChecker.swift --
Found declaration of ReverseEngineeringToolsChecker (s:13SwiftSecurity30ReverseEngineeringToolsCheckerC)
Found declaration of amIReverseEngineered (s:13SwiftSecurity30ReverseEngineeringToolsCheckerC20amIReverseEngineeredSbyFZ)
Found declaration of checkDYLD (s:13SwiftSecurity30ReverseEngineeringToolsCheckerC9checkDYLD33_D6FE91E9C9AEC4D13973F8ABFC1AC788LLSbyFZ)
Found declaration of checkExistenceOfSuspiciousFiles (s:13SwiftSecurity30ReverseEngineeringToolsCheckerC31checkExistenceOfSuspiciousFiles33_D6FE91E9C9AEC4D13973F8ABFC1AC788LLSbyFZ)
...
SwiftShield 现在正在检测类和方法名称,并将它们的标识符替换为加密值。
在原始源代码中,您可以看到所有类和方法标识符
SwiftShield 现在将它们全部替换为加密值,这些加密值不会留下对其原始名称或类/方法的意图的任何痕迹
执行 swiftshield
后,将创建一个名为 swiftshield-output
的新目录。 在此目录中,将创建另一个目录,其文件夹名称中包含时间戳。 此目录包含一个名为 conversionMap.txt
的文本文件,该文件将加密的字符串映射到它们的原始值。
$ cat conversionMap.txt
//
// SwiftShield Conversion Map
// Automatic mode for SwiftSecurity, 2020-01-02 13.51.03
// Deobfuscate crash logs (or any text file) by running:
// swiftshield -deobfuscate CRASH_FILE -deobfuscate_map THIS_FILE
//
ViewController ===> hTOUoUmUcEZUqhVHRrjrMUnYqbdqWByU
viewDidLoad ===> DLaNRaFbfmdTDuJCPFXrGhsWhoQyKLnO
sceneDidBecomeActive ===> SUANAnWpkyaIWlGUqwXitCoQSYeVilGe
AppDelegate ===> KftEWsJcctNEmGuvwZGPbusIxEFOVcIb
Deny_Debugger ===> lKEITOpOvLWCFgSCKZdUtpuqiwlvxSjx
Button_Emulator ===> akcVscrZFdBBYqYrcmhhyXAevNdXOKeG
这是 反混淆加密的崩溃日志 所需要的。
SwiftShield 的 Github 仓库 中提供了另一个示例项目,可用于测试 SwiftShield 的执行。