-
大小: 6KB文件类型: .rar金币: 1下载: 0 次发布日期: 2021-06-13
- 语言: 其他
- 标签: 驱动 文件保护 进程保护 PsProcessTyp IoFileObject
资源简介
经过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
相关资源
- WT8871 小尺寸液晶驱动芯片资料
- STM32F103C8T6+1.44寸ST7735TFT LCD彩屏驱动程
- 基于STM32的AD9834驱动
- I.MX6 DMA驱动测试历程imx6 sdma mem to me
- 基于STM32HAL库的AD9834驱动代码修正.z
- avr mega16单片机驱动 tsl2561光传感器
- DS2438电源管理芯片驱动
- 嵌入式linux 应用程序开发框架之模块
- pl2303 USB转串口驱动解决“运行时错误
- st7541的LCD驱动
- X3650 G200eR 显卡驱动 for windows 2008 R2
- U盘过滤并且实现透明加密
- L298N.SchDoc
- NDIS 小端口驱动 miniport driver 以太网卡
- ESXi 8168网卡vib驱动
- ht16c23.rar
- arduino通过485读取温度传感器驱动淘晶
- ch340-usb转ttl驱动
- BMP180博世气压传感器驱动程序
- BH1750驱动程序
- H-JTAG驱动程序
- 51单片机LCD160128驱动程序
- 高丽LK607驱动
- STM32F AT24c02软件驱动程序
- 汽车设计——驱动桥设计
- vas5054usb驱动
- 虚拟机soundblaster16声卡驱动
- \\基于WDF过滤驱动的USB存储设备监控系
- adv7610驱动
- Linux 下的exfat文件系统驱动,内核版本
评论
共有 条评论