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

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

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

Новая эра декомпиляции Visual Basic используя передовые технологии VB Decompiler


Спустя почти полгода кропотливой работы я рад представить Вам VB Decompiler v9.0 ! Почему же именно 9.0 а не 8.5? Причин тому несколько. Главная причина в том, что проект был полностью переписан с Visual Basic 6.0 на Delphi XE2. Переписан практически с нуля. Несмотря на то, что многие вещи увы невозможно было портировать как есть - я сделал многое для того, чтобы все функции декомпилятора работали точно так же как и в предыдущей версии или лучше.



VB Decompiler v9.0

Главное чего удалось достичь - полная обратная совместимость! Вы можете скопировать новый EXE файл декомпилятора в папку со старой версей и он будет корректно работать! Все старые базы данных, плагины, база знаний и другие элементы используемые в старых версиях декомпилятора полностью поддерживаются и в новой версии. Поддерживаются несмотря на то, что пришлось писать сложные классы обработки VB структур и VB строк переменной длины в этих структурах чтобы суметь считать и распарсить базы данных, которые изначально были оптимизированы под Visual Basic. Проделано много усилий, но конечная цель, обратная совместимость, достигнута.

Еще одним довольно важным изменением является полная интеграция дизассемблера в проект. Теперь эмулятор и дизассемблер являются частью одного класса, что позволяет значительно ускорить работу эмуляции Native Code в целом. Кстати о скорости - она значительно возросла по сравнению с предыдущими версиями декомпилятора. Тому несколько причин: код декомпилятора значительно оптимизирован, проект скомпилирован в полноценный машинный код, имеется отдельная версия для 64 битной версии Windows. Улучшений масса и на некоторых моментах оптимизации есть смысл остановиться поподробнее.

В версии 9.0 был использован новый TreeView контрол, который в отличии от старого не замедляет свою работу при добавлении большого числа элементов. Это легко заметить при декомпиляции массивных сложных проектов, содержащих огромное количество методов и функций. Если раньше при пролистывании списка процедур в таких файлах шло замедление работы контрола, а при щелчке по элементам происходили подвисания на несколько секунд - теперь это в прошлом! Все работает предельно быстро.

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

Значительно улучшена эмуляция машинного Native Code. Обработка FPU команд сильно переработана, что наглядно отображено в примере ниже. Исходный код проекта:



Const Test = "Test case2" Private Sub Form_Load() Dim d As Double, e As Double a = &H100 b = &H200 c = Tan(Sin(a) * Cos(b)) MsgBox c, 64, "Test case" d = 123456.123456 e = Log(c / d + 7654.123) MsgBox e, 64, Test End Sub


В версии 8.4 этот код декомпилировался так:



VB Decompiler v8.4 FPU эмулятор

А вот как этот же код декомпилируется в VB Decompiler 9.0 Pro:



VB Decompiler v9.0 FPU эмулятор

Теперь небольшой пример обращения к свойствам класса. Это очередное достижение VB Decompiler 9.0! Обработка обращений к свойствам и методам классов наконец корректно реализована и протестирована на множестве проектов. Данное улучшение пока коснулось только проектов скомпилированных в P-Code, но это уже огромный рывок в декомпиляции Visual Basic программ.

Исходный пример выглядел так:



Private Sub Form_Load() Dim a As cAttribute Set a = New cAttribute a.ID = "Test 2" a.Description = "Test 1" MsgBox "12345" MsgBox a.Description, vbInformation, a.ID End Sub


Соответственно код cAttribute:



Option Explicit Private m_ID As Byte Private m_Description As String Public Property Let Description(ByVal vData As String) m_Description = vData End Property Public Property Get Description() As String Description = m_Description End Property Public Property Let ID(ByVal vData As Byte) m_ID = vData End Property Public Property Get ID() As Byte ID = m_ID End Property


А теперь сравним декомпилированный код. Для начала как было в VB Decompiler версии 8.4:



VB Decompiler 8.4 классы

А теперь смотрим как этот же участок кода обрабатывается в версии 9.0:



VB Decompiler 9.0 классы

Помимо вышеописанных улучшений добавлены новые функции по обработке блоков условий, циклов, вложенных друг в друга свойств объектов. Корректно генерируются прототипы методов и сложных свойств Let/Get/Set. Улучшен детект GUID'ов используемых в декомпилируемом проекте внешних DLL и OCX. Всего и не описать в данной презентации. Изменений реально много. Одним из значительных нововведений являются серьезно переработаные функции работы со String References, теперь они корректно работают на проектах любой длины!



VB Decompiler строки в программе

Несмотря на такое огромное число изменений и улучшений цена продукта никак не изменилась и по прежнему является доступной практически каждому разработчику программ! Буду рад видеть Вас в числе наших клиентов! А пользователи имеющие активную лицензию могут обновить декомпилятор прямо сейчас из панели управления.



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



* Visual Basic are registered trademarks of Microsoft Corporation.





Комментарии

отсутствуют

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


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

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

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

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