-
-
[求助]Ring3下强制加载ntkrnlpa.exe,KeAddSystemServiceTable函数中尽然没重定位,请问这是什么原因?
-
-
[求助]Ring3下强制加载ntkrnlpa.exe,KeAddSystemServiceTable函数中尽然没重定位,请问这是什么原因?
最近在学习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;
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!