whitedevil1026/Rdp-Cache-parser

GitHub: whitedevil1026/Rdp-Cache-parser

Windows DFIR 工具,用于解析和拼接 RDP 位图缓存文件中的屏幕碎片,重建远程桌面会话画面以辅助取证调查。

Stars: 1 | Forks: 0

RDP Cache Parser logo

RDP Cache Parser

每一个像素都在讲述一个故事。
一款 Windows DFIR 工具,用于解析和重建来自 远程桌面协议 (RDP) bitmap cache 文件 (Cache####.bin, bcache##.bmc) 的屏幕图像。

Python 3.10+ Apache 2.0 License Tests PySide6

## 功能 | 类别 | 能力 | |---|---| | **解析** | `.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, 图像重建, 域渗透, 无后门, 电子数据取证, 逆向工具