我今天hook了shadow ssdt 表的NtUserGetMessage, 但是在取消hook的时候就蓝屏了, 用KernelDetecive恢复就不会蓝屏, 但是我自己attach到csrss进程, 然后关闭保护, 然后取消hook就蓝屏了, 取消hook其他函数都没有蓝屏, 就这个函数在取消的时候蓝屏了, 这是为什么?
代码如下:
#pragma PAGEDCODE
void openProtection(){
__asm //恢复页保护
{
mov eax,cr0
or eax,10000h //or eax,not 0FFFEFFFFh
mov cr0,eax
sti
}
}
#pragma PAGEDCODE
void closeProtection(){
__asm //去掉页面保护
{
cli
mov eax,cr0
and eax,not 10000h //and eax,0FFFEFFFFh
mov cr0,eax
}
}
//获取csrss的进程id
HANDLE GetCsrssPid()
{
HANDLE Process, hObject;
HANDLE CsrId = (HANDLE)0;
OBJECT_ATTRIBUTES obj;
CLIENT_ID cid;
UCHAR Buff[0x100];
POBJECT_NAME_INFORMATION ObjName = (POBJECT_NAME_INFORMATION)&Buff;
PSYSTEM_HANDLE_INFORMATION_EX Handles;
ULONG r;
Handles = (PSYSTEM_HANDLE_INFORMATION_EX)GetInfoTable(SystemHandleInformation);
if (!Handles) return CsrId;
for (r = 0; r < Handles->NumberOfHandles; r++)
{
if (Handles->Information[r].ObjectTypeNumber == 21) //Port object
{
InitializeObjectAttributes(&obj, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);
cid.UniqueProcess = (HANDLE)Handles->Information[r].ProcessId;
cid.UniqueThread = 0;
if (NT_SUCCESS(NtOpenProcess(&Process, PROCESS_DUP_HANDLE, &obj, &cid)))
{
if (NT_SUCCESS(ZwDuplicateObject(Process, (HANDLE)Handles->Information[r].Handle,NtCurrentProcess(), &hObject, 0, 0, DUPLICATE_SAME_ACCESS)))
{
if (NT_SUCCESS(ZwQueryObject(hObject, ObjectNameInformation, ObjName, 0x100, NULL)))
{
if (ObjName->Name.Buffer && !wcsncmp(L"\\Windows\\ApiPort", ObjName->Name.Buffer, 20))
{
CsrId = (HANDLE)Handles->Information[r].ProcessId;
}
}
ZwClose(hObject);
}
ZwClose(Process);
}
}
}
ExFreePool(Handles);
return CsrId;
}
BOOLEAN cancelShadowSSDTHook(){
PEPROCESS crsEProc;
if (!NT_SUCCESS(PsLookupProcessByProcessId((ULONG)GetCsrssPid(), &crsEProc)))
{
DbgPrint("PsLookupProcessByProcessId() error\n");
return FALSE;
}
KeAttachProcess(crsEProc);
closeProtection();
*(ULONG *)(*(ULONG *)(getShadowSSDT() + 0x10) + index * 4) = beforeHook;
openProtection();
pShadowSSDTHookInfo->isHook = FALSE;
KeDetachProcess();
return TRUE;
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课