Детект хука int 2e в r3

Тема в разделе "WASM.WIN32", создана пользователем Deader, 1 сен 2011.

  1. Deader

    Deader New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    96
    Как может приложение ring3 задетектить в IDT перехват int 2е?
     
  2. Unix

    Unix New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    6
    Считать IDT и проверить, как же еще.
     
  3. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Deader
    Время.
    + Отсылка не валидных данных с ожидаемым результатом.
     
  4. Deader

    Deader New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    96
    Как считать и главное на ЧТО проверить? С чем сравнивать?
    Код (Text):
    1.  
    2.   sidt    FWord ptr idtr
    3.   mov    eax,DWord Ptr idtr+2
    4.   add    eax,$170
    5.   mov    ebx,[eax]   //аксес виялятиун, если вместо этого сделать ReadProcessMemory, то будут нули
    нищщщего не понял ))))
     
  5. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Deader
    IDT находится в памяти ядра и недоступна пользовательскому коду. Можно читать PhysicalMemory (IDT не выгружается), но не все ОС позволяют это делать (в Vista+ запрещено). Самое простое -- написать драйвер. С другой стороны, в Vista+ ядро само проверяет целостность IDT (Patch guard), но некоторые проактивные защиты, например, его обходят. Самое простое, по-моему -- написать драйвер.
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Запрещено уже с Server 2003 SP1.
     
  7. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Определить те функции который явно не будут перехватыватся. Положить в стек не валидные данные и в цикле делать вызов с замером времени выполнения(Очень большой цикл :) ).
    Определить функцию(не сколько фукнций) которая может быть перехваченной . И опять таки положить в стек инвалидные данные и в циксле выполнить с замером времени выполнения. Сравнить время выполнения. ну и получится какой то не очень веселый и кривой эвристик. :) .
    Инвалидные данные нужны что бы убрать полезную нагрузку вызываемых функций.
     
  8. Deader

    Deader New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    96
    Я это знаю, но Unix сказал "Считать IDT" поэтому я и привел код, дающий ошибку в р3 и спросил "как считать?", т.к. я не знаю как это сделать в р3.
    не пойдет - надо только в р3

    shchetinin
    спасибо, попробую посмотреть - что выйдет...