ring0层下实现的文件强制删除

介绍一个基于Ring 3 的rootkit R77 是一个 Ring 3 rootkit,它隐藏了所有内容:文件、目录进程和 CPU/GPU 使用情况注册表项和值服务业TCP 和 UDP 连接交汇点、命名管道、计划任务。 阅读详情

文件强删

在日常生活使用电脑的过程中,遇到删不掉的文件的时候,我们总会通过一些软件提供的强制删除文件功能来删除顽固的文件。文件强删技术对于杀软来说是清楚病毒木马的武器,在扫描器检测出恶意文件的时候,就需要强删功能来清除恶意文件。而对于病毒木马来说,反过来可以用强删技术来强制删除系统保护文件或是受杀软保护的文件。

本文将会介绍文件强删技术,即使文件正在运行,也能强制删除本地文件。

实现过程

当文件是PE文件而且已经被加载到内存中的时候,正常情况下是无法通过资源管理器explorer.exe来删除本地文件的,因为在删除运行中的文件或者被加载的DLL文件的时候,系统会调用MmFlushImageSection内核函数来检测文件是否处于运行状态,若是,则拒绝删除操作。其中,系统中的MmFlushImageSection内核函数,主要是通过检查文件对象中的PSECTION_OBJECT_POINTERS结构数据来判断该文件是否处于运行状态、是否可以删除。

同时,在发送IRP删除文件的时候,系统同样会判断文件的属性是否是只读,若是只读属性则会拒绝删除操作。

所以,根据上述的删除原理,文件强制删除的具体实现流程如下所示。

首先,发送IRP打开删除文件,并获取文件对象。

然后,发送IRP设置文件属性,属性类型为FileBasicInformation,将文件属性重新设置为FILE_ATTRIBUTE_NORMAL,防止原来的文件属性为只读属性。并保存文件对象中的PSECTION_OBJECT_POINTERS结构的值,保存完成后,再对该结构进行清空处理。

接着,发送IRP设置文件属性,属性类型为FileDispositionInformation,实现删除文件操作。这样,即使是运行中的文件也能被强制删除。

最后,还原文件对象中的PSECTION_OBJECT_POINTERS结构,并调用ObDereferenceObject函数释放文件对象,完成清理工作。

那么,实现文件强制删除的实现代码如下所示。

    // 强制删除文件
    NTSTATUS ForceDeleteFile(UNICODE_STRING ustrFileName)
    {
        NTSTATUS status = STATUS_SUCCESS;
        PFILE_OBJECT pFileObject = NULL;
        IO_STATUS_BLOCK iosb = { 0 };
        FILE_BASIC_INFORMATION fileBaseInfo = { 0 };
        FILE_DISPOSITION_INFORMATION fileDispositionInfo = { 0 };
        PVOID pImageSectionObject = NULL;
        PVOID pDataSectionObject = NULL;
        PVOID pSharedCacheMap = NULL;
        // 发送IRP打开文件
        status = IrpCreateFile(&pFileObject, GENERIC_READ | GENERIC_WRITE, &ustrFileName,
            &iosb, NULL, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
            FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0);
        if (!NT_SUCCESS(status))
        {
            DbgPrint("IrpCreateFile Error[0x%X]\n", status);
            return FALSE;
        }
        // 发送IRP设置文件属性, 去掉只读属性, 修改为 FILE_ATTRIBUTE_NORMAL
        RtlZeroMemory(&fileBaseInfo, sizeof(fileBaseInfo));
        fileBaseInfo.FileAttributes = FILE_ATTRIBUTE_NORMAL;
        status = IrpSetInformationFile(pFileObject, &iosb, &fileBaseInfo, sizeof(fileBaseInfo), FileBasicInformation);
        if (!NT_SUCCESS(status))
        {
            DbgPrint("IrpSetInformationFile[SetInformation] Error[0x%X]\n", status);
            return status;
        }
        // 清空PSECTION_OBJECT_POINTERS结构
        if (pFileObject->SectionObjectPointer)
        {
            // 保存旧值
            pImageSectionObject = pFileObject->SectionObjectPointer->ImageSectionObject;
            pDataSectionObject = pFileObject->SectionObjectPointer->DataSectionObject;
            pSharedCacheMap = pFileObject->SectionObjectPointer->SharedCacheMap;
            // 置为空
            pFileObject->SectionObjectPointer->ImageSectionObject = NULL;
            pFileObject->SectionObjectPointer->DataSectionObject = NULL;
            pFileObject->SectionObjectPointer->SharedCacheMap = NULL;
        }
        // 发送IRP设置文件属性, 设置删除文件操作
        RtlZeroMemory(&fileDispositionInfo, sizeof(fileDispositionInfo));
        fileDispositionInfo.DeleteFile = TRUE;
        status = IrpSetInformationFile(pFileObject, &iosb, &fileDispositionInfo, sizeof(fileDispositionInfo), FileDispositionInformation);
        if (!NT_SUCCESS(status))
        {
            DbgPrint("IrpSetInformationFile[DeleteFile] Error[0x%X]\n", status);
            return status;
        }
        //还原旧值  
        if (pFileObject->SectionObjectPointer)
        {
            pFileObject->SectionObjectPointer->ImageSectionObject = pImageSectionObject;
            pFileObject->SectionObjectPointer->DataSectionObject = pDataSectionObject;
            pFileObject->SectionObjectPointer->SharedCacheMap = pSharedCacheMap;
        }
        // 关闭文件对象
        ObDereferenceObject(pFileObject);
        return status;
    }

