Я пытаюсь внедрить систему аннулирования версий для серверных приложений.Со следующей моделью:
В некоторых петициях к серверу клиент добавляет ключевое слово и, если этот пароль отсутствует в белом списке, сервер отвечает с ошибкой, и приложения показывают сообщение, предупреждающее, что Маркеттребуется обновление (как правило, потому что это взломанная версия или пароль, который использовался для легальной версии, но был помещен в черный список, потому что взломанная версия использует тот же код).Для генерации этого пароля я бы хотел, чтобы ключ, восстановленный во время выполнения, идентифицировал скомпилированную версию (таким образом, если apk перекомпилирован, он не будет работать)
Изначально я решил использовать подпись apk, полученнуюкод вроде этого:
public static int getSignature() {
try {
Signature sigs[] = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES).signatures;
return sigs[0].hashCode();
} catch (NameNotFoundException ignore) {
}
return 0;
}
Но это довольно глупо, поскольку хакер может получить подпись моего apk (установить его на устройстве и запустить программу с кодом выше (используя имя my.apk.packageвместо getPackageName ())
А затем измените метод getSignature (), чтобы он возвращал поддельный код вместо реальной подписи.
Поэтому мой вопрос: есть ли какая-то информация (подпись)зависимым или аналогичным), но не легко доступным извне приложения, поэтому, если код перекомпилирован с другой сигнатурой, это значение изменяется и не может быть так легко угадать
Спасибо