Sergey Chubchenko's Blog

Информационный блог о разработках DotFix Software

 

VB Decompiler v9.0: Новая эра в декомпиляции Visual Basic приложений

 

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

new_vb_decompiler_1

Главное чего удалось достичь — полная обратная совместимость! Вы можете скопировать новый 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 этот код декомпилировался так:

old_fpu

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

new_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:

old_classes

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

new_classes

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

new_string_references

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

 

No Responses to “VB Decompiler v9.0: Новая эра в декомпиляции Visual Basic приложений”

 

Leave a Reply

You must be logged in to post a comment.