Странности с секцией кода драйвера windows

Тема в разделе "WASM.WIN32", создана пользователем jne100, 6 апр 2010.

  1. jne100

    jne100 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2009
    Сообщения:
    13
    Здравствуйте, мне необходимо вытащить машинный код из образа драйвера windows для последующего дизассемблирования и анализа, драйвер содержит следующие секции

    Код (Text):
    1.      
    2. .text, 00000400-00000600
    3. .rdata, 00000600-00000800
    4. .data, 00000800-00000a00
    5. PAGE, 00000a00-00000c00
    6. INIT, 00000c00-00000e00
    7. .rsrc, 00000e00-00001200
    8. .reloc, 00001200-00001400
    Насколько я понимаю, основной код хранится в секции .text, а еще код есть в секциях INIT и PAGE. Но в секции .text почему то находятся ASCII строки, например которые я вывожу при помощи DbgPrint (скажем "BlankNaked: - BlankNaked_Unload called!", имя драйвера BlankNaked), и hiew пытается их дизасмить. Драйвер приложил, можно в гексовом редакторе посмотреть секцию .text (байты с 400h по 600h), ну и в PAGE и INIT по-моему такое же безобразие.

    Ну и собственно вопрос - что текстовые строки делают в секции кода. Когда смотрел строение юзермодного исполняемого файла там такого не было. Извините если не догуглил.
     
  2. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    jne100, fasm:
    Код (Text):
    1. format PE GUI 4.0
    2.  
    3.  include '%fasm%\include\win32a.inc'
    4.  
    5. section '.text' readable
    6. pMessage db 'MessageBox', 0
    7.  
    8. section '.data' readable executable
    9. entry $
    10.    xor eax, eax
    11.    invoke MessageBox, eax, pMessage, eax, eax
    12.    retn
    13.  
    14. section '.reloc' fixups data discardable writable
    15. data import
    16.  library user32, 'user32.dll'
    17.  import user32, MessageBox, 'MessageBoxA'
     
  3. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    Код (Text):
    1. end data
    не скопипастилось сразу.
     
  4. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    jne100, и вообще то checksum в дрове исправьте.
     
  5. jne100

    jne100 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2009
    Сообщения:
    13
    Спасибо. Ну для начала скажу что я не сомневаюсь что если захотеть можно поместить в любую секцию что угодно, просто не думал что это нормальная практика. В принципе если подумать то применительно к дровам получается логично. Если я правильно понял строки линкер помещает в секции с кодом что бы они также могли выгружаться на диск. Например если выгружаемая функиия использует строковую константу (и эта константа используется только выгружаемым кодом), то можно эту константу также выгружать вместе с кодом. Это имеет смысл для секций INIT и PAGE, но непонятно применительно к .text, ведь есть же секция .rdata для констант. Поправьте если где ошибся.

    Получается что это с hiew моим что то не так что он кидается ASCII строку на опкоды раскладывать. С olly такого не происходит (а еще пробовал движок borg, там тоже ок). Если буду использовать готовый движок наверно проблем быть не должно.

    А что не так с checksum? Драйвер грузится, и вообще он только что с build`a.
     
  6. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    Смотря какие цели вы преследуете
    Какой именно линкер? Брр.. что, что выгружается???
    хм, качнул в первый раз из атача была неправильная чексумма(подправил, грузанул), сейчас норм, парадокс ).
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    hiew - это же не IDA. И даже IDA не всегда строки выделяет. Чудеса в сказках бывают, а реверсинг - это тяжелый труд :)
     
  8. jne100

    jne100 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2009
    Сообщения:
    13
    >> Какой именно линкер? Брр.. что, что выгружается???
    Ну у драйвера функцию можно пометить как INIT или PAGE, и тогда в случае INIT функция используется 1 раз и потом может быть выгружена в pagefile для экономии памяти, а в случае с PAGE просто может быть выгружена в процессе работы, я об этом.

    А как дизассемблеры строки в секциях с кодом распознают? Поделитесь пожалуйста если кто знает, мне уже просто интересно.