• VT MSR、CR、 Exception、#PF


    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

    VT MSR、CR、 Exception、#PF

    1. MSR寄存器读写拦截

        开启虚拟机控制字段:VM-execution control[28] 置为1时,则开启 MSR BitMap;

      ② 开启MSR BitMap时,我们需要申请一块 4KB内存,作为 MSR_BitMap,其构造如下图:

        

      ③ 当申请好BitMap并设置好对应拦截的,使用 __vmx_vmwrite,向 MsrBitMapAddress 字段填入 MSR_BitMap的物理地址;

      ④ VM-Exit Reason 其 RDMSR 与 WRMSR 的错误码分别是 31 与 32,拦截下来即可;

      ⑤ 对于这部分的处理,如果我们想走正常流畅,其指令解析如下,我们自己调用 rdmsr rcx,读出的结果分别存储到 rax 与 rdx 中。

         

    2. CR3寄存器读写拦截

       ① VM-execution control 第 15 、16 是关于CR3读写拦截的;

      ② 除此之外,其还规定了 CR3_TARGE_COUNT 、CR3_TARGE_VALUE0、CR3_TARGE_VALUE1、CR3_TARGE_VALUE2、CR3_TARGE_VALUE3字段;

      ③ 其拦截规则是当其 CR3 不属于 VALUE 0-3 时,则会产生VM-Exit,否则不会产生;

      ④ 其Exit-Reason中有相关Exit原因,重点是 EXIT_QUALIFICATION,当退出原因是CR寄存器时,其EXIT_QUALIFICATION的字段如下:

        我们根据如下信息,很好判断其各种属性

         

     3. Exception拦截

      其存在一个 Exception BitMap位,当产生异常时,其会检查该Bitmap相关位是否值1,如果置1则产生Exit;

      比如,我们想要拦截 0xE 事件,则 EXCEPTION_BITMAP |= (1<<0xE),来将有关置位即可;

      当我们接管有关异常时,我们大概率无法自己处理,此时我们还要继续交给操作系统来进行处理;

      因此我们要使用事件注入,将有关异常事件注入进去,让系统自己执行。

    4. #PF异常的处理拦截特点

      #PF异常应该是操作系统中最常见的异常,Intel VT 对其进行了拓展,其多出了 PEFC_MASK 与 PEFC_MATCH;

      简单来说,就是当产生 #PF异常时,其会存在一个 #PF码 - PEFC,PEFC & PEFC_MSAS == PEFC_MATCH时,会产生Exit;

      其详细情况看《处理器虚拟化技术》即可,其结构如下图

      

  • 相关阅读:
    Windows server 2008 R2远程桌面授权破解方法
    微软 windows server 2019 中文版 原版iso镜像下载地址及密钥
    Everything——支持快速搜索文件夹
    相对路径(根目录、当前目录、上级目录)
    LinkShellExtension (软连接、硬连接、符号连接)工具教程
    oracle 获取表信息
    python3.6 安装 pycrypto
    项目问题记录
    Django得缓存
    Django得信号
  • 原文地址:https://www.cnblogs.com/onetrainee/p/13590000.html
Copyright © 2020-2023  润新知