список hooks

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

  1. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Привет!

    подскажите, как можно получить список установленных хуков, например на клавиатуру.



    спасибо
     
  2. ExeDel

    ExeDel New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2005
    Сообщения:
    6
    Адрес:
    My litle world
    Какая у тебя ОС ?
     
  3. ExeDel

    ExeDel New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2005
    Сообщения:
    6
    Адрес:
    My litle world
    Я делал прогу для W2000 SP(2). Но к сожалению по ряду причин она не переносимая.

    Ещё раз. Какая у тебя ОС ?
     
  4. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    2k sp2, кстати говоря :))

    а вообще хочется более-менее универсальное решение
     
  5. ExeDel

    ExeDel New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2005
    Сообщения:
    6
    Адрес:
    My litle world
    Проблема в том, что один адресс я не смог идентифицировать по имени. Тоесть он зависит от версии ОС и сервис-пака. Разве что ты сольёш дебаг символы и определишь симв.идентификатор этого адресса. Подозреваю что это внутрення переменная ;).
    Код (Text):
    1.  
    2. typedef struct _TABLE_DESCRIPTOR_USER
    3.     {
    4.         PDWORD pObject;
    5.         PDWORD TlsArray;
    6.         BYTE Type;
    7.         BYTE Flag;             
    8.         WORD CountNumber;
    9.     } TABLE_DESCRIPTOR_USER,
    10.         *PTABLE_DESCRIPTOR_USER,
    11.         **PPTABLE_DESCRIPTOR_USER;
    12.  
    13. typedef struct _OBJECT_USER_HOOK
    14. {
    15.     DWORD dwHANDLE_HOOK;
    16.     DWORD dwReference;//??
    17.     PDWORD TlsArray;
    18.     PDWORD DesktopObject;//??
    19.     DWORD dwCurrentAddrStruct;
    20.     DWORD uknow1;
    21.     DWORD dwTypeHOOK; //Тип хука. Вибираешь для клавы.
    22.     DWORD dwProc; //Адресс процедуры.
    23.     DWORD uknow2;
    24.     DWORD dwIndexMasAtom; //Самое интересное.
    25. } OBJECT_USER_HOOK,
    26.     *POBJECT_USER_HOOK,
    27.     **PPOBJECT_USER_HOOK;
    28.  


    Структуры, что описывают хуки.





    1) _TABLE_DESCRIPTOR_USER лежит по адрессу (у меня) 0x0A020000C.

    2) Бегаешь по ней и ищешь Type == 5. Это хук.

    3) Указатель pObject ссылается на OBJECT_USER_HOOK

    4) С первого элемента TlsArray получаешь указаль на ETHREAD (а там Id процесса и потока).

    5) А вот тут закавыка. dwIndexMasAtom если "-1" - то хук в проге. А если нет... Существует как известно две таблицы глобальных атомов - ntoskrnl и win32k. Точно сказать не могу, но это поле видимо или ещё одна внутренняя табличка или тупой масив (не помню). Если не "-1", то это индекс в таблице. У меня таблица по адрессу 0x0A018A2E0.
    Код (Text):
    1.  
    2. typedef struct _ARRAY_ATOM_HOOKS_DLL
    3. {
    4.     WORD atom[60];
    5.  
    6. } ARRAY_ATOM_HOOKS_DLL,
    7.     *PARRAY_ATOM_HOOKS_DLL,
    8.     **PPARRAY_ATOM_HOOKS_DLL;
    9.  


    Значения элементов в этой таблице - атомы win32k.sys.

    По сути это текстовые строки - полный путь к DLL. Идентифицировать эту заразу можно или с юзер режима GetClipboardFormatName или с кернела RtlQueryAtomInAtomTable.
     
  6. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    пасиб, будем пробовать :))
     
  7. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    IceStudent помог символами отладки. Загадочный масив называется - _aatomSysLoaded. В XP SP(1) лежит по адрессу 0xBF9973C0. Теоретически, можно сделать универсальный механизм, который вытягивает символ отладки, и говорит об адрессе масива драйверу.

    Кстати, вот окошко проги для отлова хуков. Правда работает утилитка пока ещё на W2K.

    [​IMG] _1231652058__hook.gif
     
  8. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    мдя

    а как ты делаеш unhook?
     
  9. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Мне ведь известен хендл хука:

    OBJECT_USER_HOOK->dwHANDLE_HOOK



    Вот и вызываю UnhookWindowsHookEx( dwHOOK ); со значением выбранного хендела.
     
  10. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Я тут с помощью NtObjects v2.9 смотрел на XP. Структура OBJECT_USER_HOOK страшно покорёжилась. :dntknw: Нужно заново её реверсировать. Из всех полей узнал только тип хука. Короче нужно брать Айс.
     
  11. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615


    Мне ведь известен хендл хука:

    OBJECT_USER_HOOK->dwHANDLE_HOOK



    Вот и вызываю UnhookWindowsHookEx( dwHOOK ); со значением выбранного хендела.


    мдя, не разглядел сразу :-((

    сэнкс
     
  12. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Итак. Даная утилита работает под Win2K SP(2) и WinXP SP(1). На остальных не проверял, поэтому работа на других ОС с другими сервис-паками заблокирована.



    Прога получает список глобальных хуков методом описаным выше. Размер 105 кб.

    http://rapidshare.de/files/9434063/AntiKeyLog.zip.html