Здравствуйте, мне необходимо вытащить машинный код из образа драйвера windows для последующего дизассемблирования и анализа, драйвер содержит следующие секции Код (Text): .text, 00000400-00000600 .rdata, 00000600-00000800 .data, 00000800-00000a00 PAGE, 00000a00-00000c00 INIT, 00000c00-00000e00 .rsrc, 00000e00-00001200 .reloc, 00001200-00001400 Насколько я понимаю, основной код хранится в секции .text, а еще код есть в секциях INIT и PAGE. Но в секции .text почему то находятся ASCII строки, например которые я вывожу при помощи DbgPrint (скажем "BlankNaked: - BlankNaked_Unload called!", имя драйвера BlankNaked), и hiew пытается их дизасмить. Драйвер приложил, можно в гексовом редакторе посмотреть секцию .text (байты с 400h по 600h), ну и в PAGE и INIT по-моему такое же безобразие. Ну и собственно вопрос - что текстовые строки делают в секции кода. Когда смотрел строение юзермодного исполняемого файла там такого не было. Извините если не догуглил.
jne100, fasm: Код (Text): format PE GUI 4.0 include '%fasm%\include\win32a.inc' section '.text' readable pMessage db 'MessageBox', 0 section '.data' readable executable entry $ xor eax, eax invoke MessageBox, eax, pMessage, eax, eax retn section '.reloc' fixups data discardable writable data import library user32, 'user32.dll' import user32, MessageBox, 'MessageBoxA'
Спасибо. Ну для начала скажу что я не сомневаюсь что если захотеть можно поместить в любую секцию что угодно, просто не думал что это нормальная практика. В принципе если подумать то применительно к дровам получается логично. Если я правильно понял строки линкер помещает в секции с кодом что бы они также могли выгружаться на диск. Например если выгружаемая функиия использует строковую константу (и эта константа используется только выгружаемым кодом), то можно эту константу также выгружать вместе с кодом. Это имеет смысл для секций INIT и PAGE, но непонятно применительно к .text, ведь есть же секция .rdata для констант. Поправьте если где ошибся. Получается что это с hiew моим что то не так что он кидается ASCII строку на опкоды раскладывать. С olly такого не происходит (а еще пробовал движок borg, там тоже ок). Если буду использовать готовый движок наверно проблем быть не должно. А что не так с checksum? Драйвер грузится, и вообще он только что с build`a.
Смотря какие цели вы преследуете Какой именно линкер? Брр.. что, что выгружается??? хм, качнул в первый раз из атача была неправильная чексумма(подправил, грузанул), сейчас норм, парадокс ).
hiew - это же не IDA. И даже IDA не всегда строки выделяет. Чудеса в сказках бывают, а реверсинг - это тяжелый труд
>> Какой именно линкер? Брр.. что, что выгружается??? Ну у драйвера функцию можно пометить как INIT или PAGE, и тогда в случае INIT функция используется 1 раз и потом может быть выгружена в pagefile для экономии памяти, а в случае с PAGE просто может быть выгружена в процессе работы, я об этом. А как дизассемблеры строки в секциях с кодом распознают? Поделитесь пожалуйста если кто знает, мне уже просто интересно.