驱动保护 -- 通过PID保护指定进程
一、设计界面
1、添加一个编辑框输入要保护的进程PID,并添加两个按钮,一个保护进程,一个解除保护
2、右击编辑框,添加变量
二、驱动层代码实现
1、声明一个受保护的进程PID数组
static UINT32 受保护的进程PID[256] = { 0 };
2、添加PID到保护函数
void 添加PID到保护(UINT32 pid)
{for (size_t i = 0; i < 256; i++){if (受保护的进程PID[i]==0|| 受保护的进程PID[i]==pid){受保护的进程PID[i] = pid;break;}}
}
3、删除PID保护函数
void 删除PID保护(UINT32 pid)
{for (size_t i = 0; i < 256; i++){if (受保护的进程PID[i] == pid){受保护的进程PID[i] = 0;break;}}
}
4、清空PID保护函数
void 清空PID保护()
{memset(受保护的进程PID, 0, sizeof(受保护的进程PID));
}
5、PID是否受保护函数
BOOLEAN PID是否受保护(UINT32 pid)
{for (size_t i = 0; i < 256; i++){if (pid==0){return 0;}if (受保护的进程PID[i] == pid){return TRUE;}}return FALSE;
}
6、将函数在头文件声明一下
void 添加PID到保护(UINT32 pid);
void 删除PID保护(UINT32 pid);
void 清空PID保护();
int PID是否受保护(UINT32 pid);
7、获取PID
UINT32 当前进程PID = PsGetCurrentProcessId();HANDLE PID = PsGetProcessId((PEPROCESS)OperationInformation->Object);if (PID是否受保护(PID)==1){DbgPrint("nxyn:sys pEPROCESS=%p ", OperationInformation->Object);DbgPrint("nxyn:被保护的PID:%d \n", PID);ACCESS_MASK 获取权限 = OperationInformation->Parameters->CreateHandleInformation.OriginalDesiredAccess;ACCESS_MASK 获取新权限 = OperationInformation->Parameters->CreateHandleInformation.DesiredAccess;//将句柄权限清零//让结束进程的功能失效获取权限 &= ~PROCESS_TERMINATE;获取权限 &= ~PROCESS_VM_OPERATION;获取权限 &= ~PROCESS_VM_WRITE;获取权限 &= ~PROCESS_VM_READ;//返回我们修改过的权限 OpenProcessOperationInformation->Parameters->CreateHandleInformation.DesiredAccess = 获取权限;DbgPrint("nxyn:获取权限=%X 获取新权限=%X", 获取权限, 获取新权限);}
8、添加控制码
#define irp添加PID到保护 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x804, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define irp删除PID保护 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x805, METHOD_BUFFERED,FILE_ANY_ACCESS)
9、通过控制码实现添加和删除保护
else if (控制码== irp添加PID到保护){IRP添加PID到保护(IRP指针);}else if (控制码 == irp删除PID保护){IRP删除PID保护(IRP指针);}
10、添加和删除的代码具体实现
void IRP添加PID到保护(PIRP IRP指针)
{ int* 缓冲区 = (int*)IRP指针->AssociatedIrp.SystemBuffer;int 计算结果 = 0;if (缓冲区){UINT32* pPID = (UINT32*)缓冲区;UINT32 pid = pPID[0];添加PID到保护(pid);IRP指针->IoStatus.Information = sizeof(int);//设置操作的字节数IRP指针->IoStatus.Status = STATUS_SUCCESS;//返回状态IoCompleteRequest(IRP指针, IO_NO_INCREMENT);//完成一个IRP请求KdPrint(("nxyn:PID已添加到保护"));}
}void IRP删除PID保护(PIRP IRP指针)
{int* 缓冲区 = (int*)IRP指针->AssociatedIrp.SystemBuffer;int 计算结果 = 0;if (缓冲区){UINT32* pPID = (UINT32*)缓冲区;UINT32 pid = pPID[0];删除PID保护(pid);IRP指针->IoStatus.Information = sizeof(int);//设置操作的字节数IRP指针->IoStatus.Status = STATUS_SUCCESS;//返回状态IoCompleteRequest(IRP指针, IO_NO_INCREMENT);//完成一个IRP请求KdPrint(("nxyn:PID已删除保护"));}
}
三、应用层代码实现
1、添加控制码
#define irp添加PID到保护 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x804, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define irp删除PID保护 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x805, METHOD_BUFFERED,FILE_ANY_ACCESS)
2、双击保护进程按钮
UpdateData(TRUE);//将窗口的数据更新到变量char 缓存区[256];sprintf_s(缓存区, "nxyn:应用程序保护PID控制码为%X\n", irp添加PID到保护);OutputDebugStringA(缓存区);UINT32 输入数据 = m_PID;int 返回数据;DWORD 实际读取字节数;DeviceIoControl(设备句柄,irp添加PID到保护,&输入数据,sizeof(输入数据),&返回数据,sizeof(返回数据),&实际读取字节数,NULL);
3、双击解除进程保护按钮
UpdateData(TRUE);//将窗口的数据更新到变量char 缓存区[256];sprintf_s(缓存区, "nxyn:应用程序删除PID控制码为%X\n", irp删除PID保护);OutputDebugStringA(缓存区);UINT32 输入数据 = m_PID;int 返回数据;DWORD 实际读取字节数;DeviceIoControl(设备句柄,irp删除PID保护,&输入数据,sizeof(输入数据),&返回数据,sizeof(返回数据),&实际读取字节数,NULL);
四、测试应用
相关文章:

驱动保护 -- 通过PID保护指定进程
一、设计界面 1、添加一个编辑框输入要保护的进程PID,并添加两个按钮,一个保护进程,一个解除保护 2、右击编辑框,添加变量 二、驱动层代码实现 1、声明一个受保护的进程PID数组 static UINT32 受保护的进程PID[256] { 0 }; 2…...

spring常用注解(全)
一、前言 Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。 Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大…...

Axios请求(对于ajax的二次封装)——Axios请求的响应结构、默认配置
Axios请求(对于ajax的二次封装)——Axios请求的响应结构、默认配置知识回调(不懂就看这儿!)场景复现核心干货axios请求的响应结构响应格式详解实际请求中的响应格式axios请求的默认配置全局axios默认值(了解…...
(三)【软件设计师】计算机系统—CPU习题联系
文章目录一、2014年上半年第1题二、2014年下半年第3题三、2017年上半年第1题四、2009年下半年第1题五、2010年上半年第5题六、2011年下半年第5题七、2011年下半年第6题八、2012年下半年第1题九、2019年上半年第1题十、2010年上半年第1题十一、2011年上半年第1题十二、2016年下半…...

win下配置pytorch3d
一、配置好的环境:py 3.9 pytorch 1.8.0 cuda 11.1_cudnn 8_0 pytorch3d 0.6.0 CUB 1.11.0 你可能觉得pytorch3d 0.6.0版本有点低,但是折腾不如先配上用了,以后有需要再说。 (后话:py 3.9 pytorch 1.12.1 cuda …...

JS字符串对象
、 JS字符串对象 1.1 内置对象简介 在 JavaScript 中,对象是非常重要的知识点。对象可以分为两种:一种是“自定义对象”外一种是“内置对象”。自定义对象,指的是需要我们自己定义的对象,和“自定义函数”是一些道理;内置对象,…...
Linux系统对文件及目录的权限管理(chmod、chown)
1、身份介绍 在linux系统中,对文件或目录来说访问者的身份有三种: ①、属主用户,拥有者(owner)文件的创建者 ②、属组用户,和文件的owner同组的用户(group); ③、其他用…...

半透明反向代理 (基于策略路由)
定义 半透明反向代理一般是指 代理本身对于客户端透明,对于服务端可见。 从客户端视角看,客户端访问的还是服务端,客户端不知道代理的存在。 从服务端视角看,服务端只能看到代理,看不到真实的客户端。 示意图 客户端…...
课前测5-超级密码
目录 课前测5-超级密码 程序设计 程序分析 课前测5-超级密码 【问题描述】 上次设计的“高级密码”被你们破解了,一丁小朋友很不服气! 现在,他又设计了一套更加复杂的密码,称之为“超级密码”。 说实话,这套所谓的“超级密码”其实也并不难: 对于一个给定的字符…...

QML控件--Menu
文章目录一、控件基本信息二、控件使用三、属性成员四、成员函数一、控件基本信息 二、控件使用 import QtQuick 2.10 import QtQuick.Window 2.10 import QtQuick.Controls 2.3ApplicationWindow{visible: true;width: 1280;height: 720;Button {id: fileButtontext: "Fi…...

002:Mapbox GL更改大气、空间及星星状态
第002个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中更改大气、空间及星星状态 。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共71行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:…...

2022年第十三届蓝桥杯题解(全)C/C++
A题就是一个简单的进制转化,代码实现如下: #include <bits/stdc.h>using namespace std;const int N 1e5 10;int main() {int x 2022;int a 1;int res 0;while(x) {res (x % 10) * a;a a * 9;x / 10;}cout << res;return 0; } B题有…...
【cmake学习】find_package 详解
find_package 主要用于查找指定的 package,主要支持两种搜索方法: Config mode:查找 xxx-config.cmake或 xxxConfig.cmake的文件,如OpenCV库的OpenCVConfig.cmakeModule mode:查找Findxxx.cmake文件,如Ope…...

WEB攻防-通用漏洞PHP反序列化POP链构造魔术方法原生类
目录 一、序列化和反序列化 二、为什么会出现反序列化漏洞 三、序列化和反序列化演示 <演示一> <演示二> <演示二> 四、漏洞出现演示 <演示一> <演示二> 四、ctfshow靶场真题实操 <真题一> <真题二> <真题三> &l…...
Baumer工业相机堡盟工业相机如何通过BGAPISDK里的图像处理库进行图像转换(C++)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK进行图像转换(C)Baumer工业相机Baumer工业相机的SDK里图像格式转换的技术背景Baumer工业相机通过BGAPI SDK进行图像转换调用BGAPI SDK的图像转换库ImageProcessor调用BGAPI SDK建立图像调用BGAPI SDK转换图像…...
JD开放平台接口(获得JD商品详情, 按关键字搜索商品,按图搜索京东商品(拍立淘), 获得店铺的所有商品,获取推荐商品列表, 获取购买到的商品订单列表)
参数说明 通用参数说明 url说明 https://api-gw.onebound.cn/平台/API类型/ 平台:淘宝,京东等, API类型:[item_search,item_get,item_search_shop等]version:API版本key:调用key,测试key:test_api_keysecret:调用secret,测试secret:(不用填写…...

上海亚商投顾:沪指震荡反弹 游戏、传媒概念股再度大涨
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪大小指数今日走势分化,沪指向上震荡反弹,创业板指一度跌近1%,黄白二线大幅背离。…...
C/C++ 玩转StoneValley库:从入门到精通
C/C 玩转StoneValley库:从入门到精通引言(Introduction)StoneValley库简介(Overview of StoneValley Library)为什么要学习StoneValley库(Why Learn StoneValley Library in C)StoneValley库安装…...

CentOS7-部署Tomcat并运行Jpress
1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8,配置服务启动脚本,部署jpress应用。1、简述静态网页和动态网页的区别 静态网页: 请求响应信息,发给客户端进行处理,由浏览器进…...
菜鸟程序员的3年心酸逆袭之旅!今天你对我爱搭不理,明天我让你高攀不起!
多年前我以一个菜鸟的身份 进入了一家创业公司 我原本以为公司是这样的 但是实际上是这样的 我进去时 我们部门除开部门老大还有我 也只有我 所以我就这样开始了我的程序员生涯 开始了我的苦逼技术 公司是做电商网站的 因为我是一个菜鸟 所以我接到的第一个任务 就是做一个网页…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...