2014-12-01 44 views
0

我正在實施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庫代碼碰到這個問題?

回答

0

這是我構建鹽的方式。而不僅僅是一個數組文字,我曾經以一種我認爲總是設置相同的值的方式,但是在該代碼中存在錯誤。

+1

人的頭腦是一件美妙的事情。我花了數小時試圖找出答案並失敗。然後,我去睡覺,早上醒來,知道正確的答案。 – 2014-12-02 09:04:03