Разработка
Как защитить Android-приложения от реверс-инжиниринга и утечки данных
Как вы, как Android-разработчик, можете предотвратить реверс-инжиниринг вашего приложения и защитить данные вашего пользователя на стороне клиента?
Безопасность и конфиденциальность — две самые обсуждаемые темы в наши дни. Как и любой другой код, приложения для Android также могут стать объектом атаки. Данные ваших пользователей могут подвергнутся риску и, конечно, всегда существует риск того, что ваше приложение будет подвергнуто обратной разработке, реверс-инжинирингу. Как вы, как Android-разработчик, можете предотвратить реверс-инжиниринг вашего приложения и защитить данные вашего пользователя на стороне клиента? Именно это мы сегодня и узнаем.
Обнаружение несанкционированного доступа
Самый безопасный способ определить, было ли изменено ваше приложение, — убедиться, что подпись приложения совпадает с той, что вы использовали. Вы можете сделать это, используя простую небольшую библиотеку, которую я написал некоторое время назад. Ее очень легко интегрировать.
В большинстве случаев единственный способ получить доступ к вашему приложению — через Play Store. Это означает, что мы можем просто проверить источник установки и заблокировать работу приложения, если приложение не установлено через магазин Google Play. Это также можно сделать с помощью библиотеки, которой я поделился выше.
Например, если вы хотите определить, подключен ли отладчик к вашему приложению, вы можете сделать что-то вроде:
Чтобы убедиться, что ваше приложение загружено из правильного источника, вы можете сделать так:
Наконец, чтобы проверить, было ли ваше приложение изменено или нет, вы можете проверить подпись своего приложения следующим образом:
SafetyNet
SafetyNet от Google — это инструмент, который помогает разработчикам определять, запущено ли приложение на rooted устройстве, и проверять, пытается ли пользователь изменить важные файлы, созданные вашим приложением, для перехвата важной информации. Интеграция SafetyNet и способы ее использования — это большая отдельная тема, о которой я мог бы написать отдельную статью позже.
ProGuard
Всегда включайте ProGuard в своих приложениях. ProGuard обфусцирует ваш код, что затрудняет взлом приложения хакерами. Вы можете сделать это, просто включив следующие параметры в файле app/build.gradle:
Единственное, с чем вам нужно быть осторожным, это с правилами, которые вы упоминаете в файле proguard-rules.pro.
Защита данных пользователя
Никогда не храните открытую конфиденциальную информацию на стороне клиента. Всегда используйте что-то вроде DataStore для безопасного хранения информации. Никогда не храните имя пользователя/пароль на клиентском устройстве. Ключи API, токены доступа и другая конфиденциальная информация никогда не должны храниться в их открытых значениях. Всегда шифруйте информацию. Да, это сделало бы доступ к ней немногим медленнее, но так данные будут в большей безопасности.
Шифрование базы данных
Наконец, многие люди просто пропускают шифрование данных, хранящихся в базе, потому что считают, что это слишком хлопотно. Это не так. В настоящее время большинство баз данных предоставляют способы шифрования данных, не нагружая разработчиков процедурами шифрования и расшифровки. SQLCipher, расширение SQLite, которое предлагает шифрование AES256, приобрело большую популярность. Realm также имеет свою систему шифрования.
PS.
Не существует надежного безопасного способа защитить ваши приложения от взлома. Если хакер будет настойчив, он найдет способ сломать ваше приложение. Это всего лишь несколько советов, которые немного усложнят задачу хакерам. Если у вас есть другие методы — расскажите о них.