技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
Minifilter实现文件备份
Arcueid
发表于 浙江
二进制安全
370浏览 · 2025-06-02 08:11
返回文档
起因
在分析某款软件时发现, 其主要功能被实现于内核态驱动中, 在加载驱动后会自删除文件, 想要逆一下发现找不到驱动 所以考虑用minifilter读写文件拿到驱动
实现过程
首先我们要确定一下文件名格式
FltGetFileNameInformation
nameInfo.Name 结构类似下面这样
\Device\HarddiskVolumex\xxxxx\...\xxxxx.sys
随便注册个针对
IRP_MJ_WRITE
的回调 dbgPrint输出一下找找我们要的驱动文件
拿到名称之后可以考虑开始写回调了
这里考虑写后回调 整体思路大致如下
1
通过判断
nameInfo.Name
决定是否备份
2
获取目标文件大小
3
获取目标驱动文件句柄,文件对象 创建备份文件
4
读写 分段读取原文件内容并写入到备份文件中
1. 通过判断nameInfo.Name决定是否备份
2. 获取目标文件大小
3. 获取目标驱动文件句柄,文件对象 创建备份文件
通过
FltCreateFileEx
打开目标文件 和创建备份文件
4. 分段读取原文件内容并写入到备份文件中
优化
那么现在是硬编码的目标文件和备份文件 比较蠢 考虑上个通信从R3接收文件名
R0
先写驱动这块
通过
FltCreateCommunicationPort
创建通信端口
在这之前需要用
FltBuildDefaultSecurityDescriptor
来创建默认的安全描述符
fltDisConnectNotifyCallback我们不关心
fltConnectNotifyCallback
如下
先定义一个通信结构
记得在卸载的时候free掉
对应
IRP_MJ_WRITE
的后回调需要修改的点如下
R3
通过
FilterConnectCommunicationPort
直接在连接的时候走回调把数据传完 就不用写
MessageNotifyCallback
了
当然通过
filterSendMessage
走
MessageNotifyCallback
实际上是更符合直觉的 当时不知道为什么没这么写
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
发布投稿
热门文章
1
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
2
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
3
从白帽角度浅谈SRC业务威胁情报挖掘与实战
4
基于规则的流量加解密工具-CloudX
5
从0到1大模型MCP自动化漏洞挖掘实践
近期热点
一周
月份
季度
1
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
2
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
3
从白帽角度浅谈SRC业务威胁情报挖掘与实战
4
基于规则的流量加解密工具-CloudX
5
从0到1大模型MCP自动化漏洞挖掘实践
暂无相关信息
暂无相关信息
优秀作者
1
T0daySeeker
贡献值:38700
2
一天
贡献值:24800
3
Yale
贡献值:18000
4
1674701160110592
贡献值:18000
5
1174735059082055
贡献值:16000
6
Loora1N
贡献值:13000
7
bkbqwq
贡献值:12800
8
手术刀
贡献值:11000
9
lufei
贡献值:11000
10
xsran
贡献值:10600
目录
起因
实现过程
1. 通过判断nameInfo.Name决定是否备份
2. 获取目标文件大小
3. 获取目标驱动文件句柄,文件对象 创建备份文件
4. 分段读取原文件内容并写入到备份文件中
优化
R0
R3
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板