首页
社区
课程
招聘
原创]DELPHI在RING3得到核心基地址
发表于: 2009-2-4 06:28 5489

原创]DELPHI在RING3得到核心基地址

2009-2-4 06:28
5489
2000的核心是:ntoskrnl.exe
xp核心是:    ntkrnlpa.exe
//我猜,其实找到的第一个模块就是所谓的核心模块

难怪这两天找内核函数的地址老是找错。

网上抄来抄去的文章比较多,一般有点过时,不能直接用起来的,但是很好的参考。

发个改过的找核心基地址的函数,容易懂些。

function ZwQuerySystemInformation(SystemInformationClass:SYSTEM_INFORMATION_CLASS; SystemInformation: Pointer; Length: DWORD; var ReturnLength: DWord): DWORD;stdcall;external 'NTDLL.DLL'; //按DELPHI的习惯定义,网上能找到的定义不是太好

procedure Test;
var
    Buf: array of Byte;
    cbRet: WORD;
    ModuleInformation: PSYSTEM_MODULE_INFORMATION;
    Count: PDWORD;
    I: Integer;
begin

  if not EnabledDebugPrivilege(true) then Exit; //提到Debug权限,不然要出错的

  ZwQuerySystemInformation(SystemModuleInformation, nil, 0, cbRet); //测试需要的BUF大小,看到用循环的头疼

  SetLength(buf, cbRet);
  if ZwQuerySystemInformation(SystemModuleInformation, @Buf[0], cbRet, cbRet) <> STATUS_SUCCESS then
    Exit;

  Count := PDWORD(@Buf[0]);  //猜中了,是所有系统模块的个数

  ModuleInformation := PSYSTEM_MODULE_INFORMATION(@Buf[4]);

  for I := 1 to Count^  do
  begin
      if Pos('ntkrnlpa.exe', ModuleInformation.ImageName) >= 1 then
      begin
          ShowMessage('KernelBase: ' + IntToHex(DWORD(ModuleInformation.Base), 8));
         //如前面所说,第一个就是系统核心,还可以顺便把2000和XP区分开来
          break;
      end;
      
      Inc(ModuleInformation);
  end;
end;

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 214
活跃值: (24)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
2000的核心是:ntoskrnl.exe
xp核心是:    ntkrnlpa.exe
---------------------------------------
这个说法是错的。
2009-2-4 09:00
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

不管对和错,我现在认定找出来的一个系统模块就是核心

2009-2-4 11:15
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
同意,楼主可以参考一下《Windows Internals 4e》。
2009-2-4 13:33
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我现在是越来越迷糊

在我的机器上(xp sp3)上面,两个文件都有
开始我用的是ntoskrnl.exe,发现核心调用(SSDT)地址都是错误的,
后来用ZwQuerySystemInformation找到的第一个模块(ntkrnlpa.exe ),发现Kernel base跟WinDBG的一样,得到的SSDT内容也一样。

核心到底是什么?也许不同版本的WINDOWS都是不一样的吧

我在做一个查看内核代码的小软件(Ring3),WinDbg对于我来太复杂,太不顺手
2009-2-4 17:18
0
游客
登录 | 注册 方可回帖
返回
//