whitedevil1026/Rdp-Cache-parser
GitHub: whitedevil1026/Rdp-Cache-parser
Windows DFIR 工具,用于解析和拼接 RDP 位图缓存文件中的屏幕碎片,重建远程桌面会话画面以辅助取证调查。
Stars: 1 | Forks: 0
RDP Cache Parser
每一个像素都在讲述一个故事。
一款 Windows DFIR 工具,用于解析和重建来自
远程桌面协议 (RDP) bitmap cache 文件
(Cache####.bin, bcache##.bmc) 的屏幕图像。
## 功能
| 类别 | 能力 |
|---|---|
| **解析** | `.bin` (Win 7+, 32位 BGRA) 和 `.bmc` (Vista/2008, 8/16/24位) |
| **重建** | 手动边缘匹配拼接画布(权威)+ 自动边缘匹配的分类假设 |
| **GUI** | 深色主题切片查看器、拖放、手动拼接画布 |
| **OCR** | 可选的切片文本提取 + 取证关键词检测 |
| **报告** | 包含 SHA-256 证据保管链的 HTML + JSON 取证报告 |
| **导出** | 单个切片或完整拼贴图 (PNG/BMP) |
| **会话** | 保存 / 加载手动拼接画布状态 |
### 重建 —— 能做什么和不能做什么
**RDP cache 文件不存储屏幕坐标。** 每个 64×64 的切片仅保存有一个
8 字节的内容 hash(用于去重);屏幕的 x/y 坐标仅存在于
实时会话期间的瞬态 `MemBlt` 绘制指令中,且绝不会写入磁盘。因此,完全自动且精确的屏幕重建是
**无法实现的** —— 按照 DFIR 社区的共识,这是一项
需要分析人员辅助完成的任务。
本工具反映了这一现实:
- **手动拼接画布**是权威的重建路径。它
使用像素边缘匹配来对每个单元格的候选切片进行排名,并且
每一次放置都是分析人员有据可查的选择。
- 提供**自动重建**仅*用于初步分类*。它是一个尽力而为的
假设 —— 每张输出的图像都带有“推断得出 —— 未加时间戳”的警告横幅和置信度评级,且绝不能
作为真实的屏幕截图展示。
自动路径的工作原理如下:
- **条带检测** —— `.bin` 文件中连续的切片通常对应于
相邻的屏幕位置;通过边缘匹配验证条带内的切片顺序
- **时间分组** —— 使用文件索引邻近度分离来自不同屏幕状态的切片
(间隔 > 150 → 新的快照)
- **边缘匹配块放置** —— 通过将其
边缘像素相互匹配来定位块(A 的底边 ↔ B 的顶边);没有
高置信度边缘匹配的块回退到文件顺序预估
- **自动分辨率** —— 从块宽度检测实际屏幕宽度 (1280 / 1366 / 1440 / 1920 /
2560 / 3840 px);无需手动配置
- **OCR 驱动的幻灯片** —— 当 OCR 文本可用时,屏幕状态被排列
成带有 `slides_manifest.json` 索引的编号幻灯片序列
### OCR 扫描(可选)
对每个非空白切片运行光学字符识别,并报告:
- 所有检测到的文本及其源文件、切片索引和字节偏移量
- IOC 命中 —— 匹配内置取证关键词列表的切片
(mimikatz, certutil, psexec, powershell, password, ntds.dit, 以及 40 多个其他词)
- GUI 中的实时关键词过滤器,用于快速分类
OCR 需要**可选的** `easyocr` 库(参见安装说明)。
### 取证报告
*生成报告* 工具栏按钮会生成两个文件:
- **`report.html`** — 人类可读的报告,包含案件元数据、源文件 hash、
解析统计信息、OCR IOC 命中情况以及重建的屏幕缩略图
- **`report.json`** — 用于 SIEM / SOAR 集成的机器可读结构化输出
包含证据保管链字段:源文件路径、大小、SHA-256 hash、工具
版本和运行时间戳、切片数量、带有精确字节偏移的 OCR 发现结果。
## 环境要求
- Python 3.10+
- PySide6 >= 6.5.0
- Pillow >= 9.0.0
- NumPy >= 1.21.0
- *(可选)* easyocr >= 1.7.0 — 仅在进行 OCR 扫描时需要
## 安装说明
```
# 核心工具(无 OCR)
pip install -r requirements.txt
# 支持 OCR
pip install easyocr
```
或者作为软件包安装:
```
pip install . # core only
pip install ".[ocr]" # with OCR
pip install ".[dev]" # with test suite
```
## 用法
```
python main.py
```
1. 将 `Cache` 文件夹拖放到窗口上,或使用 **打开文件** /
**打开文件夹** / **自动检测**
2. 工具会解析所有文件并立即运行智能重建
3. 在网格中浏览提取的切片(缩放、过滤空白、点击检查)
4. 点击 **重建屏幕** 以打开手动拼接画布
5. 点击 **OCR 扫描** 从所有切片中提取文本(需要 easyocr)
6. 点击 **生成报告** 导出 HTML + JSON 取证报告
7. 使用 **导出切片** / **导出拼贴图** 保存切片图像
每次解析后,重建的屏幕会自动写入到 cache
文件旁的 `smart_reconstruction/` 目录中。
## 支持的文件类型
| 文件 | Windows 版本 | 颜色深度 |
|---|---|---|
| `Cache0000.bin` – `Cache0005.bin` | Windows 7+ | 32位 BGRA |
| `bcache2.bmc` | Vista / Server 2008 | 8位索引 |
| `bcache22.bmc` | Vista / Server 2008 | 16位 RGB565 |
| `bcache24.bmc` | Vista / Server 2008 | 24位或32位 |
Cache 文件位于:
```
C:\Users\
\AppData\Local\Microsoft\Terminal Server Client\Cache
```
## 重要限制 —— EGFX / H.264 会话
使用 **H.264/AVC 编码**的 RDP 会话(由
RemoteFX 或现代的“体验”质量设置启用的 EGFX pipeline)**不会生成传统的
bitmap cache 切片**。Azure Virtual Desktop 和许多云端托管的桌面也会
禁用 bitmap caching。
空的 cache 文件(或解析出零个切片)**并不**排除 RDP 活动 ——
它可能仅仅意味着该会话使用了 EGFX pipeline。
传统的 bitmap caching 由带有*传统*图形设置的 `mstsc.exe` 使用
(取消勾选“使用硬件图形加速”并降低视觉质量设置)。
## 工作原理
1. **解析** — 读取二进制文件头、切片头和 BGRA 像素数据。
`.bmc` 切片使用 Windows DIB(自下而上)排序和可选的 RLE 压缩;
`.bin` 切片是自上而下、未压缩的。
2. **检测条带** — 扫描具有匹配的垂直右/底
边缘的连续切片;全宽条带 (n_cols ≈ 屏幕宽度 ÷ 64) 锚定每一行。
3. **时间分组** — 彼此在 150 个文件索引位置内的切片被
视为一个“屏幕快照”;较大的间隔会创建新的组。
4. **定位块** — 两步放置:先放置全宽块,然后
使用边缘匹配得分将部分宽度的块放入剩余列中。
5. **渲染** — 每个组被合成到虚拟画布上;每组生成一张 PNG。
6. **OCR** *(可选)* — 切片在识别前被放大 4 倍(64 → 256 px)
以便为 easyocr 提供足够的像素来实现可靠的字形检测。
## 运行测试
```
pip install ".[dev]"
pytest
```
测试套件(155 个通过,1 个跳过,不需要 easyocr 或 GUI)涵盖了
解析器、切片模型、RLE 解码器、边缘匹配器、聚类、智能重建、
OCR 引擎、OCR 置信度过滤器、审计日志、打包契约、GUI
pipeline 辅助程序、运行状态重置、附属 JSON 以及取证报告。
被跳过的测试仅在未安装 easyocr 时运行(用于确认
自动安装的回退路径);一旦存在 easyocr,
它就会自动被跳过。
## 许可证
**Apache License 2.0** — 参见 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。
本工具**对所有人免费使用,包括企业**。但是根据
Apache License 的第 4(d) 条,如果你重新分发它 —— 或者将其
代码或其重建 / 边缘匹配 / OCR 逻辑集成到你自己的工具中 ——
你**必须保留**来自 [NOTICE](NOTICE) 文件的归属声明:
简而言之:**自由使用,但请标明原作者。** Apache 2.0 还授予你
明确的专利许可。
## 致谢与版权声明
本工具作为原创作品构建。以下资源提供了参考:
- **BMC-Tools** (ANSSI) — https://github.com/ANSSI-FR/bmc-tools — CeCILL 2.1
— 用于理解 RDP bitmap cache 二进制格式的参考。
**没有从 BMC-Tools 复制任何代码。**
### 第三方库
| 库 | 许可证 | 用途 |
|---|---|---|
| [PySide6](https://www.qt.io/qt-for-python) | LGPL v3 | GUI 框架 |
| [Pillow](https://python-pillow.org/) | HPND | 图像处理 |
| [NumPy](https://numpy.org/) | BSD 3-Clause | 向量化边缘匹配 |
| [easyocr](https://github.com/JaidedAI/EasyOCR) *(可选)* | Apache 2.0 | 切片文本提取 |标签:Python, RDP, 图像重建, 域渗透, 无后门, 电子数据取证, 逆向工具