当前位置: 首页 > news >正文

RW-Everything的RwDrv.sys驱动调用

RW-Everything的RwDrv.sys驱动调用

  • 一、RwDrv.sys
  • 二、示例代码
  • 三、总结


一、RwDrv.sys

RW-Everything是一个硬件底层的工具,可用于物理内存、BIOS、PCI和IO端口的查看和修改,其基于驱动RwDrv.sys来实现,利用这个驱动可以实现系统的侵入。


二、示例代码

  • 使用服务来加载RwDrv驱动
  • 打开Win Object对象,通过调用DeviceIoControl通信调用
#include <Windows.h>
#include <stdio.h>#define RW_DRIVER_ID							"RwDrv"// type of access: U8 = 0; U16 = 1, U32 =2, ref to READ_REGISTER_BUFFER_UCHAR / USHORT / ULONG
typedef struct {DWORD64 physicalAddress;DWORD size;DWORD access;DWORD64 buffer;
} PhysRw_t;typedef struct {DWORD low;DWORD pad;DWORD reg;DWORD high;
} MSRRw_t;HANDLE hDrv;DWORD LoadDriver()
{TCHAR sDrv[MAX_PATH] = {0};GetFullPathName("RwDrv.sys", MAX_PATH, sDrv, NULL);//check driver existWIN32_FIND_DATA	findData;HANDLE hFile = FindFirstFile(sDrv, &findData);if(hFile == INVALID_HANDLE_VALUE){printf("Driver File Doesn't Exist, errno = %d.\n", GetLastError());return -1;}//establishes a connection to the service control managerSC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);if(hSCM == NULL){printf("Open SCM Failed, errno = %d.\n", GetLastError());return -1;}//create a service object and add to SCMSC_HANDLE hSrv = CreateService(hSCM, RW_DRIVER_ID, RW_DRIVER_ID, SC_MANAGER_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, sDrv, NULL, NULL, NULL, NULL, NULL);if(hSrv == NULL){if(GetLastError() != ERROR_SERVICE_EXISTS){CloseHandle(hSCM);printf("Create Service Failed, errno = %d.\n", GetLastError());return -1;}}//open servicehSrv = OpenService(hSCM, RW_DRIVER_ID, SERVICE_ALL_ACCESS);if(hSrv == NULL){CloseHandle(hSCM);printf("Open Service Failed, errno = %d.\n", GetLastError());return -1;}//start serviceif(!StartService(hSrv, 0, NULL)){if(GetLastError() != ERROR_SERVICE_ALREADY_RUNNING){CloseHandle(hSCM);CloseServiceHandle(hSrv);printf("Start Service Failed, errno = %d.\n", GetLastError());return -1;}}//create or open device object, see "Win32 Device Namespaces" section //of https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file//and https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfileahDrv = CreateFile("\\\\.\\"RW_DRIVER_ID, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if(hDrv == INVALID_HANDLE_VALUE){CloseHandle(hSCM);CloseServiceHandle(hSrv);printf("Create File Failed, errno = %d.\n", GetLastError());return -1;}return 0;
}DWORD UnloadDriver()
{SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);if(hSCM == NULL){printf("Open SCM Failed, errno = %d.\n", GetLastError());return -1;}SC_HANDLE hSrv = OpenService(hSCM, RW_DRIVER_ID, SERVICE_ALL_ACCESS);if(hSrv == NULL){CloseHandle(hSCM);printf("Open Service Failed, errno = %d.\n", GetLastError());return -1;}SERVICE_STATUS status;if (!ControlService(hSrv, SERVICE_CONTROL_STOP, &status)) {CloseHandle(hSCM);CloseHandle(hDrv);printf("Stop Service Failed, errno = %d.\n", GetLastError());return -1;}CloseHandle(hSCM);CloseHandle(hDrv);return 0;
}BOOL isElevated() {HANDLE hToken = NULL;if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) {TOKEN_ELEVATION Elevation;DWORD cbSize = sizeof(TOKEN_ELEVATION);if (GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize)) {return Elevation.TokenIsElevated;}}if (hToken) {CloseHandle(hToken);}return FALSE;
}void readMem(DWORD64 address, const DWORD64* buffer, DWORD size, DWORD access = 0) 
{PhysRw_t tPhyMem;tPhyMem.physicalAddress = address;tPhyMem.size = size;tPhyMem.access = access;tPhyMem.buffer = (DWORD64)buffer;DeviceIoControl(hDrv, 0x222808, &tPhyMem, sizeof(tPhyMem), &tPhyMem, sizeof(tPhyMem), NULL, NULL);
}
void writeMem(DWORD64 address, const DWORD64* buffer, DWORD size, DWORD access = 0) 
{PhysRw_t tPhyMem;tPhyMem.physicalAddress = address;tPhyMem.size = size;tPhyMem.access = access;tPhyMem.buffer = (DWORD64)buffer;DeviceIoControl(hDrv, 0x22280C, &tPhyMem, sizeof(tPhyMem), NULL, 0, NULL, NULL);
}void readMSR(int reg, LARGE_INTEGER& value) 
{MSRRw_t tMSR;tMSR.low = 0;tMSR.pad = 0;tMSR.reg = reg;	tMSR.high = 0;DeviceIoControl(hDrv, 0x222848, &tMSR, sizeof(tMSR), &tMSR, sizeof(tMSR), NULL, NULL);value.LowPart = tMSR.low;value.HighPart = tMSR.high;
}
void writeMSR(int reg, LARGE_INTEGER& value) {MSRRw_t tMSR;ZeroMemory(&tMSR, sizeof(tMSR));tMSR.reg = reg;tMSR.low = value.LowPart;tMSR.high= value.HighPart;DeviceIoControl(hDrv, 0x22284C, &tMSR, sizeof(tMSR), &tMSR, sizeof(tMSR), NULL, NULL);
}int main()
{//Check UACif(isElevated() == FALSE){printf("This program requires run as administrator.\n");return 0;}LoadDriver();//Read MemDWORD64 buf[1] = {0};readMem(0x0000CCCC, buf, 1);/*DWORD64 buf[16] = {0};readMem(0x0000CCCC, buf, 2, 1);*/printf("read mem = %x\n", buf[0]);//Read MsrLARGE_INTEGER value;readMSR(0x20, value);printf("read msr high part = %08x, low part = %08x\n", value.HighPart, value.LowPart);UnloadDriver();return 0;
}

