Юрий Крутилин. Инструментарий для реверс-инжиниринга...

Post on 18-Aug-2015

211 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Android Reverse-Engineering

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

Юрий Крутилин5 августа 2015 г

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-INFAndroidManifest.xmlresources.arscclasses.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)

▪ выполняется на регистровой виртуальной машине

▪ кодировка 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 особенности

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/

top related