В колонке «Хирургия 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-код, байт-код
- необходимые приложению права
Ну и стандартную начинку реверсируемого приложения вроде списков строк и методов, направления потоков данных и многое другое.