Главная » Пентест » Инструменты для взлома и реверсинга приложений Android
Инструменты для взлома и реверсинга приложений Android

Инструменты для взлома и реверсинга приложений Android

За многие года существования Андроид разработчики приложений и те, кто эти приложения взламывает, обзавелись массой инструментов, направленных друг против друга. О том, какими способами можно защитить свое приложение, мы уже рассказывали, а сегодня у нас обзор инструментов для взлома и реверсинга Андроид приложений.

Все инструменты для анализа и реверсинга программ  (не только для Android) можно разделить на две группы:

  • Статический анализ — дизассемблеры, декомпиляторы, деобфускаторы и любые другие утилиты, которые работают с кодом, не запуская его.
  • Динамический анализ — инструменты, с помощью которых приложение можно запустить на виртуальном или реальном устройстве и проанализировать его поведение.

В обеих группах есть утилиты, как для начинающих (запустил — получил список уязвимостей), так и для опытных пентестеров. В этой статье мы расскажем про все популярные программы для реверс инжиниринг apk, которые подойдут для новичков и для профи.

Еще по теме: Декомпиляция APK онлайн

Статический анализ

Итак, для начала речь пойдет об инструментах статического анализа. Каждый кто пытается взломать приложение должен иметь в своем арсенале хотя бы два из них. Это декомпилятор и дизассемблер.

  • Декомпилятор нужен, чтобы перегнать байт-код Dalvik обратно в код Java и с его помощью разобраться, как работает приложение.
  • Дизассемблер транслирует байт-код в гораздо более низкоуровневый код Smali (местный ассемблер), в котором труднее разобраться, но зато он всегда корректен настолько, что его можно собрать обратно в приложение. Этой особенностью можно воспользоваться, например, чтобы внедрить в приложение собственный код.

Также вам пригодится деобфускатор. Он сделает декомпилированный код немного более читаемым.

Jadx

Первая софтина в нашем списке инструментов для взлома программ — декомпилятор Jadx. Это активно развиваемый открытый декомпилятор, который выдает достаточно неплохой код Java на выходе и даже имеет функцию деобфускации кода. Работать с ним просто: запускаете Jadx-gui, с его помощью выбираете APK-файл приложений и видите иерархию пакетов и файлы с исходниками на Java.

Jadx может работать и в режиме командной строки. Например, следующая команда декомпилирует приложение example.apk и поместит полученный код Java в каталог out:

Более того, Jadx может дополнительно сгенерировать файлы build.gradle, чтобы исходники можно было импортировать в Android Studio:

Собрать приложение из них не получится, зато анализировать код будет гораздо удобнее.

реверсинг андроид приложений
Jadx в черном

Apktool

Второй инструмент, который должен обязательно быть в списке инструментов для реверс инжиниринга Android приложений, — это Apktool. Его назначение — разборка и сборка приложений. При этом термин «разборка» подразумевает дизассемблирование кода приложения в файлы формата Smali, а также декомпрессию ресурсов и файла AndroidManifest.xml.

С помощью Apktool можно разобрать приложение, проанализировать дизассемблерный код, внести в него правки и собрать обратно.

инструменты для реверсинга приложений
Разбираем приложение с помощью Apktool

APKiD

Эта небольшая утилита понадобится вам, когда вы заметите, что Jadx не в состоянии декомпилировать приложение. В большинстве случаев это значит, что приложение было обфусцировано или упаковано с помощью специальных инструментов. APKiD позволяет узнать, какие конкретно инструменты были использованы, выяснить, было ли приложение пересобрано с помощью Apktool и используются ли в нем какие-то другие техники для защиты от дизассемблирования/декомпиляции и запуска в виртуальной машине.

APKiD далеко не всегда работает корректно, а в некоторых случаях вообще не выводит никакой информации на экран. Но он может помочь, если вы в тупике — вывод утилиты понятный. Например:

  • anti_debug : Debug.isDebuggerConnected() check — проверка, подключен ли дебаггер с помощью метода isDebuggerConnected;
  • anti_vm : Build.MANUFACTURER check — проверка производителя смартфона, чтобы понять, что находитесь в виртуальной машине.

Но есть одно неочевидное поле: compiler. Оно обычно содержит dx или dexlib. Dx — стандартный компилятор Android SDK, а dexlib — это библиотека сборки файлов DEX из Apktool. Проще говоря, если в поле compiler находится dexlib, значит, приложение было пересобрано с помощью Apktool или аналогичного инструмента.

реверсинг программ APKiD
Результат работы APKiD для нескольких образцов малвари

Simplify

