这个项目是对 Swift #cloaked
宏的扩展,旨在提高 Swift 应用程序中开放文本字符串的安全性。通过使用 UInt8
字段将字符串转换为 Data
格式,可以大大增加从解压缩的应用程序中轻松提取字符串的难度。这种方法对于保护 Swift 项目中的敏感数据和字符串免受逆向工程的攻击尤为有效。
下图展示了一个示例应用程序,该程序使用不同的方法来存储敏感字符串。包括纯字符串变量、存储在 Plist 中的值以及通过 #cloaked
宏掩盖的字符串。
在 iOS 应用程序中存储敏感 API 密钥时,需要认真考虑安全方面,以防止未经授权的访问。攻击者最容易攻击的目标通常是直接存储在 PLIST 文件中的密钥,因为这些文件很容易被浏览,并且其中的信息可以被提取出来。
同样,在应用程序反编译期间,相对容易识别和读取包含敏感数据的字符串。
防止直接读取这些信息的最有效策略是在用户身份验证后动态加载密钥。这种方法大大增加了获取敏感数据的难度,因为密钥不是直接存储在应用程序中,而是在真正需要时才加载。
如果由于某些原因动态加载不可行,另一种替代方案是将密钥存储为字节数组,而不是纯字符串。这种方法使得从反编译的代码中识别和提取密钥变得更加困难,因为字节数组不像文本字符串那样容易识别和解释。虽然没有任何方法可以提供绝对的安全保证,但采用这些实践可以显著增强对存储在 iOS 应用程序中的敏感数据的保护。
如果您正在考虑在您的 iOS 应用程序中安全地存储 API 密钥或其他敏感字符串,请考虑使用 #cloaked
宏。在编译后的应用程序中,纯字符串是最容易被读取的内容。
Data([UInt8])
格式,从而隐藏其真实内容,使其无法被分析。要将 #cloaked
扩展添加到您的 Swift 项目中,只需包含 Cloaked.swift
文件并按照说明使用它即可。
要将 #cloaked
与您的字符串一起使用,只需使用 #cloaked
宏包装您的纯文本字符串,如下所示
源代码
let secureString = #cloaked("secret")
展开的源代码
String(data: Data([115, 101, 99, 114, 101, 116]), encoding: .utf8)!
将以下行添加到 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。