Ссылка на виртуальные машины Dalvik или Java?

В настоящее время я изучаю байт-код Dalvik, но, поскольку мне не хватает фона компилятора, мне сложно понять дизайн. Я уверен, что никто не написал книгу о Dalvik (или я мог ошибаться), может ли кто-нибудь предложить мне ссылку на виртуальную машину Java, содержащую некоторые практические примеры? В частности, меня интересуют:

  • Понять, как интерпретировать сгенерированный байт-код
  • Использование спецификаций VM (Dalvik или Java) для декомпиляции байтового кода в промежуточное представление и последующего его компиляции

Короче говоря, возможно, что я ищу, это изучить обратный инженерный байтовый код, чтобы я мог анализировать его на наличие уязвимостей. Любые предложения?

Ответ 1

Для справочного материала ничто не сравнится с документами dalvik. Вы можете найти их либо в подпроекте dalvik в AOSP, либо теперь доступны в Интернете по адресу http://s.android.com/tech/dalvik/index.html

Формат байтода (или dalvik-bytecode.html в проекте dalvik), вероятно, тот, который вас больше всего интересует. . Dex Format (dex-format.html) также полезен, как и Форматы инструкций (instruction-formats.html)

Для получения более общей информации о байт-коде, http://code.google.com/p/smali/wiki/Registers и http://code.google.com/p/smali/wiki/TypesMethodsAndFields

Вам обязательно понадобятся несколько инструментов. Я, естественно, довольно неравномерен для smali/baksmali, который является единственной доступной ассемблерной/дизассемблерной парой. Существует также дизассемблер, называемый dedexer (но не ассемблер), и dexdump, который поставляется с кодовой базой AOSP и предоставляет дамп низкого уровня файлов dex - не только байт-код, но и все структуры dex (baksmali имеет аналогичный вывод с опцией -D).

Вас также может заинтересовать apktool, который использует smali/baksmali, но также имеет возможность отменить "скомпилированный" xml файлов в apk.

Есть несколько инструментов, которые конвертируют байт-код dalvik обратно в java-байт-код, хотя я не думаю, что они на 100% еще - undx и dex2jar

Ответ 2

Есть уже инструменты для обратного инжиниринга .dex файлов для генерации удобочитаемых представлений байтовых кодов. Одним из самых популярных является baksmali, который вы можете найти здесь: http://code.google.com/p/smali/.

Описание самих байтовых кодов можно легко найти по Googling. Вот третий результат: http://www.netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html.

Если вы используете обратные инженерные макеты, вам понадобится конвертер binary-xml-to-xml. Еще один вопрос, в котором упоминаются несколько инструментов для этого: Parse versionCode из файлов apk android