Что, если APKiD сообщает о применении обфускатора, а при попытке изучить код вы сталкиваетесь с зашифрованными строками? В этом случае вам нужен деобфускатор, который сможет сделать код более читаемым. Абсолютное большинство деобфускаторов, которые вы найдете в интернете, умеют бороться только с одним или несколькими обфускаторами, зачастую устаревших версий.

Simplify — универсальный деобфускатор. Вместо того чтобы искать в коде знакомые паттерны, он запускает код в виртуальной среде и дает ему возможность сделать все самому. В процессе исполнения код сам расшифрует зашифрованные строки, укажет на места, которые никогда не будут исполнены (обфускация с помощью мертвого кода), и укажет на реальный тип объектов, полученных с помощью рефлексии (а это позволит выполнить дерефлексию).

Из-за особенностей реализации виртуальной машины Simplify редко способен проанализировать все приложение целиком. Поэтому его стоит использовать для деобфускации отдельных методов и классов (это можно сделать с помощью флага -it):

реверсинг apk
До и после обработки Simplify

DeGuard

Simplify поможет, если приложение было пропущено через мощный обфускатор. Однако большинство программистов не обременяют себя применением чего-то более сложного, чем входящий в состав Android Studio ProGuard. А ProGuard — это оптимизатор, в котором функция обфускации появилась как побочный эффект. Единственное, чем он запутывает реверсера Андроид приложений, — это измененные на бессмысленный набор букв имена классов, методов и полей.

Разобраться в обфусцированном с помощью ProGuard коде не так уж и сложно, но сложнее, чем в совсем не обфусцированном (в два раза сложнее, если верить исследованиям). Поэтому даже для ProGuard существуют деобфускаторы.

DeGuard — наиболее интересный из них. Это веб-сервис, созданный в Высшей технической школе Цюриха. С помощью нейросетей он способен восстановить (а точнее, предсказать) оригинальные имена пакетов, классов, методов и полей. Одна проблема: нередко деобфусцированный код запутывает еще больше, чем оригинал.

реверсинг android приложений
Пример деобфускации с помощью DeGuard

Bytecode Viewer

А это решение класса «все в одном». Bytecode Viewer сочетает в себе функции Jadx, Apktool и еще нескольких инструментов. Он умеет дизассемблировать приложения, декомпилировать их с помощью пяти различных движков декомпиляции (JD-Core, Procyon, CFR, Fernflower, Krakatau), расшифровывать строки с помощью трех движков дешифрования, компилировать приложение обратно из декомпилированного кода (с помощью Ranino Compiler) и даже искать зловредный код!

Многие реверсеры APK рекомендуют использовать именно этот инструмент для анализа приложений. Их аргумент в том, что любой другой декомпилятор (тот же Jadx или популярный JD-GUI) может сломаться об обфусцированный или специальным образом написанный код и просто не покажет его. В то же время Bytecode Viewer, благодаря наличию сразу пяти движков декомпиляции, имеет больше шансов декомпилировать такое приложение.

На самом же деле не все так радужно. Bytecode Viewer — это кое-как работающая сборная солянка из различных открытых инструментов. Да, в нем множество движков декомпиляции, но, похоже, автор перестал следить за своим произведением. Текущая версия Bytecode Viewer уже не может открыть большинство APK.

Скриншота не будет по причине неработоспособности инструмента.

QARK

Закончим рассказ о статическом анализе на инструменте QARK. Это утилита для автоматического поиска уязвимостей в приложениях. Достаточно натравить ее на нужный APK или каталог с исходниками, и QARK проанализирует манифест, декомпилирует и проанализирует исходники и даже попробует создать эксплоит для взлома приложения с помощью найденных уязвимостей.

Пользоваться QARK очень просто: запускаете QarkMain.py, отвечаете на несколько вопросов и получаете отчет в формате HTML в каталоге quark/report.

Как и другие автоматизированные инструменты, QARK не может точно предсказать наличие уязвимости, он лишь высказывает предположение о ее существовании и дает реверсеру приложения намек, в какую сторону следует копать. Поэтому не стоит надеяться, что вы просто установите QARK и сразу начнете стричь купоны на пентесте приложений. Без матчасти никуда.

реверс инжиниринг
Отчет QARK

Динамический анализ

Статический анализ приложения не всегда позволяет раскрыть все подробности его поведения. Код может быть зашифрован упаковщиком, приложение может докачивать свои компоненты из интернета, расшифровывать строки только во время исполнения и делать другие вещи, которые нельзя увидеть, читая код.

Обнаружить такие вещи можно с помощью динамического анализа, то есть запустив приложение на реальном устройстве или в эмуляторе и изучив его поведение с помощью специальных инструментов. Именно это, кстати, происходит в Google Play, когда разработчик заливает новую версию приложения. Серверы Google запускают его в виртуальной среде и, если приложение делает какие-то неправомерные действия, запрещает его публикацию.

