小议文件保护和锁定技术

发送请求_内核层自己发送IRP请求操作文件全面总结 本文为看雪论精华文章看雪论坛作者ID:低调putchar 一、概述Windows操作系统中,文件系统过滤驱动的过滤设备绑定在文件系统(FSD)设备之上,监视和过滤我们的文件访问。当应用层发起文件操作调用时内核层都会转换为IRP发送到设备栈中位于栈顶的设备,然后通过IO栈单元(IO_STACK_LOCATION)保存一些参数把IRP请求继续向下层设备发送,最后至FSD,由FSD完成实际的文... 阅读详情
近1年来互连网上的木马越来越多,有的还删除不掉,要切换到dos才可行,如:CNNC,3721等,实现技术也五花八门,但就文件不可删除的实现技术可分三类:

  1 Attach file system; 这种技术和Filemon/sfilter查不多,就是挂一个filter驱动到fs上,其他函数都是passthru下去,只处理IRP_MJ_SET_INFORMATION,当发现有删除需保护文件的IRP,就 
Irp->IoStatus.Status = STATUS_SUCCESS;            
Irp->IoStatus.Information = 0;            
IoCompleteRequest(Irp, IO_NO_INCREMENT);
更本不让Fs去处理,从而达到文件不可删除的作用!

有什么方法可以删除呢?自己写个驱动自己填充irp包(见OSR文档Rolling Your Own),直接发送IRP到File System Device上去就ok啦!


  2 修改file system的dispatch函数表; 首先得到Fs的DriverObject(根据驱动名得到驱动设备对象(ObReferenceObjectByName(IoDriverObjectType))),pDriverObject->MajorFunction[IRP_MJ_SET_INFORMATION] = MySetInformation,然后再MySetInformation中再调用原来的调度函数,类似于HookApi;发现有删除
需保护文件的IRP,就直接IoCompleteRequest,更本不让原来的FsSetInformation处理!

有什么方法可以删除呢?自己写个驱动来修复Fs的dispatch函数表,读Fs的原始文件,根据PE文件得到Fs的Entrypoint,dispatch函数表的填充都在EntryPoint后面,我们可以根据Opcode查找,XX XX XX XX就是我们要找的dispatch的原始地址;找到后pDriverObject->MajorFunction[IRP_MJ_SET_INFORMATION] = XX XX XX XX,然后就能删除文件啦!

FunOpc=MajorFunction*4+0x38
C7 46 FunOpc[<80]  XX XX XX XX  mov     dword ptr [esi+50h], offset _NtfsFsdSetInformation
C7 86 FunOpc[>=80] XX XX XX XX
C7 43 FunOpc[<80]  XX XX XX XX  mov     dword ptr [ebx+50h], offset _NtfsFsdSetInformation
C7 83 FunOpc[>=80] XX XX XX XX


  3 通过ZwCreateFile把文件锁定;删除时报告“文件正在使用,禁止删除”,具体原理自己摸索吧,反正是通过ZwCreateFile实现的!

有什么方法可以删除呢?
  step1 :通过
QuerySystemInformation(SystemHandleInformation)得到当前系统的所有句柄信息
  step2 : 遍历当前所有进程,根据进程ID,得到此进程打开的所有句柄信息
  Step3 :把 句柄发送给我们的驱动程序,驱动程序根据ObQueryNameString得到句柄的路径信息,然后再传给我们的应用程序
  Step4 :如果是我们要删除文件的路径,应用程序调用DuplicateHandle(DUPLICATE_CLOSE_SOURCE),句柄被关闭了,现在可以删除文件了! 
  注:QuerySystemInformation的使用说明见The Undocumented Functions,或者http://undocumented.ntinternals.net,第三种解除文件锁定的方法是我反汇编Unlock软件学习到的
 
ZwQuerySystemInformation查找进程文件句柄 ZwQuerySystemInformation查找文件句柄 立即下载

相关推荐

adminmodel皮肤

cs1.6 op 专用皮肤 内置说明 adminmodel

IRP_MJ_SET_INFORMATION

IRP_MJ_SET_INFORMATION 什么时候发送 IO管理器和其他操作系统组件,其他内核模式驱动程序发送 IRP_MJ_SET_INFORMATION 请求。例如当用户模式下的应用程序调用一个像SetEndOfFile 的微软Win32函数,或者是内核模式下的组件调用ZwSetInformationFile时会发送这个请求。 操作:文件系统驱动程序 文件系统驱动程序应当提取和解码

死胖子的博客 2408

Vue后台管理

- 登录/登出 - 权限管理 - 列表过滤 - 权限切换 - 多语言切换 - 组件 - 富文本编辑器 - Markdown编辑器 - 城市级联 - 图片预览编辑 - 可拖拽列表 - 文件上传 - 数字渐变 - split-pane - 表单编辑 - 文章发布 - 工作流 - 表格 - 可拖拽排序 - 可编辑表格 - 行内编辑 - 单元格编辑 - 可搜索表格 - 表格导出数据 - 导出为Csv文件 - 导出为Xls文件 - 表格转图片 - 错误页面 - 403页面 - 404页面 - 500页面 - 高级路由 - 动态路由 - 带参页面 - 换肤 - 收缩侧边栏 - tag标签导航 - 面包屑导航 - 全屏/退出全屏 - 锁屏 - 消息中心 - 个人中心

less加管道tail_Linux之cat tail less常见用法

1.cat通常查找出错误日志 cat error.log | grep 'foo' , 这时候我们还有个需求就是输出当前这个日志的前后几行:cat error.log | grep -C 10 'foo' #显示file文件里匹配foo字串那行以及上下10行cat error.log | grep -B 10 'foo' #显示foo及前10行cat error.log | grep -A 10 ...

weixin_39957934的博客 305

Vue + Scss 动态切换主题颜色实现换肤的示例代码

根据预设的配色方案,在前端实现动态切换系统主题颜色。 大概的思路就是给html根标签设置一个data-theme属性,然后通过js切换data-theme的属性值,Scss根据此属性来判断使用对应主题变量。这里可以选择持久化Vux或接口来保存用户选择的主题。 一、首先需要给项目下载配置Scss 1.安装依赖 npm install node-sass sass-loader --save-dev 2.找到build中webpack.base.conf.js,在rules中添加scss规则 { test: /\.scss$/, loaders: ['style', 'css', 'sass

普源精电DHO系列示波器选购指南:从学生党到工程师的完整对比

本文深入评测普源精电DHO系列示波器,从DHO800到DHO4000各型号的核心参数、功能特点及适用场景进行全面对比,帮助学生党和工程师根据实际需求选择最佳型号。重点分析带宽、采样率、存储深度等关键指标,并提供实用的选购建议和进阶使用技巧,帮助用户充分发挥示波器性能。

weixin_30485379的博客 167

<学习笔记>Windows驱动开发技术详解__派遣函数

派遣函数是Windows驱动程序中的重要概念。驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的。 用户模式下所有对驱动程序的I/O请求,全部由操作系统转换为一个叫做IRP数据结构,不同的IRP会被“派遣”到不同的派遣函数中。 IRP与派

The New Old Things 4623

海思MIPI屏调试实战:从参数计算到点亮屏幕的完整指南

本文提供了一份海思平台MIPI屏幕调试的完整实战指南。文章以Hi3516DV300调试800x1280分辨率屏幕为例,详细讲解了从参数计算、配置文件修改到最终点亮屏幕的全流程,并分享了常见问题排查与进阶优化技巧,旨在帮助嵌入式开发者高效解决MIPI屏调试难题。

weixin_29190573的博客 738

读懂常见IRP:IRP_MJ_CLEANUP/IRP_MJ_CLOSE/IRP_MJ_CREATE

IRP_MJ_CLEANUP保持进程定义上下文信息的驱动器,必须在DispatchCleanup中包含cleanup请求。何时发送: 收到IRP_MJ_CLEANUP意味着请求的目标设备与目标文件的句柄相关(也可能因为io请求后没有释放)入参: 无出参: 无操作: 该IRP在关闭 file object 句柄的进程上下文中发送。因此,驱动器应该释放进程上下文中所指

5763

Ollama最新快速上手指南:从安装到精通本地AI模型部署

想让Ollama跑你的"私房模型"?三种主流格式全支持,总有一款适合你!GGUF格式(推荐新手首选)创建Modelfile文件:执行创建命令:运行你的专属模型:PyTorch/Safetensors格式(适合进阶玩家)先用库测试模型能否正常加载确保模型结构完整后再导入Ollama官方文档有详细转换指南专业小贴士GGUF格式最轻量,PyTorch最灵活,Safetensors最安全遇到问题?试试用llama.cpp进行格式转换7B参数模型推荐使用q4_0量化级别想让AI用马里奥。

全世界的博客 2310

告别USB转接:在STM32探索板上用SPI跑通ESP-Hosted,实现Wi-Fi/BLE连接

本文详细介绍了如何在STM32F469I-DISCO开发板上通过SPI接口实现ESP-Hosted方案,为嵌入式设备添加Wi-Fi和蓝牙连接功能。通过硬件配置、协议栈优化和性能测试,展示了这一创新方案的成本效益和开发效率,特别适合资源受限但需要稳定无线连接的嵌入式应用场景。

weixin_34046298的博客 252

HIPS(Sfilter)

文件过滤那么就是相关分发函数的处理 FilterCreate(创建) FilterRead(一般不拦截,加解密处理) FilterWrite(修改,加解密处理) FilterSetInfo(删,重命名,IRP_MJ_SET_INFORMATION) Filterclose(一般不拦截,写关闭拦截) FIlterClean(写关闭) 代码片段 DriverObject->...

kernweak的博客 466

掌控板玩板指南1:初识掌控板、扩展板、Mind+编辑器

掌控板、I/O扩展板入门

好乐无荒之地 1万+

小议计算机网络平安的目前状况及策略

 摘 要 以影响计算机网络平安的主要因素为突破口,重点分析防范各种不利于计算机网络正常运行的办法,从不同角度全面了解影响计算机网络平安的情况,做到心中有数,将不利因素解决在萌芽状态,确保计算机网络的平安管理和有效运行。   计算机网络 系统平安 网络权限 加密1 影响计算机网络平安的主要因素  (1)网络系统在稳定性和可扩充性方面存在新问题。由于设计的系统不规范、不合理以及缺乏平安性考虑,因而

monicaxiaoy的专栏 1168

RSA 2048/4096 签名校验算法

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。 今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能...

qq_38769551的博客 9505

自私兽群优化器(SHO)详解:从生物本能到智能优化

自私兽群优化器(SHO)是一种受动物群体自私行为启发的智能优化算法。该算法模拟动物在捕食威胁下的两种行为:聚集行为(全局搜索)和自私行为(局部搜索),将优化问题的解空间映射为生存环境,候选解视为猎物个体。SHO通过安全性评估将猎物分为安全、危险和高危三类,分别采用不同的位置更新策略,并引入捕食者角色增加选择压力。相比传统优化算法,SHO具有无需梯度信息、自适应平衡探索与开发、参数简单等优势,特别适合高维复杂和多模态优化问题。算法通过马尔可夫链理论保证收敛性,已在工程设计和数据挖掘等领域展现出良好性能。

qq_42212808的博客 198

数据库安全小议

数据库安全目前是安全从业者讨论的重要主题之一。随着越来越多的突发事件发生,是时候采取一些行动了。 安全的数据库应当为成员的访问提供了有效控制与保护,同时还能保障所有的数据质量。我们必须充分了解数据...

cuchou5321的博客 267

华为OD机试 - 第k个排列 - 全排列递归(Python/JS/C/C++ 2025 C卷 100分)

给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!按大小顺序升序列出所有排列的情况,并一一标记当n=3时,所有排列如下“123”,“132,“213”,“231”,“312”,“321”输入两行,第一行为n,第二行为k,给定n的范围是[1,9],给定k的范围是[1,n!排列为“12”和“21”,第2个是“21”。给定n和k,返回第k个排列。输出排在第k位置的数字。只有一个排列,直接返回。

学Java,找哪吒 988

【半原创】Irp占坑保护文件不被删除

Irp操作出自125096的博客 http://blog.youkuaiyun.com/qq125096885/article/details/53033896 这里提下 博主的例子中使用irpclose文件对象,这可能会造成蓝屏。 见链接:https://bbs.pediy.com/thread-215269.htm 所以这里把IrpCloseFile改为ObDereferenceObj

zhuhuibeishadiao 2419

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

获取本进程所有句柄和资源

获取本进程所有句柄和资源

要把所有那些负面的信息当做对自身行为的评价,而不是对自身价值的评判。 426

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Ring0层发送IRP消息打开文件不释放对象实现文件防删

背景 文件保护技术不论对于病毒木马还是杀软来说,都是至关重要的。要在内核层下实现文件防删除,通常是通过HOOK内核函数来实现,通过判断是否是删除保护文件,从而拒绝操作。本文将介绍一种不需要HOOK操作即可实现的文件保护方法,通过发送IRP信息打开文件并获取文件句柄,而不关闭文件句柄,使文件句柄一直保持打开状态。在文件句柄没有被关闭释放的情况,文件不能被删除,从而实现文件防删除。 实现过程 在前面章节就已经介绍过发送IRP管理操作文件,直接发送 IRP 对文件进行操作,可以避免一些HOOK的干扰。 在发送 I

毕业作品网站 716

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

文件过滤驱动中 IRP_MJ_XX_INFORMATION 查询文件对象是文件还是目录的方法

首先,WDK 中关于 IRP_MJ_XX_INFORMATION 请求有这样一段话 “The file system driver should extract and decode the file object to determine whether it represents a user file or directory open” 可是文件对象中没有找到那个地方标记了对象是文件还

keidoekd2345的专栏 769

ARM 汇编入门(十):标量浮点与 VFP 指令全解析

前九篇从架构、ARM32、AArch64 寄存器/寻址、算术位操作、分支、调用约定、内存模型、NEON、SVE/SVE2 一路走到这里。这一篇回到标量浮点子系统:AArch64 用统一的 V0–V31 寄存器文件同时服务标量 FP、NEON 和 SVE;FPCR 控舍入/非规格化/异常陷阱,FPSR 记粘性异常标志;FMADD 单次舍入、FMAXNM 跳过 NaN、FRECPE/FRSQRTE 做快速倒数/平方根估计;最后落到 FP16/BF16 这些机器学习降精度扩展。

m0_58087444的博客 216
上一篇: 防火墙普遍存在的设计缺陷--关于进程路径的获取
下一篇: 用C/C++实现SMC动态代码加密技术
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值