Декомпиляция вызовов внешних ActiveX компонентов с VB Decompiler v10.3
Обновленный VB Decompiler переводит декомпиляцию Native Code VB6 программ на новый уровень качества. Начиная с версии 10.3, поддерживается декомпиляция вызовов, методов и свойств из внешних ActiveX компонентов, отсутствующих в базе декомпилятора. Также в базу данных были добавлены прототипы еще 1853 системных (и не только) API функций. Улучшена декомпиляция массивов и разного рода операций с ними. Также значительно повышено удобство работы с продуктом. Но обо всем по порядку.
Декомпиляция вызовов из неизвестных ActiveX компонентов
Как известно, многие программы, разработанные на Visual Basic 5.0 или 6.0 используют внешние компоненты, написанные как Microsoft, так и сторонними разработчиками. Многие компоненты Microsoft давно содержатся в базе декомпилятора и как только он видит известный CLSID или UUID - производится подхватывание прототипов вызываемых функций или свойств. Но что делать, если GUID класса или интерфейса декомпилятору не знаком? Ранее Вы могли видеть вызовы вида UnkVCall с DispatchID или смещением в VTable, то есть вызовы таких функций не распознавались. Теперь декомпилятор содержит две абсолютно новые методики создания прототипов неизвестных ему функций из внешних ActiveX:
1) На этапе построения проекта (vbp файла), еще до декомпиляции форм и кода - декомпилятор узнает об используемых внешних компонентах, а именно часть их GUID'ов, используемых для идентификации. Затем, используя системный реестр и специализированные API для работы с объектами, производится поиск DLL/OCX файлов, содержащих классы и интерфейсы, соответствующие найденным GUID'ам. Если декомпилируемая программа корректно запускается - то скорее всего ее компоненты уже зарегистрированы в системе и могут быть найдены. Если нет - Вам следует предварительно зарегистрировать ActiveX файлы, используемые исследуемой программой (например через regsvr32). Если используемые внешние ActiveX компоненты зарегистрированы в системе - декомпилятор их успешно найдет, выделит TypeLib информацию, просканирует все используемые UnknownInterface и DispatchInterface и составит прототипы содержащихся в них функций и свойств.
2) Некоторые ActiveX компоненты вызываются без объявления в проекте, а через CreateObject, непосредственно в коде исследуемой программы. Декомпилятор поддерживает и этот способ, успешно выделяет нужный ему UUID и CLSID, и производит анализ TypeLib внешнего ActiveX компонента, как и в первом случае.
Оба поддерживаемых метода составляют кэш обработанных ActiveX файлов. Поэтому до закрытия декомпилятора открытие новых файлов или повторная декомпиляция уже обработанных не вызовет повторный анализ внешних ActiveX компонентов, что существенно ускоряет работу!
Множество новых прототипов API функций
Вот уже 10 лет мы не обновляли базу данных прототипов вызываемых API функций. На самом деле декомпилятор до текущего момента и так поддерживал порядка 1565 прототипов системных API, что немало. Теперь число известных декомпилятору API функций увеличено до 3418 и покрывает практически все известные системные функции операционной системы Windows!
Это существенное расширение базы API функций позволяет избежать некорректное определение параметров по свободным элементам стека. Также это позволяет просмотреть в разделе API прототипы каждой используемой функции с именами и типами параметров, а также адресом переходника, формируемого компилятором Visual Basic для данного вызова, что существенно упрощает анализ.
Расширена поддержка массивов
Как известно, основа Visual Basic это COM OLE технология, а также использование Variants и SafeArray конструкций. В новой версии VB Decompiler была проведена большая работа над расширением поддерживаемых операций над массивами SafeArray. А именно: копирование массивов между переменными, создание временных Variant переменных из массивов и обратный перенос массива в SafeArray, поддержка адресации в ряде массивов.
Поддержка новых видов адресации при эмуляции fpu команд
Декомпилятор давно поддерживает эмуляцию команд сопроцессора. В новой версии добавлена поддержка сложной адресации вида:
fpu_command st0, real8 ptr [reg1+reg2*8]
Это очередной шаг по улучшению работы эмулятора, что значительно расширяет возможности эмуляции сложных конструкций.
Улучшение удобства использования
С каждой новой версией декомпилятор становится все более и более удобным в использовании. В версии 10.3 мы добавили переход в HEX редактор по щелчку на адресах констант и значениях, напоминающих адрес, но не являющихся вызовом функции. Это позволяет просматривать ссылки на объекты, локальные переменные и т.д. Теперь декомпилятор сам понимает когда вы щелкнули по вызову функции, чтобы показать этот вызов, а когда по константе, чтобы показать ее в HEX редакторе.
В версии декомпилятора с поддержкой трассировки добавлены Hint'ы на длинных строчках, которые не умещаются на экране.
Теперь при открытии сохраненного в базу данных проекта - декомпилятор пытается искать декомпилируемый файл не только по тому адресу, где он был расположен на момент сохранения, но и в папке с базой данных. Это удобно при совместной работе нескольких аналитиков с базой одного файла.
Исправления ошибок
И конечно, все найденные ошибки были исправлены. В особенности стоит отметить обработку Between команд P-Code, используемых в сложных Select Case условиях, а также исправление неприятного редкого бага при сохранении индекса контролов на формах с обфусцированными именами в базу данных. Начиная с версии 10.3 декомпилятор не полагается всецело на энтропию файла и даже если файл определяется как упакованный, все равно производится попытка его декомпиляции.
Если Ваша подписка на обновления и поддержку активна - вы можете скачать новую версию абсолютно бесплатно. Если же Вы узнали о нас только сейчас - будем рады видеть Вас в числе наших клиентов!
(C) Сергей Чубченко, разработчик VB Decompiler
* Visual Basic are registered trademarks of Microsoft Corporation.
Комментарии |
отсутствуют |
Добавление комментария |