C# APK中的固定字符串

C# APK中的固定字符串,c#,android,security,xamarin.android,xamarin,C#,Android,Security,Xamarin.android,Xamarin,我正在用Xamarin的Mono为android开发一个android应用程序。我目前正在使用Google Play API添加应用内购买功能。为此,我需要从我的应用程序中向谷歌发送公共许可证密钥。关于这个问题,谷歌建议如下: 安全建议:强烈建议您不要 硬编码由提供的确切公共许可证密钥字符串值 谷歌游戏。相反,您可以构造整个公共许可证密钥 运行时从子字符串中提取字符串,或从加密的 存储,然后将其传递给构造函数。这种方法使它 恶意第三方更难修改公共文件 APK文件中的许可证密钥字符串 我从未处理过

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

安全建议:强烈建议您不要 硬编码由提供的确切公共许可证密钥字符串值 谷歌游戏。相反,您可以构造整个公共许可证密钥 运行时从子字符串中提取字符串,或从加密的 存储,然后将其传递给构造函数。这种方法使它 恶意第三方更难修改公共文件 APK文件中的许可证密钥字符串


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

听起来不要太大胆,但我相信您可以放心地忽略他们的建议。他们的建议所带来的安全好处充其量是微乎其微的

有关更详细的讨论,请阅读以下内容:

事实上,这里描述的方法没有一种是完全安全的。如果有人决心找出你的公钥,他们会的。无论您做什么,公钥最终都会被传递到ctor,因此恶意用户随时可能在此时检查它。他们所建议的所有“游戏”只是让这变得有点困难,但绝对不是不可能

我认为你最好的选择就是接受这个事实。此密钥是公开的,这是有原因的,您需要接受这样一个事实:它很容易被泄露。既然大家都知道这一点,晚上都睡得很好,我看你没有理由不这么做:)

如果你晚上真的睡不着,想做点什么。。在切换前两个字符的情况下,将密钥放入代码中。然后在运行时,在使用键之前将这两个字符切换回原来的位置。这应该足以保护自己免受暴力自动攻击。。你无能为力的智能攻击

编辑:


如果您正在寻找一种行业标准的方法来保护您的代码,请使用商业模糊器。这些工具就是为此而设计的。以下是一些例子。确保使用功能齐全的商业版本,包括字符串加密

谢谢你的回复。但我仍然想知道一些解决这个问题的好的行业标准方法,因为Google Play key不是我应用程序中唯一的密钥字符串(例如Facebook应用程序密钥,将来可能还有其他密钥)。使用商业模糊处理工具。这些工具检查了您的代码,使其更难反编译。商业软件通常包括一个自动字符串加密功能,确保你的所有硬编码字符串(如密钥)在你的应用程序中永远不会保持明文,并在运行时解码。c#/android上有很多模糊器。它们很容易集成到您的构建过程中,并且在保护代码方面为您完成了所有繁重的工作。下面列出了一些商业混淆器用来骚扰潜在黑客的技术:。永远记住,一个坚定的黑客仍然能够克服这一切。。但这对他来说就没那么有趣了;)