android许可证检查首选项混淆器getString捕获ValidationException
我正在实施Android许可证检查,目前正在使用com.google.Android.vending.licensing的未经修改的副本进行测试——我知道需要对其进行大量修改以保持安全 我以标准方式调用检查:android许可证检查首选项混淆器getString捕获ValidationException,android,encryption,Android,Encryption,我正在实施Android许可证检查,目前正在使用com.google.Android.vending.licensing的未经修改的副本进行测试——我知道需要对其进行大量修改以保持安全 我以标准方式调用检查: private void checkLicence() { if (licenseChecker == null) { licenseCheckerCallback = new Callbacks(); licenseChecker = ne
private void checkLicence()
{
if (licenseChecker == null)
{
licenseCheckerCallback = new Callbacks();
licenseChecker = new LicenseChecker
(
this, new ServerManagedPolicy(this, new AESObfuscator(SALT, packageName, id)), pubKey
);
}
setProgressBarIndeterminateVisibility(true);
licenseChecker.checkAccess(licenseCheckerCallback);
}
首次启动应用程序时,PreferenceObfuscator.getString会为ApkeExpansionPolicy提供默认值,因为尚未保存首选项
第二次运行应用程序时,值已通过PreferenceObfuscator.putString保存,但当ApkeExpansionPolicy调用getString检索这些值时,getString会在捕获BadPaddingException时拾取AESObfuscator.unobfuscate引发的ValidationException
BadPaddingException的getMessage提供了:
error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
错误:06065064:数字信封例程:EVP_DecryptFinal_ex:错误解密
ValidationException的结果是PreferenceObfuscator.getString返回默认值,而不是保存的值
我检查了,PreferenceObfuscator.getString从共享首选项检索到的字符串与putString保存在那里的加密字符串相同,末尾包含相同数量的“=”符号
为什么我要用普通的库代码来解决这个问题?这就是我构建SALT的方式。我用了一种我认为总是可以设置相同值的方式,而不仅仅是一个数组文本,但在代码中加入了一个错误。人类的思维是一件美妙的事情。我花了几个小时试图找出答案,结果失败了。然后我睡觉,早上醒来知道正确答案。