资源简介
经过N多辗转和持续验证,终于搞定了在驱动程序中同时保护进程和文件(经持久测试后,避免了导致系统蓝屏的情况),重点
1)拒绝通过进程管理器关闭进程,同时又允许某些进程可以管理
2)通过比较文件名,截获被保护的文件操作
1)拒绝通过进程管理器关闭进程,同时又允许某些进程可以管理
2)通过比较文件名,截获被保护的文件操作

代码片段和文件信息
#ifndef CXX_PROTECTPROCESSX64_H
# include “ProtectProcessx64.h“
#endif
#include
#include
#include
#define TRACE ATLTRACE
//进程保护CallBackHandle
PVOID processCallBackHandle = NULL; //定义一个void*类型的变量,它将会作为ObRegisterCallbacks函数的第二个参数。
PEPROCESS parentsProtectedProcess; //被保护进程的父进程(来自该进程的处理,被排外)
//文件保护
PVOID fileCallBackHandle = NULL;
//驱动入口
NTSTATUS
DriverEntry(IN PDRIVER_object pDriverObj IN PUNICODE_STRING pRegistryString)
{
DbgPrint(“begin to load driver...\n“);
KdPrint((“begin to load driver...\n“));
//OutputDebugString(“begin to load driver...\n“);
NTSTATUS status = STATUS_SUCCESS;
PLDR_DATA_TABLE_ENTRY64 ldr;
pDriverObj->DriverUnload = DriverUnload;
// 绕过MmVerifyCallbackFunction
ldr = (PLDR_DATA_TABLE_ENTRY64)pDriverObj->DriverSection;
ldr->Flags |= 0x20;
DbgPrint(“begin to ProtectProcess...\n“);
//保护线程回调
ProtectProcess(TRUE);
//保护文件
ProtectFileByObRegisterCallbacks();
return STATUS_SUCCESS;
}
#define MY_MAX_PATH 256
BOOLEAN UnicodeStringToChar(char* DestinationString PUNICODE_STRING SourceString)
{
ANSI_STRING v1;
NTSTATUS Status;
char* v2 = NULL;
__try
{
Status = RtlUnicodeStringToAnsiString(&v1 SourceString TRUE);
if (v1.Length < MY_MAX_PATH)
{
v2 = (PCHAR)v1.Buffer;
strcpy(DestinationString _strupr(v2));
}
RtlFreeAnsiString(&v1);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
return FALSE;
}
return TRUE;
}
void MyUpper(char *s)
{
while((*s)!=0){
if((*s)>=‘a‘&&(*s)<=‘z‘)
(*s)+=(‘A‘-‘a‘);
s++;
}
}
OB_PREOP_CALLBACK_STATUS FilePreCallBack(PVOID RegistrationContext POB_PRE_OPERATION_INFORMATION OperationInformation)
{
UNICODE_STRING uniDosName;
uniDosName.Length = 0;
ACCESS_MASK oldCreateDesiredAccess = 0;
ACCESS_MASK oldDuplicateDesiredAccess = 0;
//参数检查
if(NULL == OperationInformation)
return OB_PREOP_SUCCESS;
PFILE_object Fileobject = (PFILE_object)OperationInformation->object;
HANDLE CurrentProcessId = PsGetCurrentProcessId();
UNREFERENCED_PARAMETER(RegistrationContext);
//有效性检查
if(NULL == Fileobject)
return OB_PREOP_SUCCESS;
//(1)屏蔽非IoFileobjectType类型的处理
if( OperationInformation->objectType!=*IoFileobjectType)
{
return OB_PREOP_SUCCESS;
}
//(2)过滤无效指针
if( Fileobject->FileName.Buffer==NULL ||
!MmIsAddressValid(Fileobject->FileName.Buffer) ||
Fileobject->Deviceobject==NULL ||
!MmIsAddressValid(Fileobject->Deviceobject) )
{
return OB_PREOP_SUCCESS;
}
//(3)过滤无效路径 否则使用RtlVolumeDeviceToDosName获取盘符会蓝屏
/**/
if( !_wcsicmp(Fileobject->FileName.BufferL“\\Endpoint“) ||
!_wcsicmp(Fileobject->FileName.BufferL“?“) ||
!_wcsicmp(Fileobject->FileName.BufferL“\\.\\.“) ||
!_wcsicmp(Fileobject->Fi
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 13414 2020-02-11 08:47 ProtectProcessx64.cpp
文件 4348 2020-02-11 08:45 ProtectProcessx64.h
----------- --------- ---------- ----- ----
17762 2
相关资源
- 联想lenovo G480 USB3.0驱动程序 for win7
- StarNX400打印机驱动 官方版
- 易语言:郁金香驱动保护隐藏
- 基于STM32RCT6的步进电机驱动程序
- 直流无刷电机方波驱动 stm32 例程代码
- elantech触控板驱动程序 v13.6.11 官方最
- 联想y470无线网卡驱动 for 32位64位
- 松下plc FP-XH的驱动
- IMX385驱动代码.zip
- 组态王驱动开发包3.0.0.7(中文)
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- CASS9.1最新S4数据及驱动+ET199数据及驱
- 带有死区延时的H桥直流电机驱动电路
- USB转串口驱动,FT232R驱动程序,最新
- 德卡D3读卡器测试程序驱动文件
- WinCE下CP210x的驱动程序
- ubuntu9.10 可加载内核模块和字符设备驱
- MCGS触摸屏西门子s7_1200驱动
- FPGA在步进电机驱动上的应用实例及代
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- RA8806液晶驱动程序
- 内核驱动进程保护演示程序
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- 组态王中S7-300TCP驱动
- STC12C5A60S2 CH4521 驱动数码管 显示
- STM32F103 CC2500完整驱动(模拟SPI)
- 430系列单片机USBFET下载驱动
- dell阵列卡驱动s100 s300 2008 R2.rar
- keil vcom windows 7 64bit 驱动
评论
共有 条评论