三、总结

合法的签名驱动可以调用内核的很多方法来实现系统或硬件的控制,但对于一些情况我们无法申请签名,可以借用第三方驱动来实现,其次,这种方式是一种高风险的漏洞。

相关文章:

RW-Everything的RwDrv.sys驱动调用

RW-Everything的RwDrv.sys驱动调用 一、RwDrv.sys二、示例代码三、总结 一、RwDrv.sys RW-Everything是一个硬件底层的工具&#xff0c;可用于物理内存、BIOS、PCI和IO端口的查看和修改&#xff0c;其基于驱动RwDrv.sys来实现&#xff0c;利用这个驱动可以实现系统的侵入。 二…...

0101docker mysql8镜像主从复制-运维-mysql

1 概述 主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器&#xff0c;然后在从库上对这些日志重新执行&#xff08;也叫重做&#xff09;&#xff0c;从而使得从库和主库的数据保持同步。 Mysql支持一台主库同时向多台从库进行复制&#xff0c;从库同时可以…...

uC-OS2 V2.93 STM32L476 移植:系统启动篇

前言 前两篇已经 通过 STM32CubeMX 搭建了 NUCLEO-L476RG 的 STM32L476RG 的 裸机工程&#xff0c;下载了 uC-OS2 V2.93 的源码&#xff0c;并把 uC-OS2 的源文件加入 Keil MDK5 工程 本篇适配 uC-OS2 的 系统定时器&#xff08;Systick&#xff09;与 PendSV_Handler&#xf…...

redis 集群 1:李代桃僵 —— Sentinel

目前我们讲的 Redis 还只是主从方案&#xff0c;最终一致性。读者们可思考过&#xff0c;如果主节点凌晨 3 点突发宕机怎么办&#xff1f;就坐等运维从床上爬起来&#xff0c;然后手工进行从主切换&#xff0c;再通知所有的程序把地址统统改一遍重新上线么&#xff1f;毫无疑问…...

重置 Macbook 中MySQL 的 root 用户密码

Mac上好久前安装测试用的MySQL的Root密码忘记&#xff0c;猜了些常用密码都不对&#xff0c;只能重置密码。 重置密码 1、关闭MySQL服务&#xff0c;可以直接在系统偏好里关闭 sudo /usr/local/mysql/support-files/mysql.server stop 2、进入安装目录&#xff0c;启动安全…...

