При восстановлении адреса вSST - бсод

Тема в разделе "WASM.NT.KERNEL", создана пользователем Alisa, 23 июл 2008.

  1. Alisa

    Alisa New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    10
    Доброго дня!

    снимаю перехват в функции DrvUnload так:
    Код (Text):
    1. __asm
    2.    {
    3.       cli                    
    4.       mov eax, cr0
    5.       mov CR0Reg,eax
    6.       and eax,0xFFFEFFFF      
    7.       mov cr0, eax
    8.    }
    9.  
    10.     (NtUserSetWindowsHookExPtr )(
    11.         (void **)(pServiceDescriptorTableShadow[1].Base)[0x225]) = (NtUserSetWindowsHookExPtr )TrueNtUserSetWindowsHookEx;
    12.  
    13.    __asm
    14.    {
    15.       mov eax, CR0Reg    
    16.       mov cr0, eax          
    17.       sti                    
    18.    }
    получаю бсод

    Перехват работает нормально, но при восстановлении tue-адреса в таблице... фигня получается.
    Может с контекстами связано!?
    Поскажите, что(как) делать.
    Спасибо!
     
  2. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Код бсода?
    Приведите код того места где вы ставите перехват
     
  3. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    Вот тут есть рабочий пример перехвата сабжевого адреса SST

    http://bugtraq.ru/library/programming/.keep/hookguard.zip

    Там восстановление происходит не в DriverUnload, а через KeInsertQueueApc
     
  4. retmas

    retmas New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2005
    Сообщения:
    100
    пользуй Interlocked.. мб
     
  5. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    retmas
    Адреса функций выровнены, следовательно операция записи проходит атомарно и нужды в Interlocked-функциях нет.

    Alisa
    1. Желательно привести код бсода, как уже говорили.
    2. Желательно не снимать перехваты. ;)
    3. Дай бинарник драйвера, перед снятием перехвата поставь int 3, чтоб мне легче было попасть "на место." Только не забудь номер функции определять динамически, а то не факт, что у меня найдется такая же система, как у тебя...
     
  6. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Скорее всего DriverUnload происходит в контексте не GUIшного процесса, отсюда и BSOD. Хотя опять же, как сказали ранее, нужно смотреть...
     
  7. Alisa

    Alisa New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    10
    Twister, давай мыло, дам исходники. (здесь показывать стесняюсь :) )
     
  8. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Что? Ты сам хоть понял что сказал?=) Обращение идет к памяти ядра, к которой у дрова доступ всегда имеется
     
  9. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Да ну? Попробуй обратиться к какой-нить функции из Shadow-таблицы в контексте не ГУИ-процесса.

    Alisa
    Я и вправду не вижу в драйвере аттача к GUI-процессу перед установкой/снятием хуков ShadowSDT. Ты уверена, что перехват ставится? Проверь каким-нибудь антируткитом.
     
  10. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Ты видно сам не понял. Указатель на таблицу SST для win32k.sys отражается в адресное пространство только для GUI приложений (остальным экспорт win32k.sys попросту не нужен). Поэтому при попытке модифицировать таблицу, указатель на которую не валидный, система выпадает в BSOD.
    Если нет уверенности что установка перехвата производится в контексте GUI приложения (например драйвер стартует при запуске системы), необходимо юзать KeAttachProcess/KeDetachProcess.
     
  11. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    AntiFreeze
    В том-то весь и прикол, что у Алисы установка хука идет в DispatchControl, т.е. в контексте вызывающего (GUI) процесса. А вот снятие в DriverUnload, которая выполняется явно не в том контексте. ;) Отсюда и БСОД.
     
  12. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Twister, так о том и речь :)
     
  13. Alisa

    Alisa New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    10
    вот я "звезда"! :dntknw:((
    работает :))
    спасибо всем!
     
  14. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Пасиб, понял=)