Перехват функций из win32k.sys

Тема в разделе "WASM.WIN32", создана пользователем Crom, 5 янв 2006.

  1. Crom

    Crom New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2005
    Сообщения:
    9
    Подскажите, как можно произвести перехват win32k.sys функций из режима ядра
     
  2. Crom

    Crom New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2005
    Сообщения:
    9
    Неужели никто не перехватывал функции из win32k.sys?

    Проблема в следующем:

    Делаю перехват таким образом:

    1. Определяю адрес KeServiceDescriptorTableShadow;

    2. Открываю crss.exe;

    3. Создаю в нем поток;

    4. В функции потока записываю в ETHREAD-TCB-ServiceTable

    данного потока адрес KeServiceDescriptorTableShadow,

    который получил ранее;

    5. Сохраняю адрес оригиниальной функции;

    6. Заменяю адрес нужной функции в KeServiceDescriptorTableShadow;

    7. Закрываю поток;



    В результате нужная функция перехватывается.

    При выгрузке драйвера:



    1. Открываю crss.exe;

    2. Создаю в нем поток;

    3. В функции потока записываю в ETHREAD-TCB-ServiceTable

    данного потока адрес KeServiceDescriptorTableShadow,

    который получил ранее;

    4. Заменяю адрес нужной функции в KeServiceDescriptorTableShadow

    на сохраненный ранее адрес оригинальной функции;

    5. Закрываю поток;



    Вроде как все нормально, но если после выгрузки драйвера

    происходит вызов функции, которую я перехватывал, то возникает

    синий экран - DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_

    OPERATIONS
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Хук KeServiceDescriptorTableShadow принципиально ничем не отличается от хука KeServiceDescriptorTable. Просто где-то накосячил. Зачем манипуляции с crss не понятно.
     
  4. Crom

    Crom New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2005
    Сообщения:
    9
    Меня собственно интересует не хук KeServiceDescriptorTableShadow,

    а хук функций, реализованных в win32k.sys. А поскольку они содержатся

    в KeServiceDescriptorTableShadow, то приходится и искать адрес

    KeServiceDescriptorTableShadow и производить манипуляции с ней.



    Я многого конечно пока не понимаю, но в некоторых умных

    статьях (книгах) упоминается о том, что содержимое SST win32k

    отображается на UserMode адреса, и поэтому чтение или редактирование

    SST win32k необходимо производить только из GUI процесса.



    Читать (не говоря уж об изменении) содержимое SST win32k

    из режима ядра я пробовал - моментально получается синий экран -

    PAGE_FAULT_IN_NONPAGED_AREA.
     
  5. Ms Rem

    Ms Rem New Member

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


    Да, win32k.sys и все видеодрайвера отображаются на юзермодные адреса, и только в GUI процессы.



    В атаче мои маленькие эксперименты на эту тему. Авось чем-нибудь помогут.

    [​IMG] 224011978__klog.rar
     
  6. Ms Rem

    Ms Rem New Member

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


    Их как раз и приходится делать, по вышеназваной причине.
     
  7. Crom

    Crom New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2005
    Сообщения:
    9
    За исходники спасибо. Они правда не собираются, из-за

    отсутствия ряда заголовочных файлов. Но суть понятна и без них.



    Ошибку у себя нашел и исправил. Теперь все

    работает нормально.