EnforceWriteProtection и хуки в kernelmode

Тема в разделе "WASM.WIN32", создана пользователем romano, 21 ноя 2005.

  1. romano

    romano New Member

    Публикаций:
    0
    Регистрация:
    28 авг 2005
    Сообщения:
    6
    использовал для установки хуков в драйвере код, взятый у Ms-Rem:
    Код (Text):
    1.  
    2. //устанавливаем перехваты
    3.     __asm
    4.     {
    5.         cli                     // запрещаем прерывания
    6.         mov eax, cr0
    7.         mov CR0Reg,eax
    8.         and eax,0xFFFEFFFF      // сбросить WP bit
    9.         mov cr0, eax
    10.     }
    11.         ...
    12.         ...устанавливаем хуки
    13.         ...
    14.     __asm
    15.     {
    16.         mov eax, CR0Reg    
    17.         mov cr0, eax            // востановить содержимое CR0
    18.         sti                     // разрешаем прерывания
    19.     }
    20.  


    все вроде бы работало без глюков, но когда запустил драйвер на новой винде, произошел багчек. выяснилось, что на свежей винде не прописан параметр реестра EnforceWriteProtection=0, в ключе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management. если прописать его, то все работает нормально. но ведь вышеупомянутый код для того и служит ведь, чтобы можно было писать в ядерную память, не прибегая к юзанью реестра и ребута машины! что же получается, код не работает? при отсутствии этого параметра при записи в ядерную память валятся все винды, которые пробовал: от 2К без сервиспаков до 2К3. что делать и как-таки отключать защиту от записи в ядро, не юзая реестр и не ребутя систему?
     
  2. sherion

    sherion New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2005
    Сообщения:
    11
    проверил на Win2k SP4 Prof

    такого ключа нет -> защита включена

    хук работает
     
  3. nobody

    nobody New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2004
    Сообщения:
    32
    Адрес:
    Afghanistan
    А новая винда - это случайно не XP 64?
     
  4. romano

    romano New Member

    Публикаций:
    0
    Регистрация:
    28 авг 2005
    Сообщения:
    6
    sherion

    а процессор у тебя какой? и из-под vmware можешь попробовать? у меня athlon xp и пробовал на всех системах от 2к до 2к3 под vmware.



    nobody

    нет, новая винда - это любая свежепоставленная от 2к до 2к3.



    блин, вообще непонятно что делать. главное, под айсом даже нельзя посмотреть, что конкретно вызывает багчек, ибо айс этот ключ в реестре прописывает :dntknw:
     
  5. sherion

    sherion New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2005
    Сообщения:
    11
    romano

    Intel P4 старенький еще на ядре Willamette

    пробовал и в VMWare 4.5.2(тоже правда не последний писк)

    и там и там (в виртуалке) w2k sp4 prof rus
     
  6. romano

    romano New Member

    Публикаций:
    0
    Регистрация:
    28 авг 2005
    Сообщения:
    6
    нашел баг, это я накосячил в другом месте.
     
  7. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    Интересно, может быть ксок памяти, который ты патчил находился в PagedPool, соответственно, инструкция CLI взвинтила уровень IRQL до максимума,и таким образом обработчик #PF не сработал. Это мое предположение :)