Современные решения

для защиты Windows приложений

и восстановления исходного кода
Автор: Сергей Чубченко. Дата публикации: 12.04.2016

Новый виток декомпиляции .NET и VB6 Native Code с VB Decompiler v10.4


Рад представить новую версию VB Decompiler с просто огромным числом улучшений и нововведений. Главное улучшение, которое коснулось абсолютно всего - это существенная оптимизация, рефакторинг и ускорение работы кода. Начиная с версии 10.4 скорость декомпиляции .NET приложений увеличена в 7 раз, а скорость декомпиляции приложений, собранных в Visual Basic 6.0 с опцией Native Code, увеличена в 5 раз! Помимо этого, работа трассировщика ассемблерного кода (касается версий декомпилятора с поддержкой трассировки) работает настолько плавно, насколько это возможно (скорость обновления каждого шага увеличена в 5 раз). Все это последствия глубокой оптимизации!

А теперь предлагаю поподробнее рассмотреть нововведения, которые улучшают и упрощают изучение кода.



VB Decompiler v10.4

Декомпиляция обработчиков ошибок (SEH) в Native Code Visual Basic 6.0

В отличии от P-Code обработка исключительных ситуаций в Native Code построена через таблицы адресов исключений. Они имеют своеобразный формат, не имеющий схожих черт с C++ и другими компиляторами в машинный код. После глубокого анализа всех вариантов исключений и таблиц адресов была добавлена поддержка всех трех типов исключений VB6:



  • "On Error Resume Next", когда код разбивается на блоки и в случае ошибки переход производится на следующий блок.
  • "On Error GoTo XXX", когда при ошибке переход идет на конкретный адрес. Ввиду того, что таких переходов может быть более одного, формат структур таблиц исключений значительно изменяется и требуется обработка всех форматов таблиц переходов.
  • "On Error GoTo 0", отключение обработчика ошибок.


VB Decompiler - On Error исходный код в VB6

VB Decompiler - On Error декомпиляция

Декомпиляция вызова внутренних процедур в классах Native Code

До версии 10.4 основной упор в разборе COM объектов Native Code приложений шел на GUI элементы форм. Начиная с новой версии, декомпилятор корректно обрабатывает вызовы методов класса, если вызов производится этим же классом. Ввиду особенностей COM архитектуры эти вызовы также производятся через UUID объекта, проверку объектов на созданность и используя виртуальную таблицу методов (VTable). Ранее в таких случаях Вы могли видеть в лучшем случае UnkVCall[X] или ошибочное декодирование объекта. Теперь Native Code классы поддерживаются на очень высоком уровне.



VB Decompiler - Вызова внутренних процедур в классах Visual Basic
VB Decompiler - Декомпиляция вызова внутренних процедур в Native Code классах

Объекты и локальные переменные в Native Code

После глубокого рефакторинга оптимизировано распознавание глобальных переменных объекта (формы или класса) и отличие обращения к ним от обращения к методу данного класса или формы. Существенно улучшен анализатор объектов и цепочек вызовов, что сводит практически к нулю ложные определения объектов и их глобальных переменных. Одновременно с этим добавлена поддержка большого числа редко используемых функций, использующихся при обращении к свойствам и методам объектов (VarLateMemLdRfVar, VarLateMemLdVar, VarLateMemCallLdVar, IStDargCopy, ILdRfDarg, ILdDarg, ILdUI, ILdR8, ILdAd, ILdFPR4).


VB Decompiler - Объекты и локальные переменные в Native Code
Множество улучшений в дизассемблере .NET приложений

Код обработки .NET давно не развивался и до недавних пор существовал практически в том виде, в котором был изначально разработан в 2007 году. В версии 10.4 он был полностью переработан. Исправлено множество редких ошибок, значительно увеличена скорость дизассемблирования. Исправлены различные досадные вещи, причиной которых изначально были ограничения Visual Basic 6.0. Да, декомпилятор .NET изначально разрабатывался на VB6, где просто нет Unsigned integer типов данных, что требовало значительных усилий по обработке структур и кода. Но это изначально было большим преимуществом - VB Decompiler не использует .NET Framework вообще. То есть вполне допустимо использовать VB Decompiler v8.4 и более ранние версии (которые были разработаны в VB6) на Windows 9x и декомпилировать там .NET код. Начиная с версии 9.0, когда декомпилятор был полностью переписан и собран на современном компиляторе - появилась возможность многие вещи в .NET декомпиляторе сделать гораздо быстрее и лучше - что думаю Вы обязательно заметите в новой версии продукта!



VB Decompiler - Множество улучшений в дизассемблере .NET приложений

Поддержка локальных переменных в .NET

Давно назревала эта задача и наконец, она решена, и я рад представить реализацию в новой версии VB Decompiler. Кто хоть раз сталкивался с локальными переменными в .NET знает, что это не просто стандартные типы вроде Integer, Byte, String и так далее. Это еще и многомерные массивы, дженерики, классы, valuetype'ы и многое другое, включая разнообразные модификаторы и массивы классов. Все это теперь поддерживается в VB Decompiler. Более того - теперь поддерживаются обращения к этим переменным через структуру TypeSpec. Ну и как всегда - только VB Decompiler предоставляет информацию о адресе блока локальных переменных внутри файла (равно как и адреса каждой строчки кода).



VB Decompiler - Поддержка локальных переменных в .NET

Значительные улучшения в декомпиляторе форм Visual Basic 6.0

Декомпилятор форм теперь производит корректное объявление внешних ActiveX компонентов, а также декомпилирует встроенный контейнер свойств таких контролов. Это дает возможность декомпилировать иконки и изображения внутри ImageList, свойства таких контролов как TreeView, SSTab и так далее. Заодно были исправленные разные огрехи работы парсера форм, что позволяет практически идеально декомпилировать GUI часть frm и frx файлов, а также UserControl'ов.



VB Decompiler - декомпилятор форм Visual Basic 6.0

VB Decompiler - исходник форм в Visual Basic 6.0

Прочие улучшения

В новой версии изменен "Procedure analyzer and optimizer" (он включается галочкой в главном окне программы). Теперь в Native Code он также фильтрует дублирование вызовов, если использование результата работы функции идет не через временную переменную, а через регистр eax. Также декомпилятор пытается декомпилировать файлы без расширения или с неизвестным расширением, если они перетаскиваютсяиз проводника через drag'n'drop. Эта возможность явно порадует вирусных аналитиков, которые привыкли работать с файлами без расширений exe/dll/ocx. Не забыт и P-Code, в версии 10.4 добавлена поддержка части малоиспользуемых команд для работы с методами и свойствами объектов: SetVarVarFunc, LateIdCallSt, VarLateMemLdRfVar, IStDargCopy, CRefVarAry, ILdDarg. В общем, фактически получаем Major update, имеющий огромное количество преимуществ. При этом есть еще множество вещей, которые в планах развивать и которые получат дальнейшее развитие в новых версиях. Оставайтесь с нами!



Если Ваша подписка на обновления и поддержку активна - вы можете скачать новую версию абсолютно бесплатно. Если же Вы узнали о нас только сейчас - будем рады видеть Вас в числе наших клиентов!



(C) Сергей Чубченко, разработчик VB Decompiler



* Visual Basic are registered trademarks of Microsoft Corporation.





Комментарии

отсутствуют

Добавление комментария


Ваше имя (на форуме):

Ваш пароль (на форуме):

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

Комментарий: