首页
社区
课程
招聘
[求助]Ring3下强制加载ntkrnlpa.exe,KeAddSystemServiceTable函数中尽然没重定位,请问这是什么原因?
发表于: 2012-3-6 07:58 3707

[求助]Ring3下强制加载ntkrnlpa.exe,KeAddSystemServiceTable函数中尽然没重定位,请问这是什么原因?

2012-3-6 07:58
3707
最近在学习Ring3下取原始SSDT Shadow,根据论坛资料,想通过定位 KeAddSystemServiceTable 函数中的

8d8840355580    lea     ecx,nt!KeServiceDescriptorTableShadow (80553540)[eax]
833900          cmp     dword ptr [ecx],0

这两句代码来找到 KeServiceDescriptorTableShadow 的基址。

代码如下:
tmpKernel   :=  LoadLibraryEx(tmpKrnlName, 0, DONT_RESOLVE_DLL_REFERENCES);
  if tmpKernel = 0 then Exit;

  //  获取 KeAddSystemServiceTable 函数地址
  FKASST      := Cardinal(GetProcAddress(tmpKernel, 'KeAddSystemServiceTable')) - tmpKernel;
  Form1.PrintLog(Format('KeAddSystemServiceTable:0x%.08x', [FKASST + FKernelBase]));

  //  开始查找特征 定位 'KeServiceDescriptorTableShadow
  for i := (FKASST+tmpKernel) to  FKASST + tmpKernel + $100 - 1 do
  begin
    if (PWord(i)^ = $888D) and (PWord(i+6)^ = $3983) then
    begin
      FKSDTS := PCardinal(i + 2)^;                                                            
      Form1.PrintLog(Format('KeServiceDescriptorTableShadow:0x%.08x', [FKSDTS - $400000])); //[FKSDTS - tmpKernel])); 这里居然要减默认基址0x400000 而不是当前基址,请问高人,为啥这里没有重定位?
      Form1.PrintLog(Format('KeServiceDescriptorTableShadow:0x%.08x', [FKSDTS - $400000 + FKernelBase]));
      Break;
    end;

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 210
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
晕,自己搞错了,不好意思,搞懂了。关帖
2012-3-6 09:29
0
游客
登录 | 注册 方可回帖
返回
//