我正在使用Xamarin的Mono for Android开发Android应用程序。我目前正在使用Google Play API添加应用内购买功能。为此,我需要从我的应用程序中向Google发送公共许可证密钥。关于此问题,Google建议如下:
安全建议:强烈建议您不要这样做 硬编码由提供的确切公共许可证密钥字符串值 Google Play。相反,您可以构建整个公共许可证密钥 字符串在运行时从子字符串,或从加密中检索它 在将它传递给构造函数之前存储。这种方法成功了 恶意第三方更难以修改公众 APK档案中的许可证密钥字符串。
我从未处理过加密,黑客攻击/破解或软件安全的任何其他方面,因此我不确定如何实施Google的建议。我的问题是,一个如何在使用Mono for Android制作的Android APK中充分保护字符串,而无需成为安全专家?
答案 0 :(得分:5)
不要听起来太大胆,但我相信你可以放心地忽略他们的建议。他们所暗示的安全优势充其量是最小的。
有关更详细的讨论,请阅读:How to protect Google Play public key when doing InApp Billing
事实是,那里描述的方法都没有完全安全。如果有人决定将你的公钥出来,他们会。无论你做什么,公钥最终都会传递给ctor,因此恶意用户可以随时检查它。他们建议的所有“游戏”只是让这更难,但绝对不是不可能。
我认为你最好的选择就是接受它的真实含义。这个密钥公开是有原因的,您需要承认它可能很容易受到损害。因为知道这一点,所以其他人在晚上睡得很好,我认为没有理由你不应该这样做:)
如果你真的无法在晚上睡觉而想做某事。将你的密钥放在代码中,前两个字符已切换。然后在运行时,在使用密钥之前切换回两个字符。这应该足以保护自己免受暴力自动攻击。智能攻击你无能为力。
修改强>
如果您正在寻找保护代码的行业标准方法,请使用商业混淆器。这些工具专为此目的而设计。一些例子是Mono for Android, code obfuscation。确保使用包含字符串加密的全功能商业版本。