测试

在64位Windows 10操作系统上,运行C:\520.exe程序后,直接加载并运行上述驱动程序,强制删除正在运行的520.exe文件。520.exe本地文件成功被删除,如图:
在这里插入图片描述

小结

本文介绍的文件强删技术的实现原理是,通过发送IRP打开文件,获取文件对象;发送IRP设置文件属性,去掉只读属性;清空文件对象中的PSECTION_OBJECT_POINTERS结构,使运行中的程序文件能够被删除;最后发送IRP删除文件并释放文件对象。

本文介绍的文件强删技术可以删除正在运行的exe文件,但是不适用于前面介绍的发送IRP打开文件不关闭的文件保护方法。要想强制删除发送IRP打开文件不关闭的文件保护,需要关闭打开的文件对象。可以利用XCB解锁技术,通过硬编码定位出文件对象中SCB(Stream Control Block)、FCB(File Control Blokc)、CCB(Context Control Block)结构的CleanupCount变量,并将CleanupCount都置为1,再调用ObDereferenceObject函数关闭文件对象并释放资源。XCB解锁技术不仅可以解锁发送IRP打开文件的保护方式,同样适用于硬链接文件保护。

Windows内核驱动开发:从原理到实践实现进程强制终止 在操作系统底层,进程管理是核心机制之一,涉及用户态与内核态的权限隔离与交互原理。通过系统调用,用户态程序可请求内核服务,但受限于安全策略与权限控制。内核态驱动程序运行在Ring 0特权级,能直接访问进程对象(EPROCESS)等核心数据结构,实现更高权限的操作。这一技术价值在于突破用户态限制,适用于系统安全、反病毒、反外挂等需要深度控制进程的场景。例如,通过驱动调用ZwTerminateProcess函数,可绕过部分用户态钩子,直接在内核层终结目标进程。本文聚焦Windows平台,详解如何通过驱动开发安全获 阅读详情

相关推荐

Windows Minifilter驱动实现文件强制删除技术

文件强制删除是Windows系统级文件管理中的高阶操作,其本质并非提升权限,而是对I/O请求处理流程的深度干预。基于Minifilter驱动模型,开发者可通过IRP拦截(如IRP_MJ_SET_INFORMATION)、上下文标记与Post回调阶段的对象引用控制,绕过共享冲突与句柄持有导致的STATUS_SHARING_VIOLATION等错误。该技术依托Filter Manager统一调度机制,具备比Legacy Filter更安全的生命周期管理和资源隔离能力,适用于数字版权保护、安全沙箱清理、勒索软件响

weixin_30516429的博客 94

【梅哥的Ring0湿润插入教程】重磅第三课:Ring0下的PE Loader及重加载内核秒杀一切内核级钩子(上篇)...

【梅哥的Ring0湿润插入教程】Email:mlkui@163.com 转载请注明出处,谢绝喷子记者等,如引起各类不适请自觉滚J8蛋!第三课:Ring0下PE Loader及重加载内核绕过一切内核级钩子(上篇) 随着驱动保护技术的逐步成熟,诸如网络游戏公司等越来越多的商业软件公司开始使用Ring0级保护技术保护自己的产品,以起到反用户级调试、反RootKit、反各类钩子、反各...

aejtu5698的博客 1621

Windows Ring0强制删除文件:内核驱动绕过NTFS句柄锁定

文件强制删除本质上是突破操作系统对文件生命周期的访问控制机制,其核心在于理解NTFS文件系统在IRP_MJ_CREATE、IRP_MJ_CLEANUP等阶段实施的引用计数保护与共享检查原理。通过Ring0层内核驱动可直接构造可信IRP、干预FILE_OBJECT状态流转,并调用CcPurgeCacheSection清理缓存映射,从而绕过用户态无法触及的句柄持有校验。该技术具备高权限控制能力,适用于杀毒软件、系统清理工具及内核级调试场景,但依赖合法驱动签名、WDK开发环境及WinDbg调试支持,且仅限本地NT

weixin_30702441的博客 249

c++注入思路inlink hook,ring3和ring 0

注入DLL的思路步骤: 1. 在目标进程中申请一块内存空间(使用VirtualAllocEx函数) 存放DLL的路径,方便后续执行LoadLibraryA 2. 将DLL路线写入到目标进程(使用WriteProcessMemory函数) 3. 获取LoadLibraryA函数地址(使用GetProcAddress),将其做为线程的回调函数 4. 在目标进程 创建线程并执行(使用CreateRemoteThread) std::string temp = W2Astring(strDllPath); in

qq_35490522的博客 1992

Ring0层强制删除文件:Minifilter驱动IRP拦截实战

文件强制删除是Windows内核开发中的典型I/O控制问题,其本质并非权限提升,而是对I/O请求处理路径(IRP)的底层干预。理解IRP_MJ_CREATE与IRP_MJ_SET_INFORMATION的分发机制、Minifilter驱动在Filter Manager栈中的Altitude调度逻辑,是实现可靠强制删除的技术基础。该方案通过预创建阶段路径识别、流上下文标记及SetInformation阶段原子劫持,绕过文件系统驱动的引用计数校验,具备高可靠性与低侵入性,广泛应用于安全产品、数字取证及沙箱环境构

weixin_42530732的博客 103

RING0.zip_ring0_强制删除_文件强删_驱动删除_驱动强删

强删文件RING0代码,驱动强制删除文件

PE加载器的实现

来源:http://blog.vckbase.com/windowssky  对于加壳软件的开发者,掌握PE Loader的实现是最基本的技术;因为壳运行结束后,你要仿照PE加载器去Load映象体,我曾看过UPX的开源代码,全手工打造PE,实现的也是极其复杂,是学习加壳,脱壳和开发加壳软件的上乘资料.  在ReatOs和Nt4.0上找到了其实现,前者实现的比较清晰,不过还是看看Nt4.0的实现吧/

1456

ByteTrack参数调优全攻略:从原理到实战(含YOLOv8示例)

本文深入解析了ByteTrack多目标跟踪算法的核心原理与参数调优策略。通过拆解其独特的两阶段关联机制,并结合YOLOv8检测器,提供了针对不同应用场景(如拥挤行人、高速车辆)的精细化参数调整指南与实战示例,旨在帮助开发者解决ID切换、目标丢失等工程落地难题,提升跟踪系统的鲁棒性与实用性。

cheese的博客 323

强制删除文件(1)——直接发IRP到文件系统

这个程序比较简单,主要练习了两个点: (1)模拟发送IRP (2)使用内核事件对象同步IRP的执行 强制删除文件的思路很简单,把SECTION_OBJECT_POINTERS结构的DataSectionObject和ImageSectionObject两个域清空即可删除正在运行的文件。如果不清空就不能删除运行中的文件。正在运行的文件的这两个域值不为0而文件系统正在根据这两个域决定该文件是

zz_strive_2012的专栏 1655

电池保护板为什么采用NTC热敏电阻而不是PTC热敏电阻?

R25=10K,即环境温度25°时,阻值是10K),温度变化1°C,阻值相应地明显变化,温度响应很灵敏,也就能精准地反向换算出阻值对应的温度。另外,还有功率型NTC热敏电阻,其主要用在开关电源设计中,串联在市电输入上,抑制浪涌电流。电池保护板上的NTC热敏电阻(NTC一端接地,另一端接电池充电控制IC管脚),在电池温度上升时,NTC热敏电阻温度也会随之上升,从而NTC电阻值会下降,因此电池充电控制IC用ADC检测的电压值就降低,当检测到的电压值达到下限阈值时,电池充电控制IC就会停止对电池的充电或放电。

电子绿洲的博客 5629

用LightRAG+Ollama搭建本地知识库:从文档上传到智能问答的完整流程

本文详细介绍了如何利用LightRAG与Ollama构建企业级本地知识库,涵盖从文档预处理到智能问答的完整流程。通过实战案例展示,该方案能高效处理海量文档,实现语义搜索与知识图谱关联分析,显著提升信息检索效率。特别适合金融、医疗等领域的技术团队快速搭建智能知识管理系统。

weixin_42535461的博客 214

[转]ring3下干净的强行删除文件

在某公司实习完,再次回到寝室。还是在学校好。实习期间的给我的任务就是为项目添加一个强行删除的模块。背景是硬盘上存储空间不够时,需要删掉老的文件,如果这时后,老的文件被打开了,没有关掉,就无法删除。所以叫我写一个这样的功能。所谓干净,指的是释放掉这个被占用的句柄。强行删除的方法很多,用驱动直接发磁盘IRP。等等查阅相关资料后。整理思路如下,如果有同学以后要写这样的功能,可以参考,1....

weixin_30922589的博客 135

LoRaWAN协议-物理层(PHY)详解

目录 1 前言 2 物理层包格式 2.1 LoRa调制 2.2 FSK调制 2.3 LR-FHSS 3 Uplink 4 Downlink 1 前言 如图所示,LoRaWAN是一种开放式网络协议,可提供由LoRa联盟标准化和维护的安全双向通信,移动性和本地化服务。该协议做为MAC层,属于数据链路层。其物理层(PHY)实现与其他设备的通信,目前物理层支持LoRa,FSK,LR-FHSS调制。 下图的PHY只标准了LoRa调制,是因为LoRaWAN实际应用中基...

只想.静静的博客 8774

[强烈推荐]ring0下文件解锁&强制删除工具

在发表文章之前得感谢一个人.一个非常不错,功力深厚的程序员,在进程方面有很深的研究.他就是--"炉子".帮我解决了一些问题 .说明:此工具在前天完成,昨天做了初步测试.支持2K/XP/2003/VISTA.比较稳定.但是提醒大家的是在使用前最好先保存你手上的工作,因为内核的东西一不小心就可能蓝屏,我也没办法保证100%没问题,不过大家放心使用,到目前为止只发现一个人使用存在问题.功能:此工

chenhui530的专栏 5454

2025虚幻游戏逆向工程解包尝试

2025虚幻游戏逆向工程解包指南 本文详细介绍了虚幻引擎5游戏逆向解包的完整流程,主要包括获取AES密钥、生成映射文件和导出资源三个关键步骤。作者在实际操作中遇到诸多难题:AES密钥获取工具存在加壳保护问题,映射文件生成器依赖复杂的VS编译环境,DLL注入工具的使用也存在技术门槛。通过多次尝试,作者发现部分游戏可直接搜索现成的AES密钥,而映射文件生成需要额外下载Memcury依赖库才能正常编译。文章提供了相关工具的下载链接和具体操作说明,但同时也指出每个环节都可能出现意外状况,逆向工程实际执行过程远比理论

wsdchong的博客 6160

AIGC时代的必备技能:提示词工程(Prompt Engineering)全面指南

本文主要介绍了AIGC时代的重要技能——提示词工程(Prompt Engineering)。文章首先定义了提示词的概念,强调其作为人类与AI沟通桥梁的重要性,并详细阐述了提示词的功能特性,包括输入、大模型处理和输出三个环节。接着,文章探讨了提示工程的重要性,如提高输出质量、节省资源和时间等。随后,文章深入分析了提示词的基本构成要素,包括指令、上下文、输入数据和输出指示符,并提出了提示词的五大基本原则:清晰性与具体性、提供充足的上下文、明确任务与目标、考虑受众和迭代思维。最后,文章介绍了提示词的七大常见技巧

