VT Msr Hook Syscall

2023-11-18

VT Msr Hook Syscall

什么是系统调用

  • 系统调用是内核提供给应用层的接口,比如在 win10x64 应用层打开一个应用,其实就是 explorer 调用了 CreateProcess,这个函数通过 NTDLL 调用表的 0xC8 号服务,执行 SYSCALL 进入内核。
  • 内核从 SSDT 服务表确定了函数参数个数,复制到内核栈中,取出对应内核函数地址,再 CALL 这个地址。
  • 执行创建进程的一系列操作后,用 SYSRET 返回到应用层,返回到调用 SYSCALL 的地方,这就完成了一次系统调用。

VT如何拦截系统调用

  • VT 不需要修改任何系统代码,只修改 MSR 寄存器,就可以达到 Hook 的目的。
  • MSR_LSTAR 这个特殊寄存器里存放的是 SYSCALL 的入口地址,我们只需要写个替换函数,把地址写入这个 MSR 即可完成挂钩,同时也要保存旧的 SYSCALL 地址。
  • PatchGuard 是微软的用来保护内核的模块,它会检查这个 MSR 是否被修改过,修改过会给个 109 蓝屏。
  • 我们可以利用VT技术对读 MSR 进行拦截,如果它读取了这个 MSR 我们给它返回旧的 SYSCALL 地址,就可以欺骗 PatchGuard。

代码流程如下:

  1. 我们要在 VT 基础框架上加些代码
  2. 申请用来 保存MSR 的内存,和 MSR位图 的内存,写入到 VMCS 对应的字段中。
  3. 设置读取 MSR_LSTAR 的 MSR位图 监控。
  4. 编写一个用来替换 MSR_LSTAR 的汇编函数。
  5. 读取并保存旧的 MSR_LSTAR。
  6. 将替换函数按照格式写入 保存MSR 的内存。
  7. 设置 VMCS 的 VM进入控制 加载MSR个数为1。
  8. 在 VMM 的 VM退出 事件处理例程里处理 读取 MSR_LSATR 的事件,返回保存的旧 SYSCALL 地址。
  9. 卸载的时候,只需要把旧的 SYSCALL 地址按格式写回到 保存MSR 的地方。
  10. 取消读取 MSR_LSTAR 的 MSR位图 监控。

注意事项:
如果拦截所有系统调用的话,不要打印,调用非常频繁,所有的核都在忙着打印,windbg 在不停输出。
推荐只打印同一个进程的系统调用,感受一下时间切片,核心切换

效果图

在这里插入图片描述

源码

源码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VT Msr Hook Syscall 的相关文章

随机推荐

  • eclipse导入项目后出现红色叉号的解决方案

    对于一名程序员来说 我导入的项目在项目的名称上无端加了一个红色的叉号 虽然这个不友好的符号 对于我整个的项目运行没有任何影响 但是总让我觉得不舒服 大大的叉号写在我的项目的脑袋上 我心里能舒服吗 于是我在百度上找到了这篇博文 原文如下 既然
  • 用java实现二叉树的前序遍历(递归和迭代)

    目录 1 题目内容 2 用递归实现前序遍历 2 1解题思路 2 2代码 3 用迭代实现前序遍历 3 1解题思路 3 2代码 1 题目内容 给你二叉树的根节点 root 返回它节点值的 前序 遍历 示例 1 输入 root 1 null 2
  • leaflet地图原理_leaflet地图框架

    L Map API各种类中的核心部分 用来在页面中创建地图并操纵地图 使用 example initialize the map on the map div with a given center and zoom var map L m
  • tensorflow keras 双向lstm gru的水库水位预测 完整代码+数据 毕业设计

    项目演示 https www bilibili com video BV1RP411f7tn spm id from 333 999 0 0 附完整代码 结果演示
  • 基于STM32单片机水质检测PH值检测电导率TDS检测超声波水位检测

    系统功能设计 末尾附文件 本系统由STM32单片机核心板 超声波测距模块 PH值传感器模块 电导率传感器 LCD1602液晶及电源组成 1 超声波传感器采集探测距离 PH传感器采集PH值 PH传感器需要根据手册校准 电导率传感器采集液体电导
  • 连接远程ssh老是掉线解决办法

    1 问题描述 ssh 连接vps的远程服务器 连接一段时间自动断开 包括正在输入命令 执行命令的情况 开着代理的话特别容易断开 关闭代理有效解决问题 2 解决方法 最合适的方法 打开 sudo vim etc ssh sshd config
  • unity制作血条

    unity制作血条 在hierarchy中create gt UI gt image 重命名为border 将血条框拖入Source Image Set Native Size 防止变形 在Canvas下create empty 命名为He
  • 反编译 APK 的基本步骤

    文章目录 反编译 APK 的基本步骤 1 编写一个简单的安卓 app 2 将 release app apk 解压缩 3 将 classes dex 文件反编译为 jar 文件 4 使用 jd gui 可视化阅读 classes dex2j
  • 测试用例之支付功能测试点整理【建议收擦】

    一 梳理支付的业务流程如下 点击支付 gt 选择支付方式 gt 确认金额 gt 输入密码 gt 成功支付 完成这个流程测试 也就是完成了项目的冒烟测试 然后需要测试针对流程中的每个阶段和步骤 具体分析可能导致异常的测试点 所以我们按阶段和输
  • socket,socket.io,mongodb

    Socket 网络上的程序实现双向的数据链接 这个链接的一端成为socket 1 Socket是一个持久链接 2 Socket是双向通信的 Socket VS ajax轮询 ajax轮询 是利用客户端来发送请求 每隔几秒发送一个http请求
  • elementui 表格中单元格自定义功能

    客户相让表格的可操作空间变得更大 比如说可以修改表格内容 双击之后出现input 点击某一单元格可以弹窗等等 让一切可以需要的功能再单击单元格中实现 其实在elementui的官方文档中也可以找到很详细的说明和demo 但是对于新手前端来说
  • 问题记录:修改NuGet的默认存放位置

    具体流程参考了博主 修改nuget包默认存放路径 但是没找到配置文件 C Users 用户 AppData Roaming NuGet NuGet Config 其他的答案如 C Program Files x86 NuGet Config
  • 移动端页面禁止放大缩小

    安卓 在index html文件中添加meta标签 IOS 在 src app vue 中 script 标签内添加代码
  • [Codeforces] games (R1200) Part.3

    Codeforces games R1200 Part 3 题单 https codeforces com problemset tags games 0 1200 1672A Log Chopping 原题指路 https codefor
  • PhotoShop 之移动选区

    不能使用 移动工具 移动选区 否则会出现剪切的效果 移动后 出现了背景颜色 如下图 移动选区 矩形选框工具 魔棒工具等选区工具都可以移动选区 移动选区的时候 注意选区按钮必须在新选区 水平或垂直移动选区的时候 请注意必须先移动选区再按住Sh
  • 2、基于51单片机智能交流电表抄表OLED屏

    毕设帮助 开题指导 技术解答 有偿 见文末 目录 摘要 一 硬件方案 二 设计功能 三 实物图 四 原理图 五 PCB图 六 程序源码 七 资料包括 摘要 电表表示着人们日常用电的多少 现在每家每户安装的根本上是带有转盘的那种电表 它只能显
  • Vue页面监听 键盘按键

    1 监听方法 监听键盘 keyDown document onkeydown e gt 事件对象兼容 let e1 e event window event arguments callee caller arguments 0 键盘按键判
  • Linux 基础知识

    一 从认识操作系统开始 1 1 操作系统简介 我通过以下四点介绍什么操作系统 操作系统 Operation System 简称OS 是管理计算机硬件与软件资源的程序 是计算机系统的内核与基石 操作系统本质上是运行在计算机上的软件程序 为用户
  • 【状态估计】基于无味卡尔曼滤波模拟倾斜传感器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及讲解 1 概述 本文包括两部分中的第一部分 第一部分设计
  • VT Msr Hook Syscall

    VT Msr Hook Syscall 什么是系统调用 系统调用是内核提供给应用层的接口 比如在 win10x64 应用层打开一个应用 其实就是 explorer 调用了 CreateProcess 这个函数通过 NTDLL 调用表的 0x