通过混淆敏感字符串来提高iOS应用的安全性[Swift]
在开发新的iOS应用程序时,开发人员通常只专注于UI / UX并急于将其发布到AppStore。 但是,他们忘记了一项非常重要的事情,即安全性 。
可能有些人甚至认为IPA文件本身已受到很好的保护,没有人可以对其造成任何伤害。 好吧,如果您这么认为,那将是非常错误的,您应该继续阅读……
攻击者只需要越狱的iPhone ,即可将其连接到调试模式,然后就可以拦截所有敏感字符串。
敏感字符串为:
- REST API凭证
- OAuth凭证
- 密码
- 不希望公众知道的URL(即私有后端API端点)
- 钥匙与秘密
您是否真的想公开这样的信息那么容易?
解决方案
混淆器 –该库对硬编码的安全敏感字符串进行混淆,并将其转换为字节数组。 换句话说,您不必解码硬编码的字符串通过应用程序,而是必须解码字节数组才能显示该字符串。 如此简单,并且使攻击者无法获取您的敏感信息。 只需单击本段开头的超链接,将文件添加到项目中,就可以开始了。
用法
导入混淆器
- 定义盐键:
令o =混淆器(withSalt:[AppDelegate.self,NSObject.self,NSString.self])
Salt键可以是您喜欢的任何格式,但是请记住,它将用作字符串编码和解码的唯一值。 最佳实践是像示例中那样使用本机类的组合。
2.生成字节数组
让字节= o.bytesByObfuscatingString(字符串:“ 555555556ABC”)
打印(字节)/ * [110,97,80,70,65,122,87,83,67,50,33,34] * /
在这里,您将获得提供的字符串的字节数组,并且应该将该值存储在保留常量的类中。 完成所有字符串后,只需注释bytesByObfuscatingString,因为您将不再需要它(至少在添加一些新的敏感字符串之前不需要)。
我建议将所有字符串都保留在一个结构中,并将原始值也注释在字节数组上方,以用于定向。
结构常数{
/ *原始12311456ABC * /
静态让GOOGLE_API_KEY:[UInt8] = [106、102、86、66、69、123、87、80、52、49、32]
/ *原始555555556ABC * /
静态让FACEBOOK_API_KEY:[UInt8] = [110、97、80、70、65、122、87、83、67、50、33、34]
}
3.显示字符串
让值= o.reveal(键:常量.FACEBOOK_API_KEY)
打印(值)/ * 555555556ABC * /
这将返回原始值555555556ABC ,您可以放心使用它。