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

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

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

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

 

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

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

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

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

 

Jadx

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

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

$ jadx -d out example.apk

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

$ jadx -e -d out example.apk

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

Jadx в черном
Jadx в черном
 

Apktool

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

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

Разбираем приложение с помощью 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 для нескольких образцов малвари

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Check Also

Разведка в Active Directory. Получаем пользовательские данные в сетях Windows без привилегий

Представь, что кто-то проводит атаку на корпоративную сеть Windows. Вначале у злоумышленни…

2 комментария

  1. Аватар

    Tuw

    26.06.2018 at 14:12

    Уважаемый Евгений Зобнин, не могли бы вы написать статью теперь как снифать зашифрованные приложения(https), у которых встроена защита? Тот же snapchat к примеру, хрен отснифаешь. Я читал, что надо передекомпилировать apk, а потом обратно собрать, но нет актуальной статьи в инете на эту тему. Спасибо!)

Оставить мнение