🎬 HoRain云小助手:个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

一、文件锁定机制与破解原理

1. 文件锁定成因分析

2. 内核级解锁流程

二、关键数据结构解析

1. 句柄信息结构体

2. 对象属性控制块

三、核心功能实现

1. 句柄遍历与定位

2. 句柄属性修改

3. 强制删除实现

四、完整代码实现

1. 驱动入口函数

2. 功能主逻辑

五、开发注意事项

1. 安全防护机制

2. 常见问题排查

3. 性能优化建议

六、应用场景扩展

1. 安全领域

2. 数据管理

3. 开发辅助


img


一、文件锁定机制与破解原理

1. 文件锁定成因分析

  • ​句柄占用:进程未释放文件对象(网页1、网页4)
  • ​共享冲突:FILE_SHARE_READ等属性设置不当(网页2)
  • ​系统保护:关键系统文件受资源管理器保护

2. 内核级解锁流程

graph TD
    A[遍历系统句柄表] --> B[定位目标文件句柄]
    B --> C[解除句柄保护属性]
    C --> D[关闭文件对象]
    D --> E[释放内存引用]

技术核心:通过ObSetHandleAttributes修改句柄属性,ZwClose释放对象(网页1)


二、关键数据结构解析

1. 句柄信息结构体

typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO {
    USHORT UniqueProcessId;
    USHORT CreatorBackTraceIndex;
    UCHAR ObjectTypeIndex;
    UCHAR HandleAttributes;  // 关键属性位
    USHORT HandleValue;
    PVOID Object;
    ULONG GrantedAccess;
} SYSTEM_HANDLE_TABLE_ENTRY_INFO;

核心字段:HandleAttributes控制句柄保护状态(网页4)

2. 对象属性控制块

typedef struct _OBJECT_HANDLE_FLAG_INFORMATION {
    BOOLEAN Inherit;
    BOOLEAN ProtectFromClose;  // 关闭保护标志
} OBJECT_HANDLE_FLAG_INFORMATION;

修改重点:将ProtectFromClose设为FALSE(网页1)


三、核心功能实现

1. 句柄遍历与定位

NTSTATUS EnumSystemHandles(PVOID Buffer, ULONG BufferSize) {
    NTSTATUS status;
    PSYSTEM_HANDLE_INFORMATION handleInfo = (PSYSTEM_HANDLE_INFORMATION)Buffer;
    
    for (ULONG i = 0; i < handleInfo->NumberOfHandles; ++i) {
        SYSTEM_HANDLE_TABLE_ENTRY_INFO entry = handleInfo->Handles[i];
        // 过滤非文件对象
        if (entry.ObjectTypeIndex != FILE_TYPE_INDEX) 
            continue;
        // 比对文件名逻辑
        ...
    }
    return STATUS_SUCCESS;
}

优化技巧:使用ZwQuerySystemInformation获取完整句柄表(网页1)

2. 句柄属性修改

NTSTATUS UnlockFileHandle(HANDLE TargetHandle) {
    OBJECT_HANDLE_FLAG_INFORMATION flagInfo;
    flagInfo.Inherit = FALSE;
    flagInfo.ProtectFromClose = FALSE;  // 解除保护
    
    return ObSetHandleAttributes(TargetHandle, &flagInfo);
}

安全处理:需先提升IRQL到PASSIVE_LEVEL(网页4)

3. 强制删除实现

NTSTATUS ForceDeleteFile(PUNICODE_STRING FilePath) {
    OBJECT_ATTRIBUTES objAttr;
    InitializeObjectAttributes(&objAttr, FilePath, OBJ_KERNEL_HANDLE, NULL, NULL);
    
    return ZwDeleteFile(&objAttr);  // 内核级删除
}

前置条件:确保所有句柄已关闭(网页2)


四、完整代码实现

1. 驱动入口函数

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) {
    // 初始化卸载函数
    DriverObject->DriverUnload = DriverUnload;
    
    // 获取目标文件路径
    UNICODE_STRING targetFile;
    RtlInitUnicodeString(&targetFile, L"\\??\\C:\\lockedfile.dll");
    
    // 执行解锁删除流程
    NTSTATUS status = UnlockAndDelete(&targetFile);
    
    return status;
}

2. 功能主逻辑

NTSTATUS UnlockAndDelete(PUNICODE_STRING FilePath) {
    // 步骤1:获取系统句柄信息
    PVOID buffer = ExAllocatePoolWithTag(NonPagedPool, BUFFER_SIZE, 'HDLR');
    ZwQuerySystemInformation(SystemHandleInformation, buffer, BUFFER_SIZE, NULL);
    
    // 步骤2:遍历定位目标句柄
    PHANDLE targetHandles = FindTargetHandles(buffer, FilePath);
    
    // 步骤3:解除句柄保护
    for (int i = 0; i < handleCount; ++i) {
        UnlockFileHandle(targetHandles[i]);
        ZwClose(targetHandles[i]);
    }
    
    // 步骤4:强制删除文件
    return ForceDeleteFile(FilePath);
}

内存管理:使用ExFreePool释放缓冲区(网页1)


五、开发注意事项

1. 安全防护机制

  • ​数字签名验证:驱动需加载测试签名模式(网页3)
  • ​权限提升检测:防止恶意进程利用技术
  • ​白名单机制:限制可操作文件路径

2. 常见问题排查

错误代码原因分析解决方案
STATUS_ACCESS_DENIED句柄属性未解除检查ObSetHandleAttributes返回值
STATUS_SHARING_VIOLATION残留句柄未关闭二次遍历确认句柄状态
STATUS_OBJECT_NAME_NOT_FOUND文件路径错误使用内核路径格式(\??\C:\)

3. 性能优化建议

  • ​异步操作:使用WorkQueue处理耗时遍历
  • ​缓存机制:保存常用文件句柄信息
  • ​批量处理:支持通配符批量解锁删除

六、应用场景扩展

1. 安全领域

  • 清除顽固恶意软件残留
  • 修复系统文件锁定故障

2. 数据管理

  • 自动化清理日志文件
  • 强制更新被占用的动态库

3. 开发辅助

  • 驱动安装包冲突解决
  • 自动化测试环境清理

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