在刚刚进入MyNtOpenProcess函数前,一直到ret 18h没有执行前
esp=b238ad50
1: kd> dd b238ad50
b238ad50 8054261c 0007f268 00000400 0007f238
b238ad60 0007f250 0007f25c 7c92e4f4 badb0d00
b238ad70 0007f21c b2d67d98 b2d67dcc 00000000
b238ad80 00000000 00000000 00000000 00000000
esp=b238ad48
1: kd> dd b238ad48
b238ad48 8260bf5f 8260bfd5 8054261c 0007f268
b238ad58 00000400 0007f238 0007f250 0007f25c
b238ad68 7c92e4f4 badb0d00 0007f21c b2d67d98
b238ad78 b2d67dcc 00000000 00000000 00000000
当ret 18h执行后,堆栈中的数据变了
1: kd> dd b238ad50
b238ad50 b238ad64 00000000 8260bf5f 00000008
b238ad60 00000246 0007f25c 7c92e4f4 badb0d00
b238ad70 0007f21c b2d67d98 b2d67dcc 00000000
b238ad80 00000000 00000000 00000000 00000000
1: kd> dd b238ad48
b238ad48 0007f22c 805cc3fc b238ad64 00000000
b238ad58 8260bf5f 00000008 00000246 0007f25c
b238ad68 7c92e4f4 badb0d00 0007f21c b2d67d98
b238ad78 b2d67dcc 00000000 00000000 00000000
NTSTATUS MyNtOpenProcess(
PULONG IsCallApi,
ULONG RetAddr,
PHANDLE ProcessHandle,
ACCESS_MASK AccessMask,
POBJECT_ATTRIBUTES ObjectAttributes,
PCLIENT_ID ClientId )
{
//DbgPrint("ProcessID:%d,ThreadId:%d\n",ClientId->UniqueProcess,ClientId->UniqueThread);
*IsCallApi=1;
return STATUS_SUCCESS;
}
汇编:
KernelHookLib!MyNtOpenProcess:
f8ac26b0 8bff mov edi,edi
f8ac26b2 55 push ebp
f8ac26b3 8bec mov ebp,esp
f8ac26b5 8b4508 mov eax,dword ptr [ebp+8]
f8ac26b8 c70001000000 mov dword ptr [eax],1
f8ac26be 33c0 xor eax,eax
f8ac26c0 5d pop ebp
f8ac26c1 c21800 ret 18h
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课