2308C++搞笑的概念化

前一篇的概念化,太搞笑 元<类 T>概念 可画要求(T&t,整 i){t.画(i);}; 构 方形{空 画(整 i){打印(2*i);} };元<可画 T>空 f(T&t,整 i){t.画(i);t.画(i); }空 主(){方形 e;f(e,33); }用得着那么复杂吗?...

修改node_modules里的源码

最近在工作中使用到一款生成二维码的依赖&#xff08;以vue项目为例讲解&#xff09;&#xff1a;vue-qr&#xff0c;安装的4.0.9版本的&#xff0c;在启动工程的时候报错&#xff1a; You may need an appropriate loader to handle this file type后我查阅各种资料发现 1&a…...

【每日一题Day287】LC24 两两交换链表中的节点 | 模拟 递归

两两交换链表中的节点【LC24】 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 周赛暂停一周啦 思路&#xff1a;模拟 记录前驱…...

Java ~ Collection/Executor ~ PriorityBlockingQueue【源码】

前言 相关系列 《Java ~ Collection【目录】》&#xff08;持续更新&#xff09;《Java ~ Executor【目录】》&#xff08;持续更新&#xff09;《Java ~ Collection/Executor ~ PriorityBlockingQueue【源码】》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;…...

Java后台生成微信小程序码并以流的形式返回给前端

