Хирургия Android. APKInspector — наглядное решение для обратной разработки

Хирургия Android. APKInspector — наглядное решение для обратной разработки

В колонке «Хирургия Android» мы уже успели осветить процесс обратной разработки приложений под данную мобильную систему. В этой же заметке мне хотелось бы продолжить данную тему и познакомить читателя с великолепным программным обеспечением APKinspector, которое предназначено для анализа APK-файлов. Выполним ремонт iphone X, глюков смартфона, диагностика 0 руб.

Что такое APKInspector?

APKinspector представляет собой открытый проект, разработчики которого обратили внимание на то, что существующие основные инструменты для реверс-инженеринга приложений под Android не являются особо наглядными. Поэтому авторы проекта резонно посчитали, что если создать удобный графический интерфейс и предусмотреть механизмы, визуализирующие структуру модулей приложения и связанного DEX-кода, то ковырять программы для Android станет намного уютнее. Собственно, графический уровень абстракции, создаваемый «поверх» привычных инструментов – это и есть APKinspector. Ведь под капотом у этой разработки, реализованной на Python, располагаются всё те же утилиты dex2jar и  Java Decompiler, а также Androguard – ещё один открытый (также написанный на Python) инструмент для обратной разработки android-приложений. Всё это успешно объединяется APKinspector’ом в единую систему.

Сборка APKInspector

Настала пора поближе познакомиться с данным программным обеспечением. Для этого следует загрузить APKinspector с его официальной странички. В архиве мы можем видеть директории с вышеуказанными инструментами, а также исходные коды на Python в формате .py и скомпилированные модули в формате .pyc. Нам предстоит всё это собрать и запустить.

Автор программы упоминал о корректной сборке инструментария под ОС Linux, мой тестовый стенд также был представлен именно этой операционной системой (дистрибутив Ubuntu).

1. При создании графического интерфейса авторы использовали PyQt, реализующий возможности могучего инструментария разработки Qt для Python. Так что сначала нам нужно загрузить и установить на машину QtSDK (с правами суперпользователя). Скачать инструментарий можно отсюда. Или можно просто воспользоваться любимым менеджером пакетов, набрав в консоли:

sudo apt-get install qt-sdk.

Затем нам необходимо будет отредактировать переменные среды (/etc/profile/), добавив следующие пути:

QTDIR=/opt/QtSDK/Desktop/Qt/473/gcc PATH=$QTDIR/bin:$PATH LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH export QTDIR PATH LD_LIBRARY_PATH

После этого приведем в жизнь сделанные изменения:

source /etc/profile

sudo updatedb

2. Теперь требуется поселить на компьютере саму связку, PyQt. Для этого сначала загружаем (отсюда) и устанавливаем SIP — связку между Python и библиотеками, написанными на C/C++.

Но прежде нам понадобятся некоторые пакеты, установим их:

sudo apt-get install python-dev

sudo apt-get install ipython

sudo apt-get install python-scipy

Теперь можно собирать SIP (естественно, из папки с его исходниками): python configure.py

make

make install

3. Инсталлируем PyQt4 (исходники брать тут):

python configure.py -g

make

make install

4.Устанавливаем pydot (лежит здесь), это python-интерфейс для замечательного пакета для визуализации графов под названием Graphviz:

python setup.py install

5. Сам Graphviz тоже нужно собрать из исходников:

./configure —with-ortho=yes

make

make install

6. Осталось установить apktool, скачиваем отсюда архивы с названиями «apktool-install-linux-xxx» и «apktool-xxx», а затем разархивируем их содержимое в директорию /usr/local/bin

7. Теперь мы можем запускать APKinspector из его директории командой: python startQT.py

Скриншот интерфейса:

Что умеет APKinspector?

При помощи APKinspector исследователь может строить и анализировать:

  • CFG или граф потока управления
  • граф вызовов функций
  • AndroidManifest.xml
  • Java-код, smali-код, байт-код
  • необходимые приложению права

Ну и стандартную начинку реверсируемого приложения вроде списков строк и методов, направления потоков данных и многое другое.