CloakedString

这个项目是对 Swift #cloaked 宏的扩展,旨在提高 Swift 应用程序中开放文本字符串的安全性。通过使用 UInt8 字段将字符串转换为 Data 格式,可以大大增加从解压缩的应用程序中轻松提取字符串的难度。这种方法对于保护 Swift 项目中的敏感数据和字符串免受逆向工程的攻击尤为有效。

下图展示了一个示例应用程序,该程序使用不同的方法来存储敏感字符串。包括纯字符串变量、存储在 Plist 中的值以及通过 #cloaked 宏掩盖的字符串。

Plist

在 iOS 应用程序中存储敏感 API 密钥时,需要认真考虑安全方面,以防止未经授权的访问。攻击者最容易攻击的目标通常是直接存储在 PLIST 文件中的密钥,因为这些文件很容易被浏览,并且其中的信息可以被提取出来。

Plist

同样,在应用程序反编译期间,相对容易识别和读取包含敏感数据的字符串。

Plist

防止直接读取这些信息的最有效策略是在用户身份验证后动态加载密钥。这种方法大大增加了获取敏感数据的难度,因为密钥不是直接存储在应用程序中,而是在真正需要时才加载。

如果由于某些原因动态加载不可行,另一种替代方案是将密钥存储为字节数组,而不是纯字符串。这种方法使得从反编译的代码中识别和提取密钥变得更加困难,因为字节数组不像文本字符串那样容易识别和解释。虽然没有任何方法可以提供绝对的安全保证,但采用这些实践可以显著增强对存储在 iOS 应用程序中的敏感数据的保护。

如果您正在考虑在您的 iOS 应用程序中安全地存储 API 密钥或其他敏感字符串,请考虑使用 #cloaked 宏。在编译后的应用程序中,纯字符串是最容易被读取的内容。

功能

安装

要将 #cloaked 扩展添加到您的 Swift 项目中,只需包含 Cloaked.swift 文件并按照说明使用它即可。

用法

要将 #cloaked 与您的字符串一起使用,只需使用 #cloaked 宏包装您的纯文本字符串,如下所示

源代码

let secureString = #cloaked("secret")

展开的源代码

String(data: Data([115, 101, 99, 114, 101, 116]), encoding: .utf8)!

安装

Swift 包管理器 (SPM)

将以下行添加到 Package.swift 中的 dependencies,以在 SPM 项目中使用 CloakedStringMacro 宏

.package(url: "https://github.com/pykaso/swiftmacro-cloaked-string.git", from: "0.1.0"),

在你的 target 中

.target(name: "<TARGET_NAME>", dependencies: [
    .product(name: "CloakedStringMacro", package: "swiftmacro-cloaked-string"),
    // ...
]),

在您的源代码中添加 import CloakedStringMacro 以使用 CloakedStringMacro 宏。

许可

本项目根据 MIT 许可证提供。有关更多信息,请参阅 LICENSE 文件。

贡献

热烈欢迎贡献!如果您有关于如何改进 #cloaked 的想法,请随时创建 issue 或 pull request。