;filename:my_ssdt_hook.asm
;made by correy
;QQ:112426112
;Email:leguanyuan at 126 dot com
;HomePage:http://correy.webs.com
;不足之处敬请指点
;还有可以改进的地方。
.386
.model flat, stdcall
option casemap:none
include ntddk.inc
include ntoskrnl.inc
includelib ntoskrnl.lib
.code
yy dd 0
correy db "ZwOpenProcess is called",0
myOpenProcess PROc x1:dword,x2:dword,x3:dword,x4:dword
pushad
pushfd
invoke DbgPrint,offset correy;打印一个信息。
push x4 ;调用原来的函数。
push x3
push x2
push x1
call yy
mov r,eax
popfd
popad
mov eax,r
ret
r dd 0 ;这样也可以定义变量,并且是初始化的。
myOpenProcess endp
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
local y:dword
local tem:dword
push eax;另一种办法是mdl,甚么的。
mov eax, cr0;
mov tem, eax;
and eax, 0FFFEFFFFh;
mov cr0, eax;
pop eax;
mov eax,KeServiceDescriptorTable;这是个变量还是个函数呀!在头文件里面。
mov eax,[eax]
mov eax,[eax]
add eax,760;488 ;在windows xp 32位上是:7ah*4,windows 7-32位上是0beh*4,我想较好的办法是在ntoskrnl.exe里面搜索。
mov y,eax ;存储函数的地址的地址。其实这个变量可以不要。
mov eax,[eax]
mov yy,eax ;保存原来函数的地址,另一种办法是:MmGetSystemRoutineAddress
mov eax,offset myOpenProcess ;这三行是赋予新的函数的地址。
mov edx,y
mov dword ptr [edx],eax
push eax; 不用说了吧!
mov eax,tem
mov cr0, eax;
pop eax;
mov eax,0
ret
DriverEntry endp
end DriverEntry
;没有卸载函数。你找工具卸载吧!
;made at 2011.06.17
没有评论:
发表评论