После нескольких месяцев кропотливой работы мы рады представить новую, значительно переработанную версию VB Decompiler. На этот раз изменения коснулись главного — декомпиляции Native Code. Этого ждали многие и вот, наконец, после значительного рефакторинга кода появилась возможность значительно переработать и улучшить эмулятор. Это еще не идеальный вариант, но логика работы эмулятора Native Code была существенно улучшена. Немного теории. Visual Basic позволяет программисту менять настройки компилятора Native Code, а именно включать оптимизацию для маленького кода, оптимизацию для быстрого кода и отключать оптимизацию совсем. Во всех трех случаях в созданном EXE файле мы получаем совершенно различные блоки сгенерированного кода. Начиная с версии 9.7, VB Decompiler одинаково хорошо эмулирует все три типа оптимизации при создании частично декомпилированного кода. Да, это действительно работает! Теперь кратко о том, что было сделано помимо переработки и улучшения алгоритмов эмулятора.
Поддержка почти всех API используемых в MSVBVM50.DLL и MSVBVM60.DLL
Улучшения эмулятора были бы не так заметны, если бы VB Decompiler поддерживал только часть API функций MSVBVM60.DLL, а для остальных выводил неопознанные вызовы без параметров. Поэтому в новой версии декомпилятора добавлено огромное количество новых сигнатур для корректной декомпиляции практически всех имеющихся API функций в runtime библиотеке MSVBVM60.DLL. Более подробный перечень как всегда доступен в списке изменений whatsnew.txt.
Автоматический анализатор методов и свойств внешних ActiveX
Эту функцию также ждали очень долго. И чтобы ее реализовать также потребовалось немало усилий. Теперь, когда декомпилятор находит в коде обращение по CLSID (Class ID) и IID (Interface ID) к тому или иному внешнему классу, он попытается найти путь к DLL, в которой размещен данный класс. Далее эта DLL анализируется на наличие TypeLib информации, ищется соответствующий IID, затем по смещению в VTable (таблица виртуальных методов и свойств) или по DispID (Dispatch ID) определяется метод или свойство, разбираются параметры, и создается сигнатура для опознавания VB Decompiler‘ом данного вызова в коде. Все что для этого нужно — чтобы вызываемые ActiveX компоненты (DLL, OCX) были зарегистрированы в системе. Поэтому если речь идет об анализе декомпилятором файла, компоненты которого не установлены в системе, то распознавание подобных вызовов будет невозможно, так как декомпилятор не сможет найти путь к библиотеке по указанному CLSID.
Работа с базами данных 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.).
Копирование декомпилированного кода в окно дизассемблера
Тем, кто анализирует файлы в антивирусных лабораториях, наверняка хотелось изучая ассемблерный код во вкладке Disassembler,
видеть, во что он превращается после декомпиляции, не отвлекаясь на постоянное сравнение с окном Decompiler. Теперь такое возможно. Просто щелкните правой кнопкой в окне с декомпилированным кодом и выберите Copy to disassembler.
Трассировка исследуемого кода
Напоследок как всегда осталось представить самое вкусное! Значительная переработка эмулятора дала возможность реализовать гораздо более продвинутые возможности для исследования Native Code. Теперь доступна частичная отладка Native Code программ на встроенном эмуляторе без запуска программы на реальном процессоре!
Трассировка (или если точнее пошаговая эмуляция) представляет из себя возможность приостановить эмуляцию на каждой строке ассемблерного кода с возможностью просмотра регистров процессора и сопроцессора, содержимого стэка и переменных. Ввиду того что код обрабатывается эмулятором и не запускается на реальном процессоре, данная функция будет весьма полезна вирусным аналитикам для исследования вредоносных программ в антивирусных лабораториях.
Теперь пара слов о некоторых нюансах реализации. Трассировка возможна только отдельно взятой функции, при этом эмулятор считает, что на момент обработки этой функции стэк, регистры и переменные пусты. На данный момент хоть и поддерживается огромное число команд процессора Intel x86, все же остаются команды, не поддерживаемые эмулятором, которые просто пропускаются при трассировке. Также трассировщик не отображает изменение флагов. В текущей реализации флаги влияют только на обработку cmp и jcc команд. Заход во внешние функции не поддерживается, при этом корректно обрабатываются как stdcall так и cdecl вызовы с соответствующей корректировкой стэка по sub esp, XX и add esp, XX. Также пока возможна только трассировка вперед, без зацикливания внутри циклов, равно как и без прыжков через команды. В остальном инструмент очень близок к обычной трассировке и весьма удобен в использовании (поддерживается продолжение и отмена трассировки с клавиатуры, без использования мыши).
Данная функция к сожалению не входит в базовые лицензии на VB decompiler. Ввиду огромных затрат времени на реализацию описанных возможностей по отладке кода и крайне малого числа потенциальных пользователей — для использования трассировки потребуется приобретение отдельной лицензии.