2012-03-05 49 views
1

当Android开发者页面上的Application Licensing文档在使用ServerManagedPolicy进行授权时,Implementing an Obfuscator声明了一个私有静态最终数组,其中包含随机字节,名为SALT。这被传递给AESObfuscator的构造函数,并且描述表明它是“用于每个(不)混淆的随机字节数组”。我对此很陌生,但我想这是为了模糊偏好值。Android obfuscation hide salt value

当后来我使用Android SDK for Eclipse附带的ProGuard选项通过导出apk来混淆代码本身时,我得到了最终的apk。但是在我的apk上使用反向工程应用程序(如apktool)会以普通字节显示SALT数组。现在,就像我刚才说的,我对这件事很陌生,我的问题似乎有点天真......但这不是一件坏事吗?字节数组不应该更隐藏一点?

回答

3

盐价并不是秘密,所以如果披露它并不是一个真正的问题。也就是说,混淆器损坏了代码(主要是变量和方法名称),而不是。因此,任何你存储的东西(字符串,字节数组,你的模糊密钥)都可以通过反编译来恢复。 混淆使得它难以找到,但如果您有意寻找随机看起来的16字节数组或128位密钥,则不难发现。

顺便说一句,这个例子并没有真正推广最佳实践 - 你应该为每个加密操作使用随机生成的新盐值,并将其与加密数据一起存储。 不是将您的加密代码硬编码并每次使用它。然后,再次,该示例假定您将仅加密(仅用于混淆目的)单个偏好。

+0

谢谢。我得到了这份文件的印象,这将是这样做的简单“终极方式”,所以我现在看到在发布之前我需要进一步深入研究。 – rickbear 2012-03-05 10:10:25