我正在實施Android許可證檢查,目前正在使用com.google.android.vending.licensing的未修改副本進行測試 - 我知道需要對其進行廣泛修改才能保證其安全。安卓許可證檢查PreferenceObfuscator getString捕獲ValidationException
我調用的標準方法檢查:
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。
的getMessage爲BadPaddingException了:
error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
的ValidationException的結果是PreferenceObfuscator.getString返回默認值,而不是保存一個。
我選中了,PreferenceObfuscator.getString從共享首選項中檢索到的字符串是putString保存的同一個加密字符串,在末尾包括相同數量的「=」符號。
爲什麼我用vanilla庫代碼碰到這個問題?
人的頭腦是一件美妙的事情。我花了數小時試圖找出答案並失敗。然後,我去睡覺,早上醒來,知道正確的答案。 – 2014-12-02 09:04:03