Очень интересная паста о том, как зашить секретную строку в приложение так, чтобы ее нельзя было вытащить за 1 секунду, используя обычный поиск внутри файлов
Например, вы решили спрятать свой ключ от биткоин-кошелька в apk
Что можно попробовать и что из этого выйдет:
1️⃣
Просто положить строку в val/var/const string или в strings.xml — строка попадет в apk в неизменном виде
2️⃣
Разбить строку на байты и положить в массив byte[] — строка попадет в apk в неизменном виде (случилась оптимизация при компиляции)
new byte[]{'x','y','z'} -> "xyz"3️⃣
Положить строку в BuildConfig — строка попадет в apk в неизменном виде
4️⃣
Натравить Proguard/R8 на класс со строкой — строка попадет в apk в неизменном виде, proguard меняет только название переменных, но не их значение
5️⃣
Положить зашифрованную строку (например, в base64/sha254...) и декодить ее динамически — вот это уже сработает, за 1 секунду можно будет найти только зашифрованную строку
"eHl6".decodeBase64() -> "xyz"Но еще за 3 секунды можно будет раздебажить алгоритм шифрования, найдя его в .dex-файлах
6️⃣
Зашить строку в нативный с++ код и обращаться к нему через JNI — строка попадет в apk в неизменном виде
Выводы:
➡️ спрятать секрет в apk — изначально идея, обреченная на провал
➡️ apk — это open source
@dolgo_polo_dev