后端代码 获取access_token import net.sf.json.JSONObject;public class WeChatUtil {/*** 获取token*/private static String ACCESSTOKENURL "https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appid{appId}&secret{appSecret}"…...

AtcoderABC226场

A - Round decimalsA - Round decimals 题目大意 给定一个实数X&#xff0c;它最多可以使用三位小数表示&#xff0c;而且X的小数点后有三位小数。将X四舍五入到最接近的整数并打印结果。 思路分析 可以使用round函数进行四舍五入 知识点 round(x) 是一个用来对数字进行四…...

Linux知识点 -- VS Code远程连接服务器协助开发

Linux知识点 – VS Code远程连接服务器协助开发 文章目录 Linux知识点 -- VS Code远程连接服务器协助开发一、VS Code的使用1.使用VS Code进行C语言编译与运行2.使用VS Code进行C代码的编译与运行 二、使用VS Code连接云服务器三、使用VS Code进行GDB调试 一、VS Code的使用 1…...

blender基础认识(选项开关、工具栏、视图等)

文章目录 引言一、大纲选项开关和保存启动文件1. 大纲选项1. 禁用选中2. 视图影藏3. 视图禁用4. 渲染禁用 2. 保存启动文件 二、工具栏和侧边栏1. 左侧工具栏2. 右侧工具栏 三、视图1. 视角2. 缩放3. 拖拽4. 摄像机视角5. 切换正交视图6. 局部视图7. 显示隐藏 四、添加删除物体…...

React Hooks 中的属性详解

React Hooks 是 React 16.8 版本中新增的特性&#xff0c;允许我们在不编写 class 的情况下使用 state 和其他的 React 特性。Hooks 是一种可以让你在函数组件中“钩入” React 特性的函数。以下是一些常用的 React Hooks&#xff0c;并附有详细的用法和代码示例。 1. useStat…...

工作遇到问题与解决办法(一)

一、构建父子工程 父 <groupId>com.ruoyi</groupId> <artifactId>ruoyi</artifactId> <version>3.8.5</version> <modules><module>ruoyi-admin</module><module>ruoyi-framework</module><module>…...

综合与新综合与新型交通发展趋势[75页PPT]

导读&#xff1a;原文《综合与新综合与新型交通发展趋势[75页PPT]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需…...

【树形DP+换根思想】2022牛客多校加赛 H

登录—专业IT笔试面试备考平台_牛客网 题意&#xff1a; 思路&#xff1a; 这个虽然是树形DP&#xff0c;却用了换根的思想.... 首先&#xff0c;后缀0的个数可以转化成min(cnt2,cnt5)&#xff0c;其中cnt2为2的因子个数&#xff0c;cnt5为5的因子个数 然后进行DP 设dp[u]…...

Gitlab CI/CD笔记-第二天-GitOps的流水线常用关键词(1)

一、常用关键词 在Gitlab项目的根目录需要创建一个 .gitlab-ci.yaml的文件。 这个文件就是定义的流水线。Call :"Pipeline as code" 二、这条流水线怎么写&#xff1f; 一、掌握常用的关键词即可。 1.关键词分类 1.全局关键词 Global Keywards 2.任务关键词…...

Spring Boot3.0(一):入门篇

什么是 Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架&#xff0c;其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。 用我的话来理解&#xff0c;就是 Spring…...

各种排序333

冒泡排序 n方 public static void BubbleSort(int[] arr) {int n = arr.Length;for (int i = 0; i < n - 1; i++){for (int j = 0; j < n - i - 1; j++){if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}} }选择排序 n方 publ…...

Sunshine游戏串流实战手册:构建你的跨平台游戏共享生态系统

Sunshine游戏串流实战手册&#xff1a;构建你的跨平台游戏共享生态系统 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾想过在客厅大屏电视上畅玩书房电脑里的3A大作&…...

计算机毕业设计Python深度学习面向农户的农业知识问答机器人 大数据毕业设计(源码+LW+PPT+讲解)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…...

青龙面板自动化签到终极指南:30+平台一键签到,每天节省30分钟

青龙面板自动化签到终极指南&#xff1a;30平台一键签到&#xff0c;每天节省30分钟 【免费下载链接】check 青龙面板平台签到函数 项目地址: https://gitcode.com/gh_mirrors/check5/check 还在为每天繁琐的签到任务烦恼吗&#xff1f;签到盒青龙版是你的完美解决方案&…...

如何高效使用AutoHotkey编译器:Ahk2Exe完整指南与实战技巧

如何高效使用AutoHotkey编译器&#xff1a;Ahk2Exe完整指南与实战技巧 【免费下载链接】Ahk2Exe Official AutoHotkey script compiler - written itself in AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/ah/Ahk2Exe 对于Windows自动化脚本开发者而言&#xff…...

ARM MHU寄存器架构与核间通信优化指南

1. ARM MHU寄存器架构概述在ARM多核处理器架构中&#xff0c;MHU&#xff08;Message Handling Unit&#xff09;是实现核间通信的关键硬件模块。作为专门优化的消息传递单元&#xff0c;MHU通过精心设计的寄存器组实现了高效的数据传输和中断管理机制。不同于传统的共享内存通…...

如何用QKeyMapper实现Windows键鼠手柄自由映射:免费开源终极指南

如何用QKeyMapper实现Windows键鼠手柄自由映射&#xff1a;免费开源终极指南 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper&#xff0c;Qt开发Win10&Win11可用&#xff0c;不修改注册表、不需重新启动系统&#xff0c;可立即生效和停止。支持游戏手柄映射到键鼠&…...

树莓派NOOBS安装指南:从SD卡准备到系统配置全流程详解

1. 项目概述&#xff1a;为什么选择NOOBS作为树莓派入门首选如果你刚拿到一块树莓派&#xff0c;看着这块小小的电路板&#xff0c;第一反应可能是兴奋&#xff0c;紧接着就是困惑&#xff1a;我该怎么让它“活”过来&#xff1f;对于嵌入式开发、物联网原型搭建&#xff0c;甚…...

如何快速清理Mac残留文件:免费开源工具终极指南

如何快速清理Mac残留文件&#xff1a;免费开源工具终极指南 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾经遇到过这样的困扰&#xff1f;明明已经…...

DxO PureRAW中文破解版

&#x1f525;RAW图像降噪神器&#xff01;DxO PureRAW中文破解版来了&#xff01;&#x1f680;哈喽&#xff0c;各位摄影老铁们好呀&#xff01;&#x1f44b;&#x1f44b; 今天给大家安利一款超级硬核的RAW图像处理工具—— ✨ DxO PureRAW ✨ 这可是 DxO Labs 旗下的行业领…...

3篇6章5节:基于 stat_slab () 函数的高血压临床数据可视化

在现代医学研究,传统 “均值 标准差”“箱线图” 等统计表达,往往会丢失数据的分布形态、双峰特征、组间重叠等关键信息,无法适配真实世界临床数据的复杂特征。而 R 语言 ggdist 包的 stat_slab() 函数,作为分布可视化体系的核心底层工具,不仅能实现样本数据的完整分布呈…...