通过混淆敏感字符串来提高iOS应用的安全性[Swift]

在开发新的iOS应用程序时,开发人员通常只专注于UI / UX并急于将其发布到AppStore。 但是,他们忘记了一项非常重要的事情,即安全性

可能有些人甚至认为IPA文件本身已受到很好的保护,没有人可以对其造成任何伤害。 好吧,如果您这么认为,那将是非常错误的,您应该继续阅读……

攻击者只需要越狱的iPhone ,即可将其连接到调试模式,然后就可以拦截所有敏感字符串。

敏感字符串为:

  • REST API凭证
  • OAuth凭证
  • 密码
  • 不希望公众知道的URL(即私有后端API端点)
  • 钥匙与秘密
  您是否真的想公开这样的信息那么容易? 

解决方案

混淆器 –该库对硬编码的安全敏感字符串进行混淆,并将其转换为字节数组。 换句话说,您不必解码硬编码的字符串通过应用程序,而是必须解码字节数组才能显示该字符串。 如此简单,并且使攻击者无法获取您的敏感信息。 只需单击本段开头的超链接,将文件添加到项目中,就可以开始了。

用法

 导入混淆器 
  1. 定义盐键:
 令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 ,您可以放心使用它。