Вы находитесь на странице: 1из 48

Юрий Крутилин

5 августа 2015 г

Android Reverse-Engineering
DEX (Dalvik Executable)
Инструментарий для реверс-инжиниринга Android-приложений.
Немного о DEX (Dalvik Executable) формате
whoami

▪ Юрий Крутилин
▪ y.krutilin@gmail.com
▪ skype: krutilin
▪ https://ru.linkedin.com/in/krutilin
▪ http://habrahabr.ru/users/seod/
whoami

▪ DevExtreme (Cross-platform HTML 5/JS tools from DevExpress)


▪ QA и игры для детей.
▪ GetDev (getdev.net Юзер группа разработчиков в Туле)
▪ Особенности WebView
▪ Android
▪ other
План
▪ Способы получения apk
▪ Структура Android приложений
▪ Dex (Dalvik Executable)
▪ обзор формата
▪ парсеры
▪ Инструментарий для реверс инжиниринга Android приложений
▪ Декомпиляция ресурсов
▪ Утилиты для работы с Dex
▪ Зачем? Как применить?
▪ Заключение
▪ Вопросы
Способы получения apk

▪ Использование файл менеджера,


например Total Commander
Способы получения apk

▪ ADB (Android Debug Bridge)


> adb shell pm list packages
> adb shell pm path com.example.someapp
“package:/data/app/com.example.someapp-1/base.apk”
> adb pull <remote> <local>

http://developer.android.com/tools/help/adb.html
Способы получения apk

▪ Скачать из магазина Google Play


http://apps.evozi.com/apk-downloader/

использовать обертку для Google Play API


Структура Android приложений

>cordova create hello com.


example.hello HelloWorld

>cd hello

>cordova platform add android


Структура Android приложений

>cordova build
Структура Android приложений

apk to zip
Структура Android приложений

assets не компилируемые
ресурсы.
Доступ из приложения через
файловую систему.
Структура Android приложений

res компилируемые ресурсы.


resources.arsc таблица ресусов
по индексам.
Структура Android приложений

META-INF
AndroidManifest.xml
resources.arsc
classes.dex
Dalvik

Dalvik opcodes:

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Dalvik
Dalvik
Dalvik

Dalvik opcodes:

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Dalvik
Структура Dex файлов

http://source.android.com/devices/tech/dalvik/dex-format.html
Dex особенности
▪ выполняется на регистровой виртуальной машине
▪ кодировка LEB128
Dex особенности

LEB128 (Little Endian Base 128)


Dex особенности
▪ выполняется на регистровой виртуальной машине
▪ кодировка LEB128
▪ относительная адресация
Dex особенности
▪ Относительная адресация (в отличие от iOS)
▪ Большинство DEX объектов представлены по индексу в списке
▪ Закодированные объекты в списке вычисляют свой индекс от первого
объекта + смещение до текущего объекта
▪ Использование такой дельты, дает меньшие числа и меньший размер в
байтах при использовании кодировки LEB128
Например:
В стурктуре class_data_item поля static_fields, instance_fields, direct_methods
и virtual_methods представлены при помощи смещений.
Dex особенности
▪ Пример относительной адресации
Dex особенности
▪ выполняется на регистровой виртуальной машине
▪ кодировка LEB128
▪ относительная адресация
▪ упаковка всех классов в один файл (в отличие от упаковки каждого класса в
отдельный файл в .class формате java)
Dex особенности
▪ выполняется на регистровой виртуальной машине
▪ кодировка LEB128
▪ относительная адресация
▪ упаковка всех классов в один файл (в отличие от упаковки каждого класса в
отдельный файл в .class формате java)
▪ Использование MUTF-8
Dex особенности

▪ MUTF-8
▪ Используется для кодирования строк в DEX формате
▪ Символы могут быть длинной в 1, 2 или 3 байта
▪ null байт '\u0000' закодирован в двух байтах в отличие от UTF-8 и всегда
является концом строки
▪ Дополнительные символы кодируются в виде пар char символов
(Supplementary characters).
Dex ограничения

Ограничения связаны с 32х битностью.

«65К методов хватит всем» или как бороться с лимитом DEX методов в Android
http://habrahabr.ru/post/230665/
https://medium.com/@rotxed/dex-skys-the-limit-no-65k-methods-is-
28e6cb40cf71
Dex парсеры

▪ Для быстрого погружения можно использовать следующие реализации


▪ 010 Editor + dex template http://www.sweetscape.com/010editor/
▪ Dexer C# https://github.com/sailro/Dexer
Dex парсеры
Dex парсеры
Dex парсеры
Dex парсеры
Dex парсеры
Dex парсеры
Dex парсеры
Инструментарий
Ресурсы
▪ AndroidManifest.xml
▪ assets
▪ res + resources.arsc
Код
▪ Dex -> Smali
▪ Dex -> Java

Подпись
▪ META-INF
Инструментарий
aapt dump xmltree android-debug.apk AndroidManifest.xml>AndroidManifest.xml
Инструментарий

▪ AXMLPrinter https://code.google.com/p/android4me/
▪ Apktool - комплексный набор тулзов для разбора Android приложений
http://ibotpeaches.github.io/Apktool/
▪ Androidguard - набор тулзов на питоне для разботы с Android приложениями
https://github.com/androguard/androguard
▪ ApkAnalyser - набор тулзов для разбора Android приложений от Sony
https://github.com/sonyxperiadev/ApkAnalyser
Инструментарий

▪ Apktool - комплексный набор тулзов для разбора Android приложений


▪ Кроссплатформенное решение
▪ Реализована распаковка и упаковки приложения и ресурсов
▪ Реализован разбор Dalvik байткода в Smali
▪ Регулярно выходят обновления

http://ibotpeaches.github.io/Apktool/
Инструментарий
▪ ApkAnalyser - набор тулзов для разбора Android приложений от Sony
Инструментарий
Инструментарий
Сырцы (Smali, Jar, Java)
▪ smali/baksmali https://code.google.com/p/smali/
▪ dexdump
▪ Dex2Jar https://github.com/pxb1988/dex2jar
▪ Jd-gui http://jd.benow.ca/
▪ JAD http://varaneckas.com/jad/
▪ Androidguard’s DAD https://github.com/androguard/androguard
▪ JEB https://www.pnfsoftware.com/
Инструментарий
▪ > java -jar baksmali-2.0.3.jar classes.dex
Инструментарий

▪ Подпись
▪ Для подписывания можно использовать keytool и jarsigner которые идет в
составе Java SDK
▪ Либо своя реализация, например, на C#
Зачем? Как применить?

▪ Обезвреживание зловредных приложений и вирусов


▪ Создание зловредных приложений и вирусов
▪ Общий анализ приложений
▪ Упаковка dex в dex
▪ Упаковка приложения в картинку
▪ Потоковая обработка приложений
Заключение
▪ Люди
▪ Rodrigo Chiossi https://twitter.com/rchiossi Intel (active)
▪ Sebastien Lebreton http://sebastien.lebreton.free.fr/blog/ MS (2013)
▪ Axelle Apvrille https://twitter.com/cryptax Fortinet (active)
▪ Другое
▪ http://source.android.com/devices/tech/dalvik/dex-format.html

▪ https://www.fortiguard.com/

▪ https://markfaction.wordpress.com/2012/07/15/stack-based-vs-register-based-virtual-machine-

architecture-and-the-dalvik-vm/
Вопросы

▪ Юрий Крутилин
▪ y.krutilin@gmail.com
▪ skype: krutilin
▪ https://ru.linkedin.com/in/krutilin
▪ http://habrahabr.ru/users/seod/

Вам также может понравиться