VB Decompiler v9.7: Трассировка и значительные улучшения Native Code

После нескольких месяцев кропотливой работы мы рады представить новую, значительно переработанную версию VB Decompiler. На этот раз изменения коснулись главного — декомпиляции Native Code. Этого ждали многие и вот, наконец, после значительного рефакторинга кода появилась возможность значительно переработать и улучшить эмулятор. Это еще не идеальный вариант, но логика работы эмулятора Native Code была существенно улучшена. Немного теории. Visual Basic позволяет программисту менять настройки компилятора Native Code, а именно включать оптимизацию для маленького кода, оптимизацию для быстрого кода и отключать оптимизацию совсем. Во всех трех случаях в созданном EXE файле мы получаем совершенно различные блоки сгенерированного кода. Начиная с версии 9.7, VB Decompiler одинаково хорошо эмулирует все три типа оптимизации при создании частично декомпилированного кода. Да, это действительно работает! Теперь кратко о том, что было сделано помимо переработки и улучшения алгоритмов эмулятора.

vb_decompiler_native_code_decompilation_1

 

Поддержка почти всех API используемых в MSVBVM50.DLL и MSVBVM60.DLL

 

Улучшения эмулятора были бы не так заметны, если бы VB Decompiler поддерживал только часть API функций MSVBVM60.DLL, а для остальных выводил неопознанные вызовы без параметров. Поэтому в новой версии декомпилятора добавлено огромное количество новых сигнатур для корректной декомпиляции практически всех имеющихся API функций в runtime библиотеке MSVBVM60.DLL. Более подробный перечень как всегда доступен в списке изменений whatsnew.txt.

vb_decompiler_native_code_decompilation_2

 

Автоматический анализатор методов и свойств внешних ActiveX

 

Эту функцию также ждали очень долго. И чтобы ее реализовать также потребовалось немало усилий. Теперь, когда декомпилятор находит в коде обращение по CLSID (Class ID) и IID (Interface ID) к тому или иному внешнему классу, он попытается найти путь к DLL, в которой размещен данный класс. Далее эта DLL анализируется на наличие TypeLib информации, ищется соответствующий IID, затем по смещению в VTable (таблица виртуальных методов и свойств) или по DispID (Dispatch ID) определяется метод или свойство, разбираются параметры, и создается сигнатура для опознавания VB Decompiler‘ом данного вызова в коде. Все что для этого нужно — чтобы вызываемые ActiveX компоненты (DLL, OCX) были зарегистрированы в системе. Поэтому если речь идет об анализе декомпилятором файла, компоненты которого не установлены в системе, то распознавание подобных вызовов будет невозможно, так как декомпилятор не сможет найти путь к библиотеке по указанному CLSID.

vb_decompiler_native_code_decompilation_3

 

Работа с базами данных VDD

 

VB Decompiler начиная с первых версий умеет сохранять свою работу в упакованную базу данных (VDD файл)
а также открывать такие базы. Но до недавнего времени для этого нужно было заходить в меню File, что
несколько неудобно. Теперь базы данных можно открывать как и EXE/DLL/OCX файлы через командную строку
либо просто перетащив через Drag’n’Drop на окно декомпилятора. Попробуйте, это очень удобно!

Поддержка Wine

 

Самый безопасный способ анализировать Windows приложения — использовать для этого операционную систему Linux. Мы знаем об этом и VB Decompiler теперь поддерживает Wine (виртуальную среду для запуска Windows программ под Linux). Вы можете установить и использовать VB Decompiler на большинстве операционных систем семейства Linux (Ubuntu, Debian, etc.).

vb_decompiler_linux_wine

 

Копирование декомпилированного кода в окно дизассемблера

 

Тем, кто анализирует файлы в антивирусных лабораториях, наверняка хотелось изучая ассемблерный код во вкладке Disassembler,
видеть, во что он превращается после декомпиляции, не отвлекаясь на постоянное сравнение с окном Decompiler. Теперь такое возможно. Просто щелкните правой кнопкой в окне с декомпилированным кодом и выберите Copy to disassembler.

vb_decompiler_copy_decompiled_code_to_disassembler

 

vb_decompiler_copy_decompiled_code_to_disassembler_2

 

Трассировка исследуемого кода

 

Напоследок как всегда осталось представить самое вкусное! Значительная переработка эмулятора дала возможность реализовать гораздо более продвинутые возможности для исследования Native Code. Теперь доступна частичная отладка Native Code программ на встроенном эмуляторе без запуска программы на реальном процессоре!

 

vb_decompiler_native_code_tracer

Трассировка (или если точнее пошаговая эмуляция) представляет из себя возможность приостановить эмуляцию на каждой строке ассемблерного кода с возможностью просмотра регистров процессора и сопроцессора, содержимого стэка и переменных. Ввиду того что код обрабатывается эмулятором и не запускается на реальном процессоре, данная функция будет весьма полезна вирусным аналитикам для исследования вредоносных программ в антивирусных лабораториях.

vb_decompiler_native_code_tracer_1

Теперь пара слов о некоторых нюансах реализации. Трассировка возможна только отдельно взятой функции, при этом эмулятор считает, что на момент обработки этой функции стэк, регистры и переменные пусты. На данный момент хоть и поддерживается огромное число команд процессора Intel x86, все же остаются команды, не поддерживаемые эмулятором, которые просто пропускаются при трассировке. Также трассировщик не отображает изменение флагов. В текущей реализации флаги влияют только на обработку cmp и jcc команд. Заход во внешние функции не поддерживается, при этом корректно обрабатываются как stdcall так и cdecl вызовы с соответствующей корректировкой стэка по sub esp, XX и add esp, XX. Также пока возможна только трассировка вперед, без зацикливания внутри циклов, равно как и без прыжков через команды. В остальном инструмент очень близок к обычной трассировке и весьма удобен в использовании (поддерживается продолжение и отмена трассировки с клавиатуры, без использования мыши).

vb_decompiler_native_code_tracer_2
Данная функция к сожалению не входит в базовые лицензии на VB decompiler. Ввиду огромных затрат времени на реализацию описанных возможностей по отладке кода и крайне малого числа потенциальных пользователей — для использования трассировки потребуется приобретение отдельной лицензии.

Оставьте комментарий