Обращение к памяти процесса напрямую

Тема в разделе "WASM.NT.KERNEL", создана пользователем Aids, 5 май 2008.

  1. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Как обратиться из драйвера к памяти процесса напрямую(без использования функций ZwWriteVirtualMemory ZwReadVirtualMemory)? Как определить, где распологаеться процесс?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Надо приаттачиться к процессу(Ke[Stack]AttachProcess).
    Что это значит ?
     
  3. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    это что функция что ли? или структура?
     
  4. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
  5. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Clerk
    Т.е. Как определить, где распологаеться виртуальная память процесса? Чтобы потом было можно обращаться к нему из ядра. На сколько я знаю происходит постоянное переключение процессов и у каждого своя виртуальная память. И если я обращусь из ядра к памяти например так
    mov eax,[0x1000000]. То не факт что я получу данные нужного мне процесса.
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Aids
    если перед этим вызовешь указанную выше KeStackAttachProcess, то факт.
     
  7. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Twister
    Прочитал статью про KeStackAttachProcess.
    http://www.wasm.ru/article.php?article=dumping
    Это не совсем то что я хотел. Я хочу обратиться к памяти процесса напрямую. Я чттал что можно преобразовать виртуальный адрес в физический. Допустим я это сделал, но тогда у меня возникает вопрос. Как по физическому адресу обратиться к памяти?
     
  8. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    А всё я понял что надо сделать. Всего то надо было указать каталог страниц в CR3 нужного мне процесса.
     
  9. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Вообще-то можно и через MDL получать физические адреса в памяти и работать уже с ними.
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    открою страшный секрет - KeStackAttachProcess эт и делает, только куда удобнее, чем ручное забивание в CR3 поля Process->DirectoryTableBase
     
  11. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Aids
    Сам же сказал, что процессы прыгают по памяти. Тебе именно поэтому и надо обращаться к виртуальной памяти, чтоб он не "упрыгал" :) Зачем тебе физический адрес. С ним работает система - на фига он тебе ? Процессы работают с виртуальной памятью и сидят там достаточно прочно, если их "придержать". А если адрес вообще в своп попал - какой физический адрес ?
     
  12. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Ещё интересный момент. Нехорошо получится если ты будешь обращаться к юзерской памяти из ядра. Юзер возьмёт да освободит её - синий экран. здесь есть вариант - после получения необходимых адресов повышать уровень запроса прерываний, или же блокировать этот участок памяти.
     
  13. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Так ты и не совсем то прочитал... ;)

    Ну а вообще, тебе уже внятно объяснили, как из дрова достучаться до памяти конкретного процесса.