既然知道了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.16386 | Windows Vista | 0x003040B1, 0x003040F2 |
6.0.6001.18000 | Windows Vista SP1 | 0x00309AA3, 0x00309AE4 |
为了安全,一般建议,修改后的内核文件名为NTKR128G.EXE
温馨提示:修改核心文件具有风险,此文仅用于研究用途。