Windows x64内核(2)——天堂之门
Windows x64内核
天堂之门简介
在x86-64 架构中,有一个特殊的机制可以让 CPU 在 64 位模式和 32 位模式之间进行切换。Heaven's Gate
就是利用这个机制,在 32 位环境下进入 64 位模式,从而执行 64 位代码并调用 64 位 API。
在长模式下(即 64 位处理器启用 64 位功能时),段选择子可以用来确定 CPU 运行在 64 位模式还是兼容模式。 (具体是CS段寄存器的L位,设置为1就是64位模式)
通过以下代码,32位程序可以转而执行64位汇编代码
1 | push 0x33 ; 将 64 位代码段选择子压入堆栈 |
实战一波
具体我们实验一下
1 |
|
只能用windbg来调试,其他调试器不行,其他调试器会跑飞
现在看这些代码,发现0x12c100F开始的代码并没有被正确地识别为x64的汇编因为此时还处于x86汇编模式下,cs段寄存器为0x23
当我们执行完retf,指令被识别成了x64汇编,此时cs为0x33,就是x64模式
那咋从x64回到x86嘞,我这有点问题,待解决…….
我发现如果三环程序写retfq这个指令根本写不出来,写retf也回不去x86架构,干脆直接call far得了 cs:eip。。。。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Cc12138's blog!