InLineHookSSDT

//当Ring3调用OpenProcess

//1从自己的模块(.exe)的导入表中取值

//2Ntdll.dll模块的导出表中执行ZwOpenProcess(取索引 进入Ring0层)

//3进入Ring0 从Ntoskernel.exe模块的导出表中执行ZwOpenProcess(取索引 获得SSDT服务地址)

//4通过索引在SSDT表中取值(NtOpenProcess的地址)

//5真正调用NtOpenProcess函数

在真正调用OpenProcess后 可以通过修改里面跳转函数的地址 从而HookSSDT

 1     /*
 2     kd> u NtOpenProcess
 3     nt!NtOpenProcess:
 4     fffff800`0415d2ec 4883ec38        sub     rsp,38h
 5     fffff800`0415d2f0 65488b042588010000 mov   rax,qword ptr gs:[188h]
 6     fffff800`0415d2f9 448a90f6010000  mov     r10b,byte ptr [rax+1F6h]
 7     fffff800`0415d300 4488542428      mov     byte ptr [rsp+28h],r10b
 8     fffff800`0415d305 4488542420      mov     byte ptr [rsp+20h],r10b
 9     fffff800`0415d30a e851fcffff      call    nt!PsOpenProcess (fffff800`0415cf60)
10     fffff800`0415d30f 4883c438        add     rsp,38h
11     fffff800`0415d313 c3              ret
12     */

win7_64中OpenProcess

 1 /*
 2 u ZwOpenProcess
 3 nt!ZwOpenProcess:
 4 805016b4 b87a000000      mov     eax,7Ah
 5 805016b9 8d542404        lea     edx,[esp+4]
 6 805016bd 9c              pushfd
 7 805016be 6a08            push    8
 8 805016c0 e88c0d0400      call    nt!KiSystemService (80542451)
 9 805016c5 c21000          ret     10h
10 nt!ZwOpenProcessToken:
11 805016c8 b87b000000      mov     eax,7Bh
12 805016cd 8d542404        lea     edx,[esp+4]
13
14 */

WinXP中OpenProcess

首先获得SSDT的地址

在SSDT中查找OpenProcess的Index

保存原来函数地址 (在卸载驱动时要恢复回去);

修改ZwOpenProcess中的跳转函数

http://www.cnblogs.com/yifi/p/4968755.html

时间: 2024-10-12 09:56:46

InLineHookSSDT的相关文章