验证Windows内核的TLB

admin 2021年7月24日09:21:16评论85 views字数 1783阅读5分56秒阅读模式
前言


    首先打个广告哈,论坛还差九个邀请码了。现在19.9一张低价处理了,更新的全是干货

购买链接

https://www.junwfk.com//details/93701CD3

扫描二维码购买:

验证Windows内核的TLB

验证Windows内核的TLB

验证Windows内核的TLB


1.TLB种类

    TLB在X86体系的CPU中的实际应用最早是从Intel的486CPU开始的,在X86体系的CPU中,一般都设有如下4组TLB:

第一组:缓存一般页表(4K字节页面)的指令页表缓存(Instruction-TLB);

第二组:缓存一般页表(4K字节页面)的数据页表缓存(Data-TLB);

第三组:缓存大尺寸页表(2M/4M字节页面)的指令页表缓存(Instruction-TLB);

第四组:缓存大尺寸页表(2M/4M字节页面)的数据页表缓存(Data-TLB)

    具体TLB的详情可以去网上看。本节主要讲解用代码验证TLB功能。


2.验证TLB的存在

    实现方式,通过门提权到零环进入到指定的函数来进行实现tlb的功能。

    这里我构建的调用门

kd> r gdtrgdtr=80b99000kd> dq 80b9900080b99000  00000000`00000000 00cf9b00`0000ffff80b99010  00cf9300`0000ffff 00cffb00`0000ffff80b99020  00cff300`0000ffff 80008b1e`400020ab80b99030  834093f6`cc003748 0040f300`00000fff80b99040  0000f200`0400ffff 0040ec00`00081005 //门80b99050  830089f6`a0000068 830089f6`a068006880b99060  00000000`00000000 00000000`0000000080b99070  800092b9`900003ff 00000000`00000000

    之后跳转到门,通过call跳转。

int main(int argc, char* argv[]){  char buf[6] = {0,0,0,0,0X48,0};  printf("%xn",test);  __asm{    pushad;    pushfd;    push fs;    call fword ptr buf;    pop fs;    popfd;    popad;  }  printf("%xn",temp);  return 0;
}

    看一下我们的TLB实现函数(这里就是门跳转过来的函数),首先给0地址挂一个物理页(0x01234867),我这里是随机挂的...只能保佑别蓝屏。在将12345678写入到0地址内。之后又重新给0地址挂一个物理页(0x02345867),然后将读到的值保存到temp里面。

void __declspec(naked) test(){    __asm{
    mov dword ptr ds:[0XC0000000],0x01234867; mov dword ptr ds:[0],0x12345678;/* mov ecx,cr3; mov cr3,ecx; //刷新TLB*/ mov dword ptr ds:[0XC0000000],0x02345867; mov eax,dword ptr ds:[0]; mov temp,eax; retf;
}}

    按正常来说,可能不了解TLB的人会感觉输出的是0x02345867的值,但是我们运行程序看一下,发现值还是0x01234867物理页的值。

验证Windows内核的TLB

    那么如何刷新TLB,其实在进程切换的时候,TLB就会进行刷新。所以将cr3刷新即可。

void __declspec(naked) test(){    __asm{
mov dword ptr ds:[0XC0000000],0x01234867; mov dword ptr ds:[0],0x12345678;
mov ecx,cr3; mov cr3,ecx; //刷新TLB
mov dword ptr ds:[0XC0000000],0x02345867; mov eax,dword ptr ds:[0]; mov temp,eax; retf;
}}

    在看一下运行结果,发现TLB成功被刷新

    

验证Windows内核的TLB



                        


 微信搜索关注 "安全族" 长期更新安全资料,扫一扫即可关注安全族!

验证Windows内核的TLB



本文始发于微信公众号(安全族):验证Windows内核的TLB

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年7月24日09:21:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   验证Windows内核的TLBhttps://cn-sec.com/archives/379215.html

发表评论

匿名网友 填写信息