RKU - обнаружение хуков в IDT

Тема в разделе "WASM.RESEARCH", создана пользователем a1tus, 7 янв 2009.

  1. a1tus

    a1tus New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2009
    Сообщения:
    22
    В RKU, как известно, есть возможность обнаружения хуков идт (вкладка Code Hooks). Решил посмотреть учитывает ли данная программа базу сегмента в котором находится обработчик прерывания.
    Добавил дескриптор сегмента в GDT с базой, равной адресу обработчика прерывания, пересчитал попутно лимит нового сегмента.
    Затем нашел свободный дескриптор шлюза в идт. прописал вместо дефолтного селектора (у меня в ring 0 cs = 0008h), селектор на свой свежедобавленный дескриптор в GDT с базой = адресу моего нового обработчика прерывания (относительно 0).
    в idt таким образом получился адрес

    0048:00000000

    ну чтобы удостовериться, что все работает обработчик имеет вид

    int_handler:
    inc count_
    iretd

    с третьего кольца в цикле повызывал int 29h (у меня было свободен шлюз этого прерывания), счетчик увеличивается и все ок.

    ну так к чему это я? а вот RKU проверяет по ходу только смещение (которое путем вышеперечисленных манипуляций остается нулевым), а селектор можно изменить на свой и модификация идт останется незамеченной?

    --Добавлено---
    а) конечно же, если указать ненулевое смещение rku обнаружит

    б)да и неправильно написал, модификация, тут речь о хуке не идет, хотя чисто теоретически пересчитать базу и лимит нового сегмента так, чтобы не менять старое смещение обработчика прерывания вполне реально.