Frida

Начнем с короля всех инструментов динамического анализа, трассировки и модификации приложений — с Frida. Это так называемый Dynamic Instrumentation Toolkit, набор инструментов, позволяющих на лету внедрять собственный код в другие приложения. Внедрив код, можно выполнить полную трассировку приложения, перехватить функции шифрования, записи файлов на диск и вообще сделать с приложением все что угодно.

У нас уже была подробная статья о Frida, поэтому не будем повторяться. Скажем только, что у Frida есть репозиторий с готовыми скриптами, которые могут тебе пригодиться:

    • fridantiroot — комплексный скрипт, позволяющий отключить проверки на root;
    • Universal Android SSL Pinning Bypass — обход SSL Pinning;
    • dereflector — скрипт Frida для дерефлексии Java-кода (превращения непрямых вызовов методов в прямые).
      frida —codeshare pcipolloni/universal-android-ssl-pinning-bypass-with-frida -f com.example.app
реверс инжиниринг apk
Трассировка Telegram с помощью Frida

Objection

Frida — очень популярный инструмент. На его основе было создано множество более высокоуровневых утилит. Objection — одна из них. Она позволяет внедриться в приложение iOS или Android и провести анализ его приватного каталога, памяти, классов, методов, извлечь содержимое базы SQLite, обойти SSL-пиннинг.

Главное преимущество Objection в том, что она дает возможность «войти» в приватный каталог приложения точно так же, как это позволяет сделать устройство с root-доступом. Но в этом же ее недостаток: большинство задач, для которых предназначена Objection, легко решаются с помощью adb, команды sqlite (при наличии root) и общедоступных скриптов Frida.

реверс инжиниринг android
Консоль Objection

Inspeckage

Inspeckage — еще один высокоуровневый инструмент динамического анализа приложений. У него огромное количество возможностей: он может получать информацию о полномочиях, активностях, контент-провайдерах и сервисах, умеет перехватывать обращения к SQLite, HTTP-серверам, файловой системе, буферу обмена, криптографическим функциям, запускать активности, подключаться к ContentProvider’aм и выполнять спуфинг местоположения.

Все это можно сделать, используя удобный веб-интерфейс. Но перед этим на смартфоне необходимо получить права root, а затем установить Xposed Framework (который как раз и позволяет Inspeckage выполнять перехват управления).

реверс инжиниринг android приложений
Главный экран Inspeckage

Drozer

На закуску у нас drozer — мощный инструмент для выполнения типичных задач пентеста приложений. Drozer позволяет получить информацию о приложении, запустить его активности, подключиться к ContentProvider’у, отправить сообщения сервису — в общем, сделать все, чтобы вытащить из приложения информацию или заставить его сделать то, что нам нужно.

Типичный воркфлоу drozer выглядит так. Сначала получаем информацию о приложении:

Затем выводим список активностей и пробуем запустить их (возможно, некоторые из них не должны торчать наружу):

Получаем информацию о ContentProvider’ах приложения:

Пробуем выудить из них информацию разными способами. Например, при помощи прямого запроса данных:

Проверяем на наличие уязвимостей к инъекции и directory traversal:

Получаем информацию о сервисах, пробуем запустить их, послать сообщения:

реверс инжиниринг программы
Просмотр информации о приложении с помощью drozer

Одной строкой

  • Androl4b — образ виртуальной машины с набором перечисленных в статье инструментов для реверс инжиниринга приложений;
  • AndroidRE — аналогичный по назначению образ Docker для реверсинга Андроид приложений;
  • LazyDroid — скрипт для упрощения действий, связанных с анализом приложений, позволяет установить флаги отладки и бэкапа приложения, пересобрать и подписать приложение, выдернуть с устройства приложение, установленное с помощью Google Play, скопировать на комп приватный каталог приложения, внедрить гаджет Frida в APK;
  • AndroTickler — метаинструмент анализа Android-приложений, позволяющий получить исчерпывающую информацию о приложении, декомпилировать его, найти строки, URL, компоненты баз данных; плюс доступна интеграция с Frida.

Вместо выводов

Сегодня у взломщиков приложений для Android нет недостатка в инструментах. Все программы для реверсинга уже написаны до нас, осталось только взять и начать это использовать — так думает большинство из тех, кто решил попробовать себя в роли реверсера. На самом деле это не так. Ни один из представленных в статье инструментов не скажет вам: «Уязвимость здесь, используй ее». Они лишь сэкономят ваше время на том или ином этапе реверса приложения, но найти уязвимость и эксплуатировать ее вам придется самому, а для этого надо хорошо понимать, что вы делаете.

Еще по теме: Как проверить APK на вирусы

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *