имплантанты пышных формы 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 Указатель на блок, описывающий форму и контролы, лежащие на ней |