Как посмотреть внутрь АП драйвера?

Тема в разделе "WASM.WIN32", создана пользователем cresta, 13 фев 2006.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Есть желание пошарить внутри адресных пространств системных модулей на предмет поиска сигнатур.

    Вот только не вся память доступна для чтения...

    Во всяком случае MmIsAddressValid возвращает (суммарно по всем системным модулям) доступных для чтения 10005632 байта и недоступных 2867200.

    Можно ли повысить процент доступной для чтения памяти, или вообще всю память сделать доступной?
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    ЛОЛ!

    Нельзя прочитать ту память, которая отсутствует.

    Лучше учи матчасть насчет discardable секций.
     
  3. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    это не память а адресное пространство

    причем судя по используемой функции MmIsAddressValid - системное т.е. общее для всех

    адресные пространства суть дырявые (по определению)

    сколько загрузили модулей - столько и замапили

    плюс пулы все такое

    может я не совсем понял вопрос? какую память "сделать доступной"?
     
  4. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Просто у драйверов могут быть discardable секции, это например секция INIT.

    После возврата из DriverEntry их память освобождается.

    Вот он наверно их и не может прочитать.
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    ЛОЛ!

    При чем тут секции?

    Память (озу) физически существует, независимо от того выгрузили секцию или нет.

    Кроме того, после выгрузки секции врядли область памяти, занимавшаяся этой секцией, обнуляется. Скорее всего, она просто помечается как "пустая". И там должна остаться информация.

    И то, что меня интересует, скорее всего и может оказаться в таком месте.
     
  6. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Скорее всего она выделяется под другие данные. К тому же врядли ты найдешь эту страницу в физической памяти, потому что оан там может находиться практически где угодно.

    Если тебе надо получить доступ к данным в такой секции, то грузи ее из файла на диске и не страдай фигней с поиском в памяти того, чего там скорее всего уже нет.
     
  7. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Заранее неизвестно, в каком файле искать :dntknw:

    Читать все .sys'ы на винте? Долго слишком.

    А если память освожденная секцией, отведена под другие данные, то почему их нельзя считать?
     
  8. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


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

    Если ищешь сигнатуры, то можешь читать всю физическую память и искать что-либо там.
     
  9. Nothing

    Nothing New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2003
    Сообщения:
    139
    Адрес:
    Russia
    cresta

    Посмотри в таблице страниц и получишь всю информацию о том, какая память ядра куда отображена (в данный момент, ес-но). А если и пользовательскую хочешь - "подключай" процессы с помощью KeAttachStackProcess и смотри в "их" памяти. На время поиска и каталоге страниц и копирования страницы к себе во временный буфер надо поднять IRQL чтобы страницу не успели выгрузить.

    Можно на основании таблицы страниц составить информацию о том, какая физическая память используется системой, а какая нет, и потом просканировать "резервы". Для этого надо самому модифицировать таблицу страниц, на время, под запрещенными прерываниями, чтобы получить доступ к любой физической памяти.
     
  10. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


    KeStackAttachProcess







    А на мультипроцессорных системах ее всеравно могут выгрузить.







    А вот этого делать не советую, так как обретешь много гимора с работой на разных ядрах. Страницы могут быть как 4кб так и 4мб, еще может использоваться PAE режим. Короче трудно сделать код работающий везде корректно.

    Для чтения физической памяти лучше юзать MmMapIoSpace.
     
  11. Nothing

    Nothing New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2003
    Сообщения:
    139
    Адрес:
    Russia
    Ms Rem

    KeStackAttachProcess

    писал по памяти, перепутал, я вообще до сих пор использовал просто KeAttachProcess по старинке.



    А на мультипроцессорных системах ее всеравно могут выгрузить.

    Ох уж эта многопроцессорность... Ну с этим тоже можно бороться, если очень уж надо универсальный код написать.



    много гимора с работой на разных ядрах. Страницы могут быть как 4кб так и 4мб, еще может использоваться PAE режим. Короче трудно сделать код работающий везде корректно.

    Согласен, модификация таблиц - последнее дело в силу своей сложности (там подводных камней хватает и помимо разных форматов таблиц, каталогов и их уровней вложенности), лучше ограничиться лишь чтением, это все-таки попроще.
     
  12. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ




    если тебе надо физ.память то сделай себе отображение и читай ее до посинения

    только там станицы винигретом будут и как ты поймешь даже если найдешь свою сигнатуру - чья она

    задумайся