Hook функций в драйвере не из SDT

Тема в разделе "WASM.WIN32", создана пользователем VOOrDOOluck, 22 сен 2004.

  1. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    Hook функций в драйвере не из SDT

    Всем привет

    Помогите пожалуйста с хуками в дровах.

    В принципе нужно только RtlClearBits обработать и скорее всего в системном потоке.

    Заранее спасибо
     
  2. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    Очень примерно, но это будет так(один из вариантов). У меня так куча хуков, но чуть по-сложнее. За какие-то ошибки не ругать-писал принцип.



    ..

    myaddr offset hookfunction

    myaddr_j dw 025FFh

    myaddr_r dd offset myaddr



    mydump_1 dw ?

    mydump_2 dd ?

    ...

    .code

    ...



    lea esi,RtlClearBits@12

    mov eax,dword ptr [esi]

    cmp eax,signature_4b

    jnz exit_bad

    movzx ax,word ptr [esi+4]

    cmp ax,signature_2b

    jnz exit_bad

    ;it's Ok



    mov ebx,esi

    mov edi,offset mydump_1

    mov ecx,6

    cld

    rep movsb



    mov edi,ebx

    mov esi,offset myaddr_j

    mov ecx,6

    rep movsb



    ..

    ..

    ..

    hookfunction proc

    pushfd

    pusha

    .....

    popa

    popfd

    jmp [mydump_2]

    hookfunction endp
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    VOOrDOOluck, дизасмни DebugView от sysinternals.com, да посмотри. Там хучится DbgPrint и, небось, всё грамотно сделано.
     
  4. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    Four-F

    Всего то и делов.Рановато для меня такое.Я себе больше проблем создам.Насчет грамотности не сомневаюся (filemon & regmon это просто офигенее).



    Тут нашел пример хука (from rootkit)на asm/с.Принцип как и везде (jmp)но даже для меня далекого от asm вполне понятно и очень удобно.



    Всем спасибо за внимание

    [​IMG] _850265505__hook_example.c
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Нужно ещё добавить рамапинг, ибо точка входа хукаемой функции запросто может находится на read-only памяти.


    Код (Text):
    1.  
    2. VOID
    3.   RemapDbgPrint(
    4.     VOID
    5.     )
    6. {
    7.  
    8.     PMDL    pMdl;
    9.  
    10.     pMdl = MmCreateMdl( NULL, g_pfnDbgPrint, PAGE_SIZE );
    11.  
    12.     MmBuildMdlForNonPagedPool( pMdl );
    13.  
    14.     g_pfnDbgPrint = MmMapLockedPages( pMdl, KernelMode );
    15.  
    16. }
    17.  
    18.  
    19. call    RemapDbgPrint
    20. mov     ecx, pfnDbgPrint
    21. mov     word ptr [ecx], 25FFh
    22. mov     dword ptr [ecx+2], offset DbgPrintHook
    23.  
     
  6. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    Four-F

    g_pfnDbgPrint- это указатель на функцию?

    Пару вопросов

    Как правильно хучить DbgPrint.Я на скорую руку попробовал но там фигня выходила из за параметров (LPCSTR ddd,...)

    Как это троеточие правильно обработать



    И еще.В примерах хуков (через длл) для хука функции из длл нужно делать подмену для получения результата в конкретном просеце или во всех.Почему из драйверов один хук контролирует все процесы.Ведь сам хук ставится в system контексте то какое отношение к нему имеют другие просецы, функции которых вызываются не из контекста system.
     
  7. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    [ VOOrDOOluck: <font color="indigo]Как правильно хучить DbgPrint.Я на скорую руку попробовал но там фигня выходила из за параметров (LPCSTR ddd,...)</font><!--color--> ]



    Наверное, также как это делает DbgPrint, wsprintf и т.п. - парсить форматную строку и считать '%'. Сколько этих плюшек, столько и параметров после LPCSTR. А можно заглянуть за вызов DbgPrint и посмотреть сколько DWORD'ов со стека убирается.





    [ VOOrDOOluck: <font color="indigo]И еще.В примерах хуков (через длл) для хука функции из длл нужно делать подмену для получения результата в конкретном просеце или во всех.</font><!--color--> ]



    Это я не очень понял.





    [ VOOrDOOluck: <font color="indigo]Почему из драйверов один хук контролирует все процесы.Ведь сам хук ставится в system контексте то какое отношение к нему имеют другие просецы, функции которых вызываются не из контекста system.</font><!--color--> ]



    Если хукаются функции ядра, то в каком контексте ставится хук не имеет никакого значения. Ядерное пространство оно одно, т.е. глобально.
     
  8. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    [ VOOrDOOluck: <font color="indigo]g_pfnDbgPrint- это указатель на функцию?</font><!--color--> ]



    Забыл ответить. Да, конечно.



    На сайте лежат исходники RegMon. Там должен быть файлик regsrc\lib\reglib.c - позыркай.
     
  9. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    Four-F

    насчет первого(параметров)спасибо, понял.

    насчет второго.Третий вопрос все решил.

    насчеит третьего.Возьмем на заметку.

    СПАСИБО