服务器 频道

谁限制了4GB内存 32位Vista大内存实战

  既然知道了32位Vista通过ZwQueryLicenseValue函数来决定系统能使用多少内存,而不是通过编写内存管理功能时就加上的限制,那么相对来说,让32位Windows突破4GB的限制就比较简单了。

  启动时系统在NTKRNLPA.EXE内核文件中使用了这样的代码:

 

Opcode Bytes
操作码
Instruction
汇编指令
7C xx
jl      default
8B 45 FC
mov     eax,dword ptr [ebp-4]
85 C0
test    eax,eax
74 yy
je      default

  执行中,eax寄存器中保存了ZwQueryLicenseValue的状态值,在通常情况下,系统跳转到default代码段,不允许使用超过4GB容量内存,通过简单的修改就可以让系统认为ZwQueryLicenseValue返回128GB的可用容量:

Opcode Bytes
操作码
Instruction
汇编指令
B8 00 00 02 00 
mov     eax,00020000h 
90
nop
90
nop

  nop是空操作的意思(no operation),20000h就代表着128GB(16进制值)。以下是上述指令在英文版本Vista上的位置:

Version
版本号
Package
版本
File Offsets
文件偏移量
6.0.6000.16386Windows Vista0x003040B1, 0x003040F2
6.0.6001.18000Windows Vista SP10x00309AA3, 0x00309AE4

为了安全,一般建议,修改后的内核文件名为NTKR128G.EXE

  温馨提示:修改核心文件具有风险,此文仅用于研究用途。

0
相关文章