Данная статья является переводом соответствующей статьи Aditya Agrawal. Оригинал доступен по ссылке.

Недостаток защищённости двоичного файла занимает последнее место в OWASP Mobile Top 10.

Приложения Android распространяются с помощью файлов в формате APK, которые злоумышленник может подвергнуть реверс-инжинирингу и увидеть весть код, который содержит этот файл. Ниже указаны возможные сценарии реверс-инжиниринга:

  • Злоумышленник может проанализировать код приложения и определить, какие в нём реализованы меры защиты и, возможно, найти пути их обхода.
  • Злоумышленник также может внедрить вредоносный код в это приложение, перекомпилировать его и затем распространять его среди простых пользователей. Например, игры, в которых уже разблокированы некоторые бонусы, широко распространенные у младшего поколения, загружаются из небезопасных источников (иногда, всё же, и через Google Play Store). Большинство из этих приложений содержат вредоносное содержание, некоторые также содержат рекламу, которая помогает зарабатывать на этих пользователях.

Злоумышленник в данном случае является единственным источником угроз.

Ниже приведена демонстрация реверс-инжиниринга приложения.

  • Для демонстрации я буду использовать приложение Sieve
  • Сначала использовал dex2jar, чтобы преобразовать APK-файл в JAR-файл

9_1

  • Затем открыл этот файл в jdgui

9_2

Если вы повторите указанные шаги, то сможете просматривать исходный код приложения Sieve

Как это исправить

  • Код приложения может быть обфусцирован с помощью Proguard, но это сможет лишь замедлить реверс-инжиниринг приложения, т.к. обфускация не предотвращает реверс-инжиниринг.
  • Для разработки приложений с акцентом на безопасность можно использовать Dexguard — платную версию Proguard. Помимо шифрования классов, строк, нативных библиотек, он добавляет средство обнаружения подделывания, чтобы приложение реагировало на случаи, когда злоумышленник пытался изменить его или неправомерно получить к нему доступ.