2012年7月5日星期四

my_ssdt_hook.asm


;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

没有评论:

发表评论