先看结果:
测试环境:win10 1803 64位系统
创建测试目录 C:\test 创建不同类型的文件
管理员权限启动cmd
sc start 启动 minifilter 驱动
调用HideFile.exe 传入指令,操作类型 目录 文件类型(文件类型可以传 * 则隐藏目录下所有文件)
右键刷新 test 目录
管理员权限调用WinAPI FindFirstFile FindNextFile 遍历 C:\test 目录下所有文件
将 获取路径下所有文件.exe 的 Pid 加入白名单后,即可获取到目录下的文件
过滤目录,过滤类型,白名单Pid 均可多次添加和删除
功能实现:
Windows驱动程序样本—minispy
修改模板 只保留 IRP_MJ_DIRECTORY_CONTROL 的操作后回调
ProcessId 与白名单的Pid进行比较,相等则不进行隐藏文件操作。
ULONG ProcessId = FltGetRequestorProcessId(Data);
取出文件信息 与 过滤路径 文件类型做比较
// 获取文件路径
status = FltGetFileNameInformation(Data,
FLT_FILE_NAME_OPENED | FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP,
&nameInfo);
FltParseFileNameInformation(nameInfo);// 解析FLT_FILE_NAME_INFORMATION结构的内容
status = FileMonGetFullPathName(nameInfo, fullPathLongName);
// 获取文件名
currentFileInfo = (PFILE_BOTH_DIR_INFORMATION)Data->Iopb->Parameters.DirectoryControl.QueryDirectory.DirectoryBuffer;
currentFileInfo->FileName, currentFileInfo->FileNameLength
文件我上传到优快云,感兴趣的可以下载下来玩玩
文件是debug64编译,驱动未签名,仅供虚拟机开启测试模式使用,测试前请保存快照