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

В колонке «Хирургия Android» мы уже успели осветить процесс обратной разработки приложений под данную мобильную систему. В этой же заметке мне хотелось бы продолжить данную тему и познакомить читателя с великолепным программным обеспечением APKinspector, которое предназначено для анализа APK-файлов.
Что такое APKInspector?
APKinspector представляет собой открытый проект, разработчики которого обратили внимание на то, что существующие основные инструменты для реверс-инженеринга приложений под Android не являются особо наглядными. Поэтому авторы проекта резонно посчитали, что если создать удобный графический интерфейс и предусмотреть механизмы, визуализирующие структуру модулей приложения и связанного DEX-кода, то ковырять программы для Android станет намного уютнее. Собственно, графический уровень абстракции, создаваемый «поверх» привычных инструментов – это и есть APKinspector. Ведь под капотом у этой разработки, реализованной на Python, располагаются всё те же утилиты dex2jar и Java Decompiler, а также Androguard – ещё один открытый (также написанный на Python) инструмент для обратной разработки android-приложений. Всё это успешно объединяется APKinspector’ом в единую систему.
Сборка APKInspector
Настала пора поближе познакомиться с данным программным обеспечением. Для этого следует загрузить APKinspector с его официальной странички. В архиве мы можем видеть директории с вышеуказанными инструментами, а также исходные коды на Python в формате .py и скомпилированные модули в формате .pyc. Нам предстоит всё это собрать и запустить.
1. При создании графического интерфейса авторы использовали PyQt, реализующий возможности могучего инструментария разработки Qt для Python. Так что сначала нам нужно загрузить и установить на машину QtSDK (с правами суперпользователя). Скачать инструментарий можно отсюда. Или можно просто воспользоваться любимым менеджером пакетов, набрав в консоли:
sudo apt-get install qt-sdk.
Затем нам необходимо будет отредактировать переменные среды (/etc/profile/), добавив следующие пути:
После этого приведем в жизнь сделанные изменения:
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-код, байт-код
- необходимые приложению права
Ну и стандартную начинку реверсируемого приложения вроде списков строк и методов, направления потоков данных и многое другое.