· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Hook функций в драйвере не из SDT

Посл.отвђт Сообщенiе


Дата: Сен 22, 2004 16:58:21

Hook функций в драйвере не из SDT
Всем привет
Помогите пожалуйста с хуками в дровах.
В принципе нужно только RtlClearBits обработать и скорее всего в системном потоке.
Заранее спасибо


Дата: Сен 22, 2004 18:33:05

Очень примерно, но это будет так(один из вариантов). У меня так куча хуков, но чуть по-сложнее. За какие-то ошибки не ругать-писал принцип.

..
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


Дата: Сен 23, 2004 02:16:56

VOOrDOOluck, дизасмни DebugView от sysinternals.com, да посмотри. Там хучится DbgPrint и, небось, всё грамотно сделано.


Дата: Сен 27, 2004 17:45:00

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

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

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

_850265505__hook_example.c


Дата: Сен 28, 2004 15:02:58

Нужно ещё добавить рамапинг, ибо точка входа хукаемой функции запросто может находится на read-only памяти.
VOID
  RemapDbgPrint(
    VOID
    )
{

    PMDL    pMdl;

    pMdl = MmCreateMdl( NULL, g_pfnDbgPrint, PAGE_SIZE );

    MmBuildMdlForNonPagedPool( pMdl );

    g_pfnDbgPrint = MmMapLockedPages( pMdl, KernelMode );

}


call    RemapDbgPrint
mov     ecx, pfnDbgPrint
mov     word ptr [ecx], 25FFh
mov     dword ptr [ecx+2], offset DbgPrintHook


Дата: Сен 28, 2004 16:41:46

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

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


Дата: Сен 28, 2004 18:34:10

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

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


[ VOOrDOOluck: И еще.В примерах хуков (через длл) для хука функции из длл нужно делать подмену для получения результата в конкретном просеце или во всех. ]

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


[ VOOrDOOluck: Почему из драйверов один хук контролирует все процесы.Ведь сам хук ставится в system контексте то какое отношение к нему имеют другие просецы, функции которых вызываются не из контекста system. ]

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


Дата: Сен 29, 2004 13:18:06

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

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

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


Дата: Сен 30, 2004 16:39:12

Four-F
насчет первого(параметров)спасибо, понял.
насчет второго.Третий вопрос все решил.
насчеит третьего.Возьмем на заметку.
СПАСИБО


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.044