Android应用内安全性build议 – 这是什么意思?

Android开发人员说,关于将您的应用公钥存储在您的项目中的以下内容:

安全build议:强烈build议您不要硬编码Google Play提供的确切的公共许可证密钥string值。 相反,您可以在运行时从子string构造整个公共许可证密钥string,或者在将其传递给构造函数之前,从encryption存储中检索它。 这种方法使恶意的第三方更难以修改APK文件中的公共许可证密钥string。

这应该是不言自明的? 我不明白他们想要我做什么。

他们在这个例子的评论中说了同样的话,但他们实际上并没有表明他们的指示是什么意思。 这就是它说的:

而不是只存储在*程序中embedded的整个文字string,在运行时从零件构造键或*使用位操作(例如,与其他string异或)来隐藏实际的键。 密钥本身并不是秘密信息,但是我们不希望攻击者容易用自己的公钥replace公钥,然后从服务器伪造消息。

那么一个人究竟能做到这一点呢?

Solutions Collecting From Web of "Android应用内安全性build议 – 这是什么意思?"

Android开发人员想要说的“公钥”,你需要与谷歌同步使用您的应用程序进行任何付款,它不应该直接在您的应用程序源代码中使用,因为它可以很容易地被任何一个黑客入侵。 因此,一种方法是将您的公钥存储在服务器端,一旦您从Google Play获得响应,以validation密钥将响应发送到服务器,并在服务器上执行您的操作。

/** * String transformation by XOR-ing all characters by value. */ static String stringTransform(String s, int i) { char[] chars = s.toCharArray(); for(int j = 0; j<chars.length; j++) chars[j] = (char)(chars[j] ^ i); return String.valueOf(chars); } 

这是他们想说的一个非常基本的信息。 我们来看看这个例子:

有些开发人员可能将许可证存储为string本身:

 private static final String LICENSE_1="xxx-yyy-zzz" private static final String LICENSE_2="xxz-yyz-zzz" private static final String LICENSE_N="xxz-yyz-zzz" private ArrayList<String> licenseList=new ArrayList<String>(); licenseList.add(LICENSE_N); 

而且他们可能希望用户input他们的许可证号码,所以他们会这样做:

 if(licenseList.contains(ExitText.getText().toString()) //allow else //disallow 

现在我可以反编译这个应用程序,并获得所有的许可证:D

如果你的代码中没有像上面那样的东西,那么我可以绕过你的授权的唯一方法是:如果在本地完成,可以通过像GameCIH那样的黑客入侵。 内存黑客攻击只是一个例子,攻击者可能会做各种各样的事情。 你不能阻止他们,但是,你可以让他们的生活更难。

如前所述 , 默默无闻的安全措施不起作用,所以您可以忽略文档。