在APK中保护字符串

时间:2013-07-30 23:36:10

标签: c# android security xamarin.android xamarin

我正在使用Xamarin的Mono for Android开发Android应用程序。我目前正在使用Google Play API添加应用内购买功能。为此,我需要从我的应用程序中向Google发送公共许可证密钥。关于此问题,Google建议如下:

  

安全建议:强烈建议您不要这样做   硬编码由提供的确切公共许可证密钥字符串值   Google Play。相反,您可以构建整个公共许可证密钥   字符串在运行时从子字符串,或从加密中检索它   在将它传递给构造函数之前存储。这种方法成功了   恶意第三方更难以修改公众   APK档案中的许可证密钥字符串。

我从未处理过加密,黑客攻击/破解或软件安全的任何其他方面,因此我不确定如何实施Google的建议。我的问题是,一个如何在使用Mono for Android制作的Android APK中充分保护字符串,而无需成为安全专家?

1 个答案:

答案 0 :(得分:5)

不要听起来太大胆,但我相信你可以放心地忽略他们的建议。他们所暗示的安全优势充其量是最小的。

有关更详细的讨论,请阅读:How to protect Google Play public key when doing InApp Billing

事实是,那里描述的方法都没有完全安全。如果有人决定将你的公钥出来,他们会。无论你做什么,公钥最终都会传递给ctor,因此恶意用户可以随时检查它。他们建议的所有“游戏”只是让这更难,但绝对不是不可能。

我认为你最好的选择就是接受它的真实含义。这个密钥公开是有原因的,您需要承认它可能很容易受到损害。因为知道这一点,所以其他人在晚上睡得很好,我认为没有理由你不应该这样做:)

如果你真的无法在晚上睡觉而想做某事。将你的密钥放在代码中,前两个字符已切换。然后在运行时,在使用密钥之前切换回两个字符。这应该足以保护自己免受暴力自动攻击。智能攻击你无能为力。

修改

如果您正在寻找保护代码的行业标准方法,请使用商业混淆器。这些工具专为此目的而设计。一些例子是Mono for Android, code obfuscation。确保使用包含字符串加密的全功能商业版本。