Я кэширую аутентификацию пользователя всякий раз, когда ping-сервер лицензирования Android Market возвращает понг GRANT_ACCESS.
Кто-нибудь видит какие-либо уязвимости в этой стратегии? Я считаю, что это очень сильно, поскольку я запутываю ключ, и единственный способ разблокировать - это знать соль. Теперь кто-то может открыть 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 );
Затем создание постоянных данных:
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();
}
Затем,
@Override dontAllow
и @override applicationError
. Если isCachedLicense
истинно, то я разрешаю пользователю пересылать.
Кроме того, полный исходный код находится в здесь .