Декомпиляция android-приложений

Декомпиляция android-приложений

The Onion Router

Декомпиляция — процесс воссоздания исходного кода декомпилятором.

Декомпиляция, в частности, используется при обратной разработке программ.

Удачность декомпиляции зависит от объема информации, представленной в декомпилируемом коде. Байт-код, используемый большинством виртуальных машин (таких как Java Virtual Machine или .NET Framework Common Language Runtime) часто содержит обширные метаданные, делающие декомпиляцию вполне выполнимой, в то время как машинный код более скуден и сложен в декомпиляции. В частности трудночитаемыми представляются вызовы подпрограмм или функций с косвенной адресацией вызовов (в терминах языков программирования высокого уровня — вызовы через указатели на функции/процедуры).

Понадобилось мне декомпилировать одно приложение и подумал, почему бы статью об этом не написать?

Начнем

При реверсинге может возникнуть 2 случая:

1. Простой:

У вас на руках есть .apk файл приложения. Можно приступать к реверсу.​

2. Сложный:

Приложение есть только в googleplay. Прийдётся выковыривать приложение из телефона. Для этого случая понадобятся root права на андроид.​


Я начну со второго, а после этого перейдём к реверсу(самая лёгкая часть).


Настраиваем ADB.

Нам понадобится adb на компьютере:

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install android-tools-adb android-tools-fastboot



После установки необходимо опознавание устройств, в терминале:

sudo nano /etc/udev/rules.d/51-android.rules



Вставляем:

И выдаём права:

sudo chmod a+r /etc/udev/rules.d/51-android.rules



На android-устройстве нужно включить режим отладки по USB.

Для этого в настройки > о телефоне несколько раз подряд жмём по номеру сборки. Разблокируется режим разработчика. Далее идём в настройки > для разработчиков и ставим галку на Отладка по USB.

Подключаем телефон к компьютеру, должно высветиться такое окно:

Жмём окей. В терминале вводим:

sudo adb devices



Если есть ваш телефон, то всё ок.

Достаём apk файл.

Я буду показывать на примере BlueBorne Vulnerability Scanner. Он есть только в гугл плей.

Установим приложение:

Далее в терминале:

sudo adb shell
su
ls /data/app



Нам покажет все установленные приложения и их расположение. Как видно, BlueBorne Scanner находится по /data/app/com.armis.blueborne_detector-1.

Если ввести ls /data/app/com.armis.blueborne_detector-1, то в ответ получим

base.apk
lib



base.apk - это и есть приложение. Скопируем его на cd-карту:

cp /data/app/com.armis.blueborne_detector-1/base.apk /sdcard/



Выходим из android-shell в обычный терминал (2 раза Ctrl+d) и копируем с cd-карты на компьютер:

sudo adb pull /sdcard/base.apk



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

 Декомпилируем

Нам понадобится apktool для декомпиляции и dex2jar для вытаскивания кода (оба есть по умолчанию в Kali).

Декомпилируем:

sudo apktool -r -s d base.apk



В созданной нам понадобится classes.dex (вся логика программы). Получаем .JAR:

d2j-dex2jar -r -ts classes.dex



На выходе получаем classes-dex2jar.jar, который можно распаковать, я пользуюсь jd-gui для просмотра:

На этом все. Надеемся данный способ был вам полезен. До новых встреч!


Report Page