weixin_43178406的博客 27万+

用eBPF和IMA构建Linux内核级执行阻断:从ring-0到LSM的轻量安全实践

在Linux安全领域,内核特权级(ring-0)一直是防御恶意行为的关键战场。传统杀毒软件依赖驱动或内核模块,但开发与部署成本极高。eBPF与LSM(Linux安全模块)提供了一种更轻量的替代方案:通过eBPF在LSM钩子(如bprm_check_security)上挂载受限程序,结合IMA(完整性度量架构)对文件进行静态哈希采集,即可在内核执行路径中实现文件黑名单阻断。这种“静态完整性+动态执行控制”的组合,既避免了直接编写驱动,又能获得接近内核原生的防御能力。适用于HIDS、零信任执行管控、软件供应链防

weixin_34072458的博客 509

9、傅里叶变换:连续时间与离散时间信号分析的核心工具

本文深入探讨了傅里叶变换在连续时间和离散时间信号分析中的核心作用,详细介绍了连续时间傅里叶变换(CTFT)和离散时间傅里叶变换(DTFT)的定义、性质及其应用。文章涵盖了傅里叶级数到傅里叶变换的推导过程、常见变换对、系统分析中的关键性质,并讨论了采样后频谱的周期延拓与混叠问题。此外,还展示了傅里叶变换在滤波器设计、通信系统调制解调等实际场景中的应用,最后展望了其在图像处理、生物医学等领域的广阔前景。

jump7的博客 68

RING0级暴力搜索内存检测系统隐藏进程(或ROOTKIT)(实测可运行) .

最近期末答辩不知道写什么好,就写一个安全软件吧。软件使用驱动和C++编写,大概多数安全软件都是这样吧。 时间关系,就不说那么多了,直接入正题吧。 在此先感谢“伊丽_杀_白”、“堕落天才”、“antirootkit”等提供的优秀文章,我只是在他们基础之上修改了一下。 伊丽_杀_白    暴力搜索内存空间检测隐藏进程:http://bbs.xdnice.com/thread-377796-1

坦然 2045

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

强制解锁文件占用

强制解锁因其他进程占用而无法删除的文件。 1.调用ZwQuerySystemInformation的16功能号来枚举系统里的句柄 2.打开拥有此句柄的进程并把此句柄复制到自己的进程 3.用ZwQueryObject查询句柄的类型和名称 4.如果发现此句柄的类型是文件句柄,名称和被锁定的文件一致,就关闭此句柄 5.重复2、3、4步,直到遍历完系统里所有的句柄 ...

weixin_30667301的博客 595

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Ring Fire Watch:AI摄像头如何实现野火智能预警

计算机视觉与边缘计算技术的融合正在重塑安防领域,其中多模态感知和AI图像识别是关键突破点。通过红外热辐射分析、光谱特征识别和3D卷积神经网络的组合,现代智能摄像头能精准捕捉火焰特征光谱和烟雾扩散轨迹。这种技术不仅大幅降低误报率至8%以下,更通过边缘-云端协同计算架构实现300ms内的实时响应,在社区安防、环境监测等场景展现巨大价值。以Ring Fire Watch系统为例,其创新的三级检测流水线和隐私保护设计,为智能摄像头在野火预警中的工程化应用提供了范本,特别是WDR技术和YOLO-Fire模型的结合,有

weixin_30340617的博客 407

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Folia 全屏歌词播放器安装教程:四条系统路线,10 分钟跑通第一首歌

装好 Folia,你得到的是一台把逐字歌词渲染成全屏动画的播放器:歌词跟着节拍动,底部播放条控制播放、暂停和切歌。全程约 10 分钟。本文只覆盖 Windows、macOS、Arch 与通用 Linux 的桌面安装路线和最小验收,Web 自托管部署与模组开发不展开。 [![Folia 安装成果预览:Lumi 主题全屏歌词动画界面](https://raw.gitcode.com/GitHub_T

gitblog_00054的博客 205
上一篇: x64驱动 使用 InfinityHook
下一篇: ring0解锁文件
(-: LYSM :-)
博客等级 码龄10年 428粉丝 273原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值