我在写一个inline hook NtOpenProcess的驱动总是蓝屏,不知道什么原因,搞了半天还没找出到底哪的问题!!!大牛给看下!!!
(没装杀毒软件,内核是干净的)
进行hook操作的函数如下:
void InlineHookZwOpenProcess()
{
ULONG ServiceIndex;
PMDL pmdl;
ServiceIndex=*(ULONG *)((PCHAR)&ZwOpenProcess+1);
if(ServiceIndex>KeServiceDescriptorTable.NumberOfServices )
{
DbgPrint("Serviceindex is error:%x\n",ServiceIndex);
DbgPrint("ZwOpenProcessAddr is:%x\n",&ZwOpenProcess);
return;
}
pmdl=MmCreateMdl(NULL,KeServiceDescriptorTable.ServiceTableBase,4*KeServiceDescriptorTable.NumberOfServices);
if(pmdl==NULL)
{
DbgPrint("CreateMdl fail\n");
return;
}
MmBuildMdlForNonPagedPool(pmdl);
pmdl->MdlFlags=pmdl->MdlFlags |MDL_MAPPED_TO_SYSTEM_VA ;
PULONG BaseAddr=(ULONG *) MmMapLockedPages(pmdl,KernelMode);
OldNtOpenProcessAddr=BaseAddr[ServiceIndex];
DbgPrint("Old NtOpenrocess addr is%x",OldNtOpenProcessAddr);
MmUnmapLockedPages((PVOID)BaseAddr,pmdl);
IoFreeMdl(pmdl);
RtlCopyMemory(&SaveLog,(UCHAR *)OldNtOpenProcessAddr,5);
KeInitializeSpinLock(&SpinLock);
KeAcquireSpinLock(&SpinLock,&kirql);
*(PUCHAR)OldNtOpenProcessAddr=0xE9;
*(PULONG)(OldNtOpenProcessAddr+1)=(ULONG)&NewZwOpenProcess;
KeReleaseSpinLock(&SpinLock,kirql);
}
跳转到的函数如下,这个只是简单的跳转,想不到都会蓝屏!!!
__declspec(naked)
NewZwOpenProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL
)
{
__asm
{
mov eax,NtOpenProcess
add eax,5
push 0C8h
jmp eax
}
}
拜托高手给看下那错了啊!!!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课