AB_Celitel
Гость
|
|
« : 13-07-2005 10:42 » |
|
Приветствую всех! Я меня прблема, написал драйвер перехватчик на асме. Работает нормально, но не передаётся управление на мою перехватчик-функцию. Ниже привожу кусок кода из моего драйвера, где я думаю возможно ошибка.
.data true_addr dd 0 dbg_mes_sethk db "set hook",0 dbg_mes_fromhook db "from hookproc",0 dbg_mes_delhk db "del hook",0
DriverEntry proc
local CR0Reg:dword
... ... ...
; Set Hook mov eax,CR0 mov CR0Reg,eax and eax,0FFFEFFFFh mov CR0,eax
mov edx,KeServiceDescriptorTable mov eax,dword ptr [edx] ; ntoskrnl.ServiceTable
mov ecx,dword ptr [eax+(7ah*4h)] ; true_addr = = KeServiceDescriptorTable->ntoskrnl.ServiceTable[7Ah] 7ah - индекс OpenProcess в SDT
mov true_addr,ecx ; mov ecx,offset hookprocapi ; KeServiceDescriptorTable-> ->ntoskrnl.ServiceTable[7Ah] = = hookprocapi mov dword ptr [eax+(7ah*4h)],ecx ;
mov eax,CR0Reg mov CR0,eax
invoke DbgPrint, addr dbg_mes_sethk ... ... DriverEntry endp
;****** Функция-перехватчик****** hookprocapi proc invoke DbgPrint, addr dbg_mes_fromhook
jmp dword ptr [true_addr]
ret hookprocapi endp ;**********************
DriverUnload proc
local CR0Reg:dword
; del Hook mov eax,CR0 mov CR0Reg,eax and eax,0FFFEFFFFh mov CR0,eax
mov edx,KeServiceDescriptorTable mov edx,dword ptr [edx] mov ecx,true_addr mov dword ptr [edx+(7ah*4h)],ecx
mov eax,CR0Reg mov CR0,eax
invoke DbgPrint, addr dbg_mes_delhk
... ... ...
ret
DriverUnload endp
Так вот, проблема в том, что на hookprocapi вызов не приходит. Если кто-нибудь знает причину (или хотя бы догадывается) прошу написать. Заранее спасибо. P.S. Если нужно могу выслать драйвер целиком
|