关于对windows10 x64环境下gdt表10号索引项内容的探究

0x00背景

 

在写一个查看windows 内核资源的程序时,发现10号索引项既不是段描述符也不是门描述符且内容一直在改变,故想知道其中保存了什么内容。

环境说明:windows10 x64 1903

关于对windows10 x64环境下gdt表10号索引项内容的探究_第1张图片

上图中标红线的项即为10号索引项。

 

 0x01 过程

在gdt表10号索引项所在地址设置硬件写断点

 

关于对windows10 x64环境下gdt表10号索引项内容的探究_第2张图片

经过多次运行测试,发现一直中断在nt!SwapContext+0x3cb附近。

 

关于对windows10 x64环境下gdt表10号索引项内容的探究_第3张图片

中断时环境

 

关于对windows10 x64环境下gdt表10号索引项内容的探究_第4张图片

触发硬件中断时,执行的指令在中断位置的上一条指令。

mov     rcx,qword ptr [rbx-180h]

分析这条指令可知,rcx指向GDTBase。rax中保存着要设置的值。只要找到rax中的值,就可以知道此位置设置了什么值。

 

关于对windows10 x64环境下gdt表10号索引项内容的探究_第5张图片

搜索rbx所在内存区间以及rbx-180h,怀疑可能是指向prcb的地址

 

关于对windows10 x64环境下gdt表10号索引项内容的探究_第6张图片

  通过!prcb指令可以发现猜想正确。

 

关于对windows10 x64环境下gdt表10号索引项内容的探究_第7张图片

根据逻辑发现,只要找到rsi指向什么地方,就可以知道在rax设置了什么值

 

 在ida pro 中 查看SwapContext函数定义

 

关于对windows10 x64环境下gdt表10号索引项内容的探究_第8张图片

查看交叉引用,发现KiSwapContext调用此函数。

 

关于对windows10 x64环境下gdt表10号索引项内容的探究_第9张图片

 从SwapContext函数的第四个参数,发现rsi指向ethread结构

 

关于对windows10 x64环境下gdt表10号索引项内容的探究_第10张图片

 动态调试rsi和ethread的值相等也验证了ida pro 中的结论。

0x03结论

关于对windows10 x64环境下gdt表10号索引项内容的探究_第11张图片

在ida pro 中将相关结构补齐,分析相关逻辑可知 如果用户层是32位程序,则将teb的低32地址加0x2000后保存在gdt 目标位置。,如果是64位程序,则将_EPROCESS.UserFsBase的低32位保存在目标位置。

你可能感兴趣的:(关于对windows10 x64环境下gdt表10号索引项内容的探究)