Перечисление хуков

Discussion in 'Реверсинг' started by desTiny, 12 May 2010.

  1. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Таки сделал тулзу. Подробно объяснять ничего не буду, скажу лишь, что адреса обработчиков берутся из недокументированной и малоизученной структурки W32Thread - THREADINFO, не знаю, как её лучше назвать. По сравнению с сорцами
    Code:
    03322 typedef struct tagTHREADINFO {
    03323     W32THREAD;
    ............
    03405 } THREADINFO;
    предыдущей версии структура изменилась очень сильно, но достать из неё всё, что хочется, можно.
    Не люблю платформозависимый код, но другой сочинять не хочу. Работает на XP SP3. Похоже, что не работает на win 7.
    Бсодить в любом случае НЕ должно.


    Инструкция:
    1) Запустить hooki.exe либо сразу с параметром Thread ID, либо без параметра и ввести его по предложению.
    2) Нажать Enter :)
    3) Увидеть список хуков, приставленных к данному треду, либо DEADBEEF или BADF00D (или ничего) в случае ошибки.

    Инструкция по использованию примера:
    1) Запустить hooktest.exe
    2) Прочитать число, запомнить его, нажимать "ок". Это число - TID. Окно не закрывать.
    3) Запустить hooki.exe как выше
    4) Должно получиться что-то вроде
    Code:
    Input tid: f04
    Hook WH_MSGFILTER:
    Hook WH_JOURNALRECORD:
    Hook WH_JOURNALPLAYBACK:
    Hook WH_KEYBOARD: 0x401090 (0) --> 0x746F07C3 (0) -->
    Hook WH_GETMESSAGE: 0x401030 (0) --> 0x401000 (0) -->
    Hook WH_CALLWNDPROC:
    Hook WH_CBT: 0x746F0E2E (1) -->
    Hook WH_SYSMSGFILTER:
    Hook WH_MOUSE: 0x746F04CD (0) -->
    Hook WH_HARDWARE:
    Hook WH_DEBUG:
    Hook WH_SHELL: 0x100013A0 (1) --> 0x8001256 (1) --> 0x746F12B6 (1) -->
    Hook WH_FOREGROUNDIDLE:
    Hook WH_CALLWNDPROCRET:
    Hook WH_KEYBOARD_LL: 0x1030 (1) --> 0x1030 (1) -->
    Hook WH_MOUSE_LL:
    С WH_***_LL почему-то иногда ассоциированы не очень корректные хуки (как в примере). То есть, хук вроде и есть, а модуля, его содержащего, нет. Похоже, что они в таком случае не вызываются.

    Да, если число в скобочках из вывода обозначить за X, то X&1 отвечает за глобальность хука, а X&2 -- за "уничтоженность".

    Сорцы прилагаются.
    hxxp://redxak.co.cc/kernel/HookList.rar

    Буду признателен за отзывы и комментарии.