Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #66, МАЙ 2006 г.

имплантанты пышных формы

GPCH (ADMIN@VB-DECOMPILER.ORG)

Спецвыпуск: Хакер, номер #066, стр. 066-040-1


ИСКУССТВО РЕДАКТИРОВАНИЯ ИНТЕРФЕЙСА ПРОГРАММ НА VB

ОПЫТНЫМ КРЭКЕРАМ ИЛИ РУСИФИКАТОРЩИКАМ НАВЕРНЯКА ПОПАДАЛИСЬ ПРОГРАММЫ, НАПИСАННЫЕ НА VB. ЧТО ИНТЕРЕСНО, НА ДАННЫЙ МОМЕНТ НЕТ СОВСЕМ НИКАКОЙ ИНФОРМАЦИИ О РЕДАКТИРОВАНИИ ФОРМ И КОНТРОЛОВ НА НИХ. НАЧНЕМ ИСПРАВЛЯТЬ СИТУАЦИЮ ПРЯМО СЕЙЧА

Русификаторщики, крэкеры и просто продвинутые пользователи давно привыкли редактировать интерфейсы программ с помощью Restorator или Resource Hacker. К сожалению, эти утилиты никак не видят ресурсы VB-программ. Формат, в котором они хранятся, в принципе, несложный, но кто захочет писать отдельный редактор ресурсов специально под VB? Нам же остается только изучать этот формат самостоятельно.

Для начала разберем, как найти эти самые ресурсы в VB-программе. Возьмем оригинальную точку входа в программу. Чтобы перейти на нее из HEX-редактора HIEW, потребуется лишь загрузить exe’шник в данный HEX-редактор и по очереди нажать <Enter>, <F8>, <F5>. Те, у кого оплачен HIEW, знают, как оптимизировать эту операцию до командной строки. Взгляду представится примерно следующее:

push 0004042E8 ;'VB5!'

call ThunRTMain ;MSVBVM60 --?2

Теперь считываем структуру VBHeader по адресу 0004042E8 (Таблица №1). Как ни парадоксально, для исследования больше не потребуются никакие структуры — все нужное выцепим из VBHeader.

Таблица №1. Структура VBHeader

Поле Тип Описание

Signature String * 4 Сигнатура "VB5!"

RuntimeBuild Integer Показатель рантаймовости

LanguageDLL String * 14 Языковая библиотека

BackupLanguageDLL String * 14 Не влияет на работу EXE

RuntimeDLLVersion Integer Версия рантайм-библиотеки

LanguageID Long Язык программы

BackupLanguageID Long Используется совместно с LanguageDLL aSubMain Long Main-процедура, запускаемая при старте EXE. Если отсутствует, то при загрузке грузится самая первая форма

aProjectInfo Long Указатель на структуру ProjectInfo

fMDLIntObjs Long

fMDLIntObjs2 Long

ThreadFlags Long Флаги потока

ThreadCount Long Число потоков (смысл малопонятен, так как VB не позволяет создавать многопоточные программы)

FormCount Integer Число форм в данном файле

ExternalComponentCount Integer Число внешних OCX-компонентов

ThunkCount Long

aGUITable Long Указатель на GUITable

aExternalComponentTable Long Указатель на ExternalComponentTable

aComRegisterData Long Указатель на ComRegisterData

oProjectExename Long Адрес строки с именем EXE-файла

oProjectTitle Long Адрес строки с заголовком проекта

oHelpFile Long Адрес строки с именем Help-файла

oProjectName Long Адрес строки с именем проекта

Мощная структура, да? Все элементарно! Нам потребуется только FormCount (чтобы определять число форм) и указатель на структуры, описывающие формы, — aGUITable. Структуру GUITable смотри на таблице №2.

Таблица №2. Структура tGuiTable

Поле Тип Описание

SectionHeader Long Адрес заголовка, описывающего секции

unknown(59) Byte Неиспользуемый блок-байт

FormSize Long Размер блока, описывающего форму и контролы, лежащие на ней

un1 Long Неиспользуемый DWORD

aFormPointer Long Указатель на блок, описывающий форму и контролы, лежащие на ней

Содержание  Вперед на стр. 066-040-2