Ссылка на Dalvik или виртуальные машины Java? - PullRequest
11 голосов
/ 29 января 2011

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

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

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

Ответы [ 2 ]

9 голосов
/ 30 января 2011

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

в формате байт-кода (или dalvik-bytecode.html в проекте dalvik)это, вероятно, тот, который вас больше всего заинтересует. .Dex Format (dex-format.html) также полезен, как и Форматы инструкций (инструкция-формат.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

3 голосов
/ 30 января 2011

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

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

Если вы работаете с обратным инжинирингом макетов, вам также понадобится конвертер двоичных XML-файлов в XML. Есть еще один вопрос переполнения стека, в котором упоминается несколько инструментов для этого: Парсинг versionCode из файлов Android APK

...