2013-07-30 39 views
5

我正在开发一个Android应用程序,由Xamarin为Android使用Mono。我目前正在使用Google Play API添加应用内购买功能。为此,我需要从我的应用内向Google发送公共许可证密钥。关于这个问题,谷歌提出以下建议:在APK中保护字符串

安全建议:强烈建议您不要 硬编码的确切公共许可证密钥字符串值,按照 谷歌播放提供。相反,您可以在运行时从子字符串构造整个公共许可证密钥 字符串,或者在将其传递给构造函数之前从加密的 存储中检索它。这种方法使得 更难以让恶意的第三方修改APK文件中的公开 许可证密钥字符串。

我从来没有处理加密,黑客攻击/破解或任何其他方面的软件安全,所以我不知道如何实施谷歌的建议。我的问题是一个充分如何保护一个安卓系统中的字符串,而不必成为安全专家?

回答

5

不要听起来太大胆,但我相信你可以放心地忽略他们的建议。他们所建议的安全性好处是最少的。

对于更详细的讨论阅读:How to protect Google Play public key when doing InApp Billing

事实是,没有任何的方法描述有完全安全的。如果有人决心把你的公钥拿出来,他们会。不管你做什么,公钥都会被传递给Ctor,所以恶意用户可以随时检查它。他们所建议的所有“游戏”只是让这一点变得更加困难,但绝对不是不可能的。

我认为你最好的选择就是接受它的真实性。这个关键是public出于某种原因,你需要忍受它可能容易被损害的事实。因为每个人都知道这一点睡得很好,所以我没有理由为什么你不应该:)

如果你真的不能在晚上睡觉,想做点什么..把你的钥匙放在你的代码中前两个字符切换。然后在运行期间,在使用密钥之前将两个字符切换回来。这应该足以保护自己免受暴力自动攻击。智能攻击你无能为力。

编辑:

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

+0

感谢您的回复。但我仍然想知道解决这个问题的一个好的行业标准方法,因为Google Play键不是我应用程序中唯一的关键字符串(例如Facebook应用程序键,也可能是未来的其他键)。 – Ramsay

+0

使用商业模糊处理工具。这些工具会覆盖您的代码并使其难以反编译。商业版通常包含一个自动字符串加密功能,可以确保您的所有硬编码字符串(如密钥)永远不会在您的应用中保持明文形式,并在运行时进行解码。大量的混淆器可用于c#/ android。它们非常容易集成到构建过程中,并且在保护代码的过程中为您完成所有繁重的工作。 – talkol

+0

下面是商业混淆器用于惹恼潜在黑客的一些技术列表:http://www.ssware.com/cryptoobfuscator/features.htm。永远记住,一个坚定的黑客仍然能够克服所有这些......但对他来说,这将不那么有趣;) – talkol