首先要知道Ring3层调用OpenProcess的流程

//当Ring3调用OpenProcess
//1从自己的模块(.exe)的导入表中取值

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

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

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

//5真正调用NtOpenProcess函数

我们可以通过在第4部通过索引将NtOpenProcess 换成 Base[索引] = FakeNtOpenProcess;

1.我们要获取SSDT的结构信息

XP 32位的SSDT在Ntos模块导出表中有

 1 //SSDT表的基地址32位(4Bytes)64位(8Bytes)
 2 //XP 32位Ntos模块导出表中有   Win7 64 Ntos模块导出表中无
 3 BOOLEAN GetSSDTAddressInWinXP_X86(ULONG32* SSDTAddress)
 4 {
 5     //从NtosKernel.exe 模块中的导出表获得该导出变量  KeServiceDescriptorTable
 6 
 7     /*
 8     kd> dd KeServiceDescriptorTable
 9     80563520  804e58a0 00000000 0000011c 805120bc
10     */
11     *SSDTAddress = NULL;
12     *SSDTAddress = (ULONG32)GetExportVariableAddressFormNtosExportTableByVariableName(L"KeServiceDescriptorTable");
13 
14     if (*SSDTAddress!=NULL)
15     {
16         return TRUE;
17     }
18 
19     return FALSE;
20 }
获取SSDT的地址32

相关文章:

  • 2021-12-25
  • 2021-07-22
  • 2021-11-21
  • 2021-12-12
  • 2021-12-18
  • 2021-06-26
  • 2022-01-29
  • 2021-12-13
猜你喜欢
  • 2021-10-27
  • 2021-06-27
  • 2022-12-23
  • 2021-12-05
  • 2022-01-19
  • 2021-08-04
  • 2022-01-23
相关资源
相似解决方案