пробую реверсить драйвер для FLASH USB. Есть много стандартных структур и.т.д. Есть инициализация полей этих структур, примерно в таком виде: mov [eax+38h], ecx. То есть, нужно залезть в соотв хедер, и посчитать смещение для данного поля. А есть ли способы как-нить прикрутить хедеры к IDA, или может есть редактор какой, чтобы показывал смещения? Вообще каким должен быть подход?
.const my_struktura struc header dd ? ... ends .data? m_s my_struktura <> .code mov [eax+m_s.header],ecx
В иде есть парсер хидеров File->Load file->Parse C header file... Я, правда, никогда не пользовался. Какой-нить ntddk.h, скорее всего, не пропарсится. Выбери нужное и парсни снова. Что-то можно руками забить/дозабить. Потом встаешь на mov [eax+38h], ecx, топчешь T и получаешь mov [eax+DRIVER_OBJECT.MajorFunction], ecx. Угадал?
Угадал, причём в яблочко. ntddk не парсится. Сделал по-другому: перешёл на закладку структуры -> создать структуру, кнопка "добавить стандартную" и к моему удивлению увидел, что уже DRIVER_OBJECT набит. Дальше всё как ты говорил: >топчешь T и получаешь mov [eax+DRIVER_OBJECT.MajorFunction], ecx. Теперь вот думаю, а как бы коды IRP_MJ_ сюда привязать, а то получается mov [eax+DRIVER_OBJECT.MajorFunction+8)], ecx что тоже не совсем удобно.
Так бы сразу и сказал, что у тя продвинутая ида. Все основные структуры там уже есть. С IRP_MJ_ руками придется. MajorFunction - это массив указателей на функции. Так что 8/sizeof(PVOID) = IRP_MJ_CLOSE.