AndroidマーケットライセンスpingサーバーがGRANT_ACCESSポンを返すたびに、ユーザーの認証をキャッシュします。難読化されたキーのキャッシングの脆弱性? Android Licensing
誰にもこの戦略の脆弱性はありますか?私は鍵を難読化しているので、それは非常に強力だと信じています。そして、解読できない唯一の方法は、塩を知ることです。今、誰かがapkを開き、塩を探すことができるかもしれませんが、実際にはクラッキングのレベルではなく、心配することはそれほど重要ではないと思います。
ご覧のとおり、デバイス固有の情報が難読化手法に追加されています。
// Try to use more data here. ANDROID_ID is a single point of attack.
String deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
obfuscator = new AESObfuscator(SALT, getPackageName(), deviceId);
mChecker = new LicenseChecker(this, new ServerManagedPolicy(this, obfuscator), BASE64_PUBLIC_KEY);
次永続データの作成:私はisCachedLicens
場合はチェックし、最後に
boolean isCachedLicense() {
SharedPreferences settings = getSharedPreferences(PREFERENCES_EULA, 0);
if(settings.contains(ACCESS_KEY) && settings.contains(OBFU_ACCESS_KEY)) {
String accessKey = settings.getString(ACCESS_KEY, "");
String obAccessKey = settings.getString(OBFU_ACCESS_KEY, "");
try {
if(accessKey.equals(obfuscator.unobfuscate(obAccessKey))) {
return true;
} else {
return false;
}
} catch (ValidationException e) {
e.printStackTrace();
return false;
}
} else {
return false;
}
}
:次に
public void allow() {
SharedPreferences settings = getSharedPreferences(PREFERENCES_EULA, 0);
SharedPreferences.Editor editor = settings.edit();
String uid = UUID.randomUUID().toString();
if(!settings.contains(ACCESS_KEY)) {
editor.putString(ACCESS_KEY,uid);
editor.commit();
}
if(!settings.contains(OBFU_ACCESS_KEY)) {
String obfu = obfuscator.obfuscate(uid);
editor.putString(OBFU_ACCESS_KEY,obfu);
editor.commit();
}
、私はキャッシュされたコンテンツの状態をチェックするために別の方法を使用しましたeをLicenseCheckerCallback
の @Override dontAllow
と@override applicationError
の次の場所に置き換えます。 isCachedLicense
がtrueの場合は、ユーザーに転送させます。
また、完全なソースコードはhereにあります。
実績のある暗号化ライブラリを使用しています。参考までに完全なコードを参照してください。 – hunterp
これは一歩進んだことです。ライブラリはまともな仕事をしているようです。攻撃者は各デバイスのデータを別々に解読し、デバイス固有の解読プログラムを実行できるようにデバイスに十分なアクセス権を持たなければなりません。しかし、世界の塩はまだ弱い地点です。そして、これをライブラリとして配布しているように見えるので、エンドユーザーが独自の塩分値を入力しないという危険性があります。確かに、開発者の人口が大きすぎると、入力した値にその値が残ることになります。その値を各デバイスごとに別々に生成された値に変更します。 – blueberryfields
参照を見ると、私はすでにデバイス固有の情報が暗号化ミックスに入っています(私の質問を再編集して、この情報を先頭に追加しました) – hunterp