当遵循Android开发人员页面上的Application Licensing文档以使用ServerManagedPolicy进行许可时,Implementing an Obfuscator部分将声明声明一个私有的20个私有静态最终数组,其中包含随机字节,称为SALT。这被传递给AESObfuscator的构造函数,描述说它是“用于每个(未)混淆的随机字节数组”。我对此并不陌生,但我想那是为了混淆首选项值。

稍后,我通过导出APK来使用Android SDK for Eclipse附带的ProGuard选项混淆代码本身,我得到了最终的APK。但是在我的apk上使用apktool之类的逆向工程应用程序会以纯字节形式显示SALT数组。现在,就像我说的那样,我是新手,我的问题似乎有点天真……但这不是一件坏事吗?字节数组不应该隐藏些吗?

最佳答案

盐值不是秘密,因此,如果公开,则实际上不是问题。就是说,混淆器处理代码(主要是变量和方法名),而不是值。因此,您存储的所有内容(字符串,字节数组,混淆密钥)都可以通过反编译来恢复。
模糊处理使查找起来有点困难,但是如果您有意寻找一个看上去很随机的16字节数组或128位密钥,那么查找起来就不太难了。

顺便说一句,该示例并没有真正推广最佳做法-您应该使用随机生成的
每个加密操作的新盐值,并将其与加密数据一起存储。不要将您的加密代码硬编码并每次使用它。再一次,该示例假定您将仅加密(出于混淆目的)单个首选项。

10-07 19:41
查看更多