Набор статей и руководств по дизассемблеру IDA

         

IDAW.EXE


Если посмотреть в распакованном файле, то мы не сможем найти ни одной строки меню. Однако можно обнаружить названия всех пунктов меню в текстовом виде в файле idatui.cfg. Далее все также не очень сложно - находим любую строку и отслеживаем ссылки на нее. В результате по адресу 0x6604EC50 обнаруживаем что-то вроде массива указателей на структуры обработчиков меню:

АдресПункт меню



0x6604EC50 Меню Jump
0x6604EC54 Меню Search
0x6604EC58 Подменю Edit->Comments
0x6604EC5C Подменю Edit->>Operand types
0x6604EC60 Подменю Edit->Other
0x6604EC64 Подменю Edit->Segments
0x6604EC68 Подменю Edit->Patch program
0x6604EC6C Подменю File->Produce Output File
0x6604EC70 Подменю Edit->Functions
0x6604EC74 Подменю Edit->Structs
0x6604EC78 Подменю Edit->Enums
0x6604EC7C Подменю File->Load file
0x6604EC80 Подменю View->Open subviews
0x6604EC84 Меню File
0x6604EC88 Меню Edit
0x6604EC8C Меню View
0x6604EC90 Меню Options
0x6604EC94 Меню Win

Каждый из вышеприведенных указателей ссылается на массив структур, названных мною

struct menu_handler { BYTE unkn[12]; char *name; WORD unkn_w; DWORD func_ptr; };

Значение многих полей не было выяснено (ясно,что какие-то из них могут указывать на под-меню, горячие клавиши по умолчанию, номер события в TurboVision и так далее), меня в данной структуре интересовали только поля name (название пункта меню) и func_ptr (указатель на функцию-обработчик данного пункта меню). Для переименования этих функций я написал маленький script rename_h.idc. Рекомендуется запускать его с большой осторожностью, передавая функции rename_h адрес начала массива структур menu_handler. Теперь у меня есть и другая интересующая меня часть кода - реализация пунктов меню пользовательского интерфейса с помощью функций API. Осталось лишь найти время для reverse engeneeringа этих мегабайт ассеблерного листинга...



Содержание раздела