Одним из решений, если в конечном итоге вы используете API KeyStore, является динамическая генерация пароля во время выполнения каждый раз, когда приложению требуется доступ к KeyStore. Если вы основываете свой алгоритм паролей на простой, но изменяемой переменной, привязанной к конкретной установке, такой как MEID устройства (или другой конкретный идентификатор физического устройства, полученный во время выполнения), вы можете предоставить ключ для блокировки, которая становится все более сложной. подобрать.
Пример: используйте идентификатор физического устройства, обрежьте три позиции и добавьте их в конечную позицию в строке идентификатора, затем программно добавьте свои инициалы в строку. Я бы подумал, что такой подход даст уровень безопасности, который не может быть легко взломан, если взломщик не знает, как вы сделали ключ (т. Е. У вас есть исходный код).
MEID = MEID + "fluffy" + "2008";
Если MEID - это строка с идентификатором устройства, «пушистый» - это имя вашего лучшего друга, а «2008» - год важного события в вашей жизни. Затем введите эту новую строку в массив, проанализируйте подходящее вам число (например, день месяца, в который вы получили водительское удостоверение), возьмите три символа и отбросьте эти символы в конце строки. Клип от передней части строки на количество позиций, которые вам нужны для вашего ключа, и все, и вы идете. Это не должно быть очень трудоемкой задачей, поэтому, имея некоторый код отказоустойчивости для переменных, вы сможете запускать это в своем основном процессе, даже не беспокоясь о получении ANR из системы. Если вы действительно хотите стать лягушатником, в какой-то момент преобразуйте строку в биты и «поразрядно» внесите изменения. Viola, динамический ключ с низкими издержками, который уникален для устройства, на котором он запущен!
EDIT:
Как указал @RedWarp, декомпиляция .apk всегда в пределах возможного для любого объектного кода с надлежащими инструментами и мотивацией. Если генерация «ключей» является действительно важным процессом, то абстрагирование генераторов ключей вне области приложения является обязательным.
Реальная мысль, которую я пытаюсь сделать с этим ответом, заключается в том, что небольшая предварительная мысль может помочь в отношении минимальной безопасности. Более надежная защита - это больше, чем простой ответ от меня.