前几天 HOOK PsLookupProcessByProcessId ,inline hook IAT hook不蓝屏 调用正常,但是EAT hook 蓝屏,没办法想到别的方法 HOOK MmGetSystemRoutineAddress,发现调用PsLookupProcessByProcessId ,让其返回PsLookupProcessByProcessId 地址,但是还是蓝屏,调试输出查看下没有问题上代码大家帮忙看看
NTSTATUS NewPsLookupProcessByProcessId(
HANDLE ProcessId,
PEPROCESS *Process
)
{
__asm
{
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90 // 前5字节实现原函数的头5字节功能
_emit 0x90 // 这个填充jmp
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90 // 这4字节保存原函数+5处的地址
_emit 0x90
_emit 0x90 // 因为是长转移,所以必须是 0x0080
}
}
NTSTATUS MyPsLookupProcessByProcessId(
HANDLE ProcessId,
PEPROCESS *Process
)
{
return NewPsLookupProcessByProcessId(ProcessId,Process);
}
PVOID MyNewMmGetSystemRoutineAddress (
__in PUNICODE_STRING SystemRoutineName
)
{
PVOID MmReturn = NULL;
__asm
{
push SystemRoutineName
Call [NewMmGetSystemRoutineAddress]
mov MmReturn,eax
}
if((DWORD)MmReturn == oldPsLookupProcessByProcessId)
{
(DWORD)MmReturn = (DWORD)MyPsLookupProcessByProcessId;
DbgPrint("函数名称:%wZ 函数地址:0x%08X\n",SystemRoutineName,MmReturn);
return oldPsLookupProcessByProcessId;//返回MyPsLookupProcessByProcessId就蓝屏,返回oldPsLookupProcessByProcessId 正常
}//*/
return MmReturn;
}
DebugView:
00000198 71.40333557 NewPsLookupProcessByProcessId:0xf440e260
00000199 71.40335083 MyPsLookupProcessByProcessId:0xf440e280
00000200 71.40379333 ###############################################
00000201 71.40381622 # 创建设备 #
00000202 71.40383911 ###############################################
00000203 71.40979004 函数名称:PsLookupProcessByProcessId 函数地址:0xF440E280 这里是HOOK MmGetSystemRoutineAddress的输出
00000204 283.88659668 watchdog!WdUpdateRecoveryState: Recovery enabled.
WinDbg:
lkd> u f440e280
f440e280 8bff mov edi,edi
f440e282 55 push ebp
f440e283 8bec mov ebp,esp
f440e285 83ec0c sub esp,0Ch
f440e288 c745f800000000 mov dword ptr [ebp-8],0
f440e28f c745fc00000000 mov dword ptr [ebp-4],0
f440e296 c745f49c030000 mov dword ptr [ebp-0Ch],39Ch
f440e29d 8d45fc lea eax,[ebp-4]
lkd> u f440e260
f440e260 8bff mov edi,edi
f440e262 55 push ebp
f440e263 8bec mov ebp,esp
f440e265 e9e946168c jmp nt!PsLookupProcessByProcessId+0x5 (80572953)
f440e26a 90 nop
f440e26b 90 nop
f440e26c 90 nop
f440e26d 90 nop
按照打印的输出结果和windbg里的内容 都是正确的。。。。。。。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课