VB Decompiler 26.6: восстановление XAML, просмотр кода форм и переходы к обработчикам событий
VB Decompiler v26.6 позволяет подробнее исследовать связь между интерфейсом скомпилированного приложения и кодом, который за ним стоит. В этой версии расширена реконструкция ресурсов и шаблонов WPF, добавлены вкладки с восстановленной разметкой XAML и кодом инициализации Windows Forms, улучшены переходы от элементов WPF к обработчикам событий. Обновление также расширяет визуализацию форм VB6 и Windows Forms, повышает надёжность экспорта проектов и сохранения результатов анализа, улучшает отзывчивость при работе с большими приложениями.
Для специалистов по реверс-инжинирингу, аналитиков вредоносного ПО, экспертов по компьютерной криминалистике и разработчиков эти изменения упрощают сопоставление видимых элементов интерфейса, ресурсов и поведения программы. Они полезны как при первоначальном изучении незнакомого приложения, так и при подробном анализе ссылок и машинных инструкций или сохранении результатов исследования для дальнейшей работы.
Ресурсы, стили и вложенные пользовательские элементы WPF
Интерфейс WPF часто зависит от ресурсов, определённых за пределами самого окна. В версии 26.6 расширена реконструкция локальных и объединённых словарей ресурсов, словарей, объявленных как классы, наследования стилей через BasedOn, встроенных стилей, кистей, шрифтов и скалярных значений. Если ресурс отсутствует в ожидаемом месте, декомпилятор может найти его в единственном подходящем словаре той же сборки. О неоднозначных совпадениях выводится сообщение.
В большем числе случаев восстанавливается представление вложенных пользовательских элементов управления и содержимого локальных шаблонов ControlTemplate, в том числе с TemplateBinding Content. Декомпилятор выявляет рекурсивные и неоднозначные определения элементов. У неподдерживаемых элементов сохраняются подписи, а у неподдерживаемых контейнеров — вложенное содержимое: это позволяет лучше понять исходный интерфейс.
Более точная компоновка, текст и векторная графика WPF
При визуализации WPF учитывается больше правил компоновки Grid, StackPanel, WrapPanel и DockPanel: автоматические и пропорциональные размеры, внешние и внутренние отступы, выравнивание, состояния Hidden и Collapsed, направление закрепления по умолчанию и LastChildFill. Точнее рассчитываются размеры и положение небольших пользовательских элементов, заголовков групп, вкладок и вложенных фреймов.
Улучшено восстановление форматированного текста из элементов Run и Span. Вместо длинных выражений привязки при визуализации выводятся краткие имена свойств, чтобы текст привязок не искажал компоновку. Упрощённые представления DataGrid и Xceed DataGridControl используют заголовки и ширину столбцов, сохранённые в приложении.
При визуализации векторной графики теперь поддерживаются двоичные данные BAML для Path.Data, прямоугольники, эллипсы и линейные градиенты, в том числе внутри масштабируемого содержимого Viewbox. Улучшены сохранение пропорций изображений, обрезка по границам, наложение фона и обработка прозрачности. Фоновые изображения видны сквозь вложенные прозрачные контейнеры, а подписи, рамки и заголовки столбцов остаются на переднем плане.
Группы ленты Ribbon располагаются горизонтально, с более читаемыми подписями и правильными пропорциями значков. При переключении вкладок больше не накапливаются фоновые изображения и значки предыдущих страниц. Невизуальные данные, например всплывающие подсказки и объекты поведения, больше не отображаются как перекрывающиеся элементы управления. В списке форм используются краткие имена классов WPF с исходным регистром символов, а узел приложения больше не дублирует стартовое окно.
Восстановленная разметка XAML и код инициализации Windows Forms
Новые вкладки кода формы позволяют изучать восстановленную разметку XAML для WPF и код инициализации Windows Forms рядом с визуальным представлением. Подсветка синтаксиса и вхождений выбранного слова, выделение, копирование и поиск помогают подробно исследовать объявления и настройки элементов управления. Блоки XML в разметке WPF можно сворачивать.
Ctrl+F открывает поиск с выделенным текстом, а F3 находит следующее совпадение. При навигации сохраняются активная вкладка с кодом формы и положение курсора. Смена темы обновляет цвета редактора, в том числе подсветку совпадений, свёрнутых блоков и выделения, сохраняя нужный текст и выделенный фрагмент.
При восстановлении XAML расширена обработка типов-владельцев свойств, вложенных и присоединённых свойств, расширений разметки, отложенных ресурсов и пользовательских сериализаторов. Точнее обрабатываются объявления пространств имён, пользовательские элементы, шаблоны, стили, ссылки на ресурсы и коллекции точек. Из восстановленной разметки удаляются повторяющиеся атрибуты, например AutomationProperties.Name.
Переходы от элементов WPF к обработчикам событий
В версии 26.6 улучшено восстановление связей с обработчиками событий WPF по данным XAML/BAML, сгенерированному коду подключения и декомпилированным подпискам на события. Поддерживаются маршрутизируемые команды и элементы внутри шаблонов. Щелчок по подписи или значку элемента ведёт к его обработчику: связь не теряется из-за того, что щелчок пришёлся на вложенный элемент визуального представления.
При переходах сохраняются точные имена методов и регистр символов. Если целевой обработчик нельзя определить однозначно, переход не назначается. Из свойств формы удаляются повторяющиеся записи событий. Переходы «Назад», «Вперёд» и по Escape между формами, обработчиками, кодом и объявлениями лучше сохраняют контекст исследования: при возвращении к неизменённой форме восстанавливаются выбранный элемент, вкладка и положение прокрутки.
Расширенная визуализация Windows Forms и сторонних компонентов
Реконструкция Windows Forms улучшена как для старых приложений .NET, так и для более сложных интерфейсов. Точнее учитываются порядок элементов и обхода по Tab, вложенность, видимость, шрифты, цвета, поля пароля и поля только для чтения, сохранённые даты и содержимое списков. Для компонентов DevExpress улучшены выравнивание изображений, настройки внешнего вида и содержимое выпадающих списков.
Поиск изображений охватывает больше общих ресурсов, пользовательских классов ресурсов и ссылок Visual Basic My.Resources, в том числе имена с пробелами, знаками пунктуации или цифрой в начале. Неоднозначные или отсутствующие ссылки больше не приводят к подстановке изображений из посторонних ресурсов.
Улучшены растягивание, центрирование и пропорциональное масштабирование изображений PictureBox, мозаичный фон, прозрачные надписи и порядок наложения элементов. Исправлены ошибки загрузки JPEG и артефакты масштабирования GIF, точнее сохраняется частичная прозрачность PNG и GIF. Неподдерживаемые элементы сохраняют подписи, а небольшие отдельно расположенные элементы и ползунки — заданные размеры, ориентацию и диапазон значений.
Более подробная реконструкция форм и элементов VB6
При визуализации VB6 используется больше сохранённых данных вкладок, панелей инструментов, строк состояния и форматированного содержимого RichTextBox. Точнее восстанавливаются подписи вкладок, выбранная вкладка, изображения и содержимое страниц, включая многострочное расположение заголовков SSTab. Невизуальные компоненты CommonDialog больше не перекрывают форму.
В представлениях TreeView, ListView и ImageCombo используется больше сведений о внешнем виде и связанных изображениях. Для списков сохраняются подписи, ширина и выравнивание столбцов, значки, режимы выделения и скрытые столбцы. Панель свойств показывает сохранённые настройки элементов и ссылки на списки изображений. При выборе кнопки панели инструментов отображаются её свойства и доступные события.
Расширена поддержка панелей, рамок, флажков, переключателей и кнопок Sheridan 3D: учитываются подписи, шрифты, цвета, состояния и изображения кнопок. Для Microsoft Grid восстанавливаются размеры таблицы, фиксированные строки и столбцы, а также оформление. Дополнительные исправления касаются заполнения и ориентации индикаторов выполнения, коротких подписей панелей, изображений панелей инструментов, шрифтов и ширины полей строки состояния.
Свойства формы корректно обновляются при её загрузке и смене выбранного элемента. Исправлены аварийные завершения при просмотре свойств и закрытии визуального представления. Подписи меню остаются читаемыми даже при большом размере шрифта исходной формы.
Улучшенный экспорт проектов WPF и .NET
При экспорте проекта WPF теперь сохраняются восстановленная разметка XAML и отдельные файлы ресурсов наряду с исходными скомпилированными ресурсами. В сгенерированные файлы C# записываются восстановленные объявления элементов, подключения обработчиков событий и код запуска. Если подключение обработчика восстановить не удалось, уже полученный код сохраняется для анализа.
Точнее определяются целевая версия .NET, архитектура, тип приложения, ссылки на сборки и сведения о продукте. В предупреждениях отмечаются параметры, определённые эвристически. При экспорте ресурсов и значков сохраняются исходные имена ресурсов; о повреждённых или недоступных элементах выводятся сообщения. Предупреждения в восстановленном XAML стали понятнее, а диагностические комментарии записываются на английском языке.
В экспортируемый проект включаются только файлы, успешно сохранённые при текущем экспорте. При повторном экспорте игнорируются оставшиеся от предыдущих операций файлы, а ошибка финального сохранения не повреждает прежний файл проекта. Точнее обрабатываются классы C#, пространства имён, перегрузки методов и имена файлов ресурсов; сохраняются методы, следующие за инициализацией формы. Специальные символы XML в метаданных проекта экранируются без изменения исходных названий продукта.
Экспортированные XAML, C# и структура проекта служат материалом для анализа и дальнейшей ручной доработки. Перед использованием результата в IDE необходимо проверить и вручную исправить неточности восстановленного кода, проверить параметры, определённые эвристически, и разобраться с неразрешёнными связями.
Большие приложения, потребление памяти и отмена операций
Снято прежнее фиксированное ограничение на количество классов. Улучшена поддержка сборок .NET с большими таблицами типов, полей, методов и строк; большие инициализаторы массивов обрабатываются быстрее и с меньшим потреблением памяти. Расширены дизассемблирование машинного кода, распознавание строк и импортируемых функций, в том числе для 64-разрядных инструкций и неуправляемого кода в приложениях .NET.
Снижено потребление памяти при анализе, переключении проектов и работе HEX-редактора с большими файлами. В HEX-редакторе сохранены редактирование, отмена и повтор действий, сохранение файла. Улучшена обработка повреждённых или усечённых исполняемых файлов и ресурсов, включая некорректные строки .NET; устранена утечка памяти при ошибке сохранения состояния анализа.
Длительное открытие файла, экспорт проекта, листинга, базы VDD и списка процедур можно отменить. Если отмена запрошена во время полной декомпиляции, дальнейшая обработка процедур прекращается. При отмене дополнительного анализа прототипов разобранный файл остаётся открытым, а полученные результаты сохраняются; незавершённые аналитические отчёты не формируются, настройки декодирования восстанавливаются.
Отмена или ошибка сохранения в один файл не повреждает прежний файл. При отмене экспорта в несколько файлов уже сохранённые файлы остаются доступными. После неудачной обфускации машинного кода восстанавливаются исходный файл и состояние проекта либо выводится путь к резервной копии для восстановления.
Базы VDD: сохранение результатов и продолжение анализа
В больших проектах базы VDD сохраняют больше восстановленного кода, форм, ресурсов и переименованных переменных. Уже декомпилированные методы .NET можно открыть без повторной декомпиляции, а сохранённый код остаётся доступным даже при отсутствии исходного исполняемого файла. Поддержка старых форматов баз сохранена.
Повреждённые и неподдерживаемые базы выявляются до замены открытого проекта. Неполные сохранённые данные больше не могут перезаписать более полную базу. При чтении старых баз точнее сохраняются имена и ссылки на строки, в том числе текст на традиционном китайском. При открытии базы очищается устаревшее содержимое редактора, а сведения о базе отображаются без дополнительного диалога подтверждения.
После загрузки сохранённого анализа корректно восстанавливается список ссылок на строки (String References). Переход по ссылке выполняет поиск в активном представлении кода, раскрывает свёрнутые блоки с совпадениями и сохраняет позицию поиска в списке. В Lite листинги Native Code и P-Code остаются видимыми после полного прохода или открытия сохранённого кода. В режиме быстрой декомпиляции снова выводится предупреждение, если полный список ссылок на строки недоступен.
Навигация, поиск и SDK плагинов
При переключении между декомпилятором и дизассемблером синхронизируются адреса. Если для инструкции нет отображаемого соответствия в восстановленном коде, переход выполняется к ближайшему показанному адресу. Полные 64-разрядные адреса сохраняются в HEX-редакторе, представлениях кода, списках ссылок и экспортируемых списках процедур TXT, MAP, HIEW и IDC. Скрипты IDC сохраняют уже существующие в IDA инструкции и данные.
Команды поиска учитывают свёрнутый код и раскрывают блоки с совпадениями. При поиске, копировании и отправке кода в AI Helper сохраняется текст из блоков с большой глубиной вложенности. Улучшены поиск процедур и ссылок, переименование переменных и переходы из результатов поиска. Пустой результат или ошибка поиска больше не оставляет на экране устаревшие результаты.
В общий SDK плагинов добавлены команды для определения отображаемой формы или процедуры, установки и снятия отметок функций, поиска функций по виртуальному адресу, в том числе 64-разрядному. Чтение кода процедуры через плагин больше не меняет активный редактор, процедуру и позицию в HEX-редакторе. Улучшены переименование форм и процедур VB6 и обработка ошибок нативных и Python-плагинов. Подробности разработки расширений приведены в справочнике SDK плагинов.
Повседневная работа и обновлённые языки интерфейса
VB Decompiler теперь распознаёт исполняемые файлы запуска приложений .NET и автоматически открывает связанную управляемую DLL, если она доступна. Повышена надёжность обработки Unicode в списке недавних файлов, ярлыках Windows и путях перетаскиваемых файлов, в том числе при работе с недавними файлами в Wine и на Steam Deck. В HEX-редакторе и представлении кода открывается один и тот же выбранный файл.
Другие улучшения касаются диагностики запуска, отсутствующих настроек или баз сигнатур, вызова контекстных меню дерева с клавиатуры, диалогов выбора папок на нескольких мониторах и восстановления фокуса после закрытия окон прогресса. Команды контекстного меню дерева применяются к элементу под указателем мыши. Escape сначала закрывает открытый выпадающий список и только затем позволяет выйти из визуального представления формы.
В AI Helper улучшены обработка адреса сервера и отмена запросов; при закрытии приложение дожидается безопасного завершения активного запроса. Если выбранный перевод справки недоступен, открывается английский PDF или сайт. Если локальный PDF или CHM не удалось открыть, используется соответствующий раздел онлайн-справки.
Обновлены локализации на следующих языках: арабский, португальский (Бразилия), упрощённый и традиционный китайский, чешский, датский, нидерландский, английский, французский, немецкий, греческий, иврит, индонезийский, итальянский, японский, курдский (сорани), персидский, польский, португальский, русский, словацкий, испанский, турецкий и украинский. Дополнены отсутствовавшие переводы, переведены оставшиеся сообщения и исправлен текст, не помещавшийся на кнопках.
Версия 26.6 доступна для загрузки
VB Decompiler v26.6 доступен в разделе загрузки. Возможности бесплатной Lite описаны на странице Lite, а средства анализа и декомпиляции платных редакций — в сравнительной таблице лицензий. Все изменения перечислены в полном списке изменений версии.
© Чубченко Сергей Георгиевич, ведущий разработчик VB Decompiler