-
-
[原创]以下驱动代码蓝屏求解!-----根据特征码搜索未导出函数。
-
发表于:
2012-6-14 19:15
7609
-
[原创]以下驱动代码蓝屏求解!-----根据特征码搜索未导出函数。
ULONG GetPspTerminateProcessAddress()
{
ULONG ntoskrnlAddr, sizeofNtoskrnl, endNtoskrnlAddr ,i;
ULONG opcode1=0x8b55ff8b, opcode2=0xa16456ec, opcode3=0x00000124, opcode4=0x3b08758b;
KeSetSystemAffinityThread(1); //使当前线程运行在第一个处理器上
__asm{
push eax
push ebx
mov eax,fs:[0x34] ;得到KdVersionBlock的地址
add eax,18h ;得到指向PsLoadedModuleList的地址
mov eax,[eax] ;得到PsLodedModuleList的地址
mov eax,[eax] ;取出PsLoadedModuleList里面的内容,即KLDR_DATA_TABLE_ENTRY结构
mov ebx,[eax+18h] ;取出DllBase,即ntoskrnl.exe的基地址
mov ntoskrnlAddr, ebx
mov ebx, [eax+20h] ;取出模块的大小
mov sizeofNtoskrnl, ebx
pop ebx
pop eax
}
KeRevertToUserAffinityThread();//恢复线程运行的处理器
endNtoskrnlAddr = ntoskrnlAddr + sizeofNtoskrnl;
DbgPrint("ntoskrnlAddr: 0x%08x\nsizeofntoskrnl: %ul\n", ntoskrnlAddr,sizeofNtoskrnl);
for (i=ntoskrnlAddr; i<endNtoskrnlAddr; i++)
{
if (*(PULONG)i==opcode1 && *(PULONG)(i+4)==opcode2
&& *(PULONG)(i+8)==opcode3 && *(PULONG)(i+12)==opcode4)
{
DbgPrint("PspTerminateProcess: 0x%08X\n", i);
return i;
}
}
DbgPrint("我擦,找了半天没找到~ 可能是Windows版本的问题.\n");
return 0;
}
不知道怎么回事,我朋友说可以用的,但是我却怎么也蓝屏。
及时不用这种方法进行特征码搜索也会蓝屏....任何方法都无法使用。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课