android许可证检查PreferenceObfuscator getString捕获ValidationException

时间:2014-12-01 19:38:00

标签: android encryption

我正在实施Android许可检查,目前正在使用未经修改的com.google.android.vending.licensing副本进行测试 - 我知道需要对其进行大量修改以确保其安全。

我以标准方式调用检查:

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会为APKExpansionPolicy提供默认值,因为尚未保存首选项。

第二次运行应用程序时,已通过PreferenceObfuscator.putString保存了值,但是当APKExpansionPolicy调用getString来检索它们时,getString会在遇到BadPaddingException时选择AESObfuscator.unobfuscate抛出的ValidationException。

BadPaddingException的getMessage给出了:

error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt

ValidationException的结果是PreferenceObfuscator.getString返回默认值,而不是保存的值。

我检查过,PreferenceObfuscator.getString从共享首选项中检索到的字符串与putString保存的字符串相同,包括相同数量的" ="最后的迹象。

为什么我用vanilla库代码来解决这个问题?

1 个答案:

答案 0 :(得分:0)

这是我构建SALT的方式。我只是设置了相同的值,而不仅仅是一个数组文字,但是在该代码中放了一个错误。