BZDaniel/RDPuzzle

GitHub: BZDaniel/RDPuzzle

基于神经网络和多信号匹配的 RDP 位图缓存碎片重建工具,在浏览器端运行 AI 推理与半自动拼接,大幅降低数字取证中屏幕重建的时间成本。

Stars: 26 | Forks: 1

![logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/a7e8cf4680040517.png) # RDPuzzle 使用神经边缘匹配、自动拼接和 OCR 技术,在浏览器本地将 RDP bitmap cache 碎片重建为可读的屏幕截图。 加载 64x64 位图图块,使用 HSV、Pearson 相关性以及在页面内运行的自训练神经网络 来评估相邻图块的匹配度,然后半自动地将它们拼接成更大的图像。具备多标签工作区、自动拼接、低信息图块过滤、OCR、撤销/重做、会话保存/加载等功能。 **[直接使用 →](https://bzdaniel.github.io/RDPuzzle/RDPuzzle.html)** ## 为什么 目前针对这个问题的工具操作非常手动且耗时,这就是痛点所在。 这个工具是我试图解决该问题的一次尝试。其目标是提取一个一直很强大但在大规模应用时不切实际的工件,并使其真正适用于实际的 IR 工作流,而无需花费半天时间去拼凑几个片段。 ## 功能 - 神经 EdgeMatch 评分 (自训练模型,通过 ONNX 在浏览器中运行) - 具有可配置阈值的自动拼接 - OCR - 单个 HTML 文件,无需安装 - 低信息图块过滤 (忽略空白/纯色图块) - 导入时跳过近似重复的图块 (99% 视觉相似度阈值) - 加载 RDP bitmap cache 碎片 (BMC, BIN) - 移动和交换已放置的图块 - 多标签工作区 - 撤销 / 重做 - 保存和加载会话 - 将重建的网格导出为图像 - 所有图块显示在网格中,可将其拖动到重建画布上 - 直接导入图像图块 ## 匹配 该工具结合多个信号来判断两个图块是否可能相邻。当一个单元格具有多个已放置的相邻图块时,每个图块都会提供匹配证据,因此相邻图块越多,匹配就越强。 **综合评分:** ``` HSV score x HSV weight + Pearson score x Pearson weight + EdgeMatch x EdgeMatch weight ``` 权重是可配置的。低信息乘数会对空白或近乎纯色的图块进行惩罚。 ### HSV 捆绑的单一指标,结合了两个信号: - **70%** 相邻图块边缘的 HSV 直方图重叠度 - **30%** 逐像素的接触边缘颜色连续性 适用于 UI 区域、照片、渐变。在平坦或重复区域效果较差。 ### Pearson 比较两条接触边缘之间的亮度关系。当亮度模式跨越边界连续时非常有用。当一对图块中的任何一个属于低细节图块时,其权重会被动态降低。 ### EdgeMatch (神经) 这是一个基于 InfoNCE 损失函数的自训练 CNN,它将图块和方向转换为 256 维的 embedding。可能相邻的图块最终会具有相似的 embedding。该模型使用真实的 RDP 会话数据并采用了难负例挖掘 进行训练。 **架构:** 输入是 64x64 的 RGB 图块加上一个方向(左/右/上/下)。在送入 CNN 之前,图块会经过旋转或翻转,使得我们关心的边缘始终位于右侧。这样一来,网络只需学习右边缘匹配,而方向则单独处理。 主干网络由四个带有 GroupNorm 的 ResNet 阶段组成。通道演进过程为 3 -> 32 -> 64 -> 128 -> 256。在主干网络之后,一个学习到的逐方向 FiLM 调制会对特征进行不同比例的缩放,以适应不同的方向。 此外,还有一个单独的小型卷积网络,专门处理右边缘的像素带(默认宽度为 16px)。这为模型提供了一条专注于实际图块边界的专用路径。 一个学习到的 32 维方向 embedding 保留了在规范化过程中丢失的上下文信息。 所有特征(主干特征 + 边缘特征 + 方向 embedding)会被拼接起来,并通过两个隐藏层生成一个 L2 归一化的 256 维向量。 **用法:** 给定一个锚点图块和方向,计算其 embedding,计算对侧的候选 embedding,通过余弦相似度 进行比较。相似度越高 = 越有可能是真实的相邻图块。 EdgeMatch 能够处理简单像素比较无法应对的情况:照片、抗锯齿 UI、富含文本的图块、噪点区域、渐变。 ## 自动拼接 以保守的方式扩展重建结果: 1. 从用户放置的“种子”图块开始(如果存在) 2. 对边界(已放置图块旁边的空单元格)的所有候选图块进行评分 3. 首先放置最强匹配(高于阈值) 4. 重新计算(因为新图块可以创造多邻居匹配机会) 5. 重复上述步骤,直到没有符合条件的边界匹配为止 6. 然后从具有最高“细节”分数的未使用图块中启动一个新的“孤岛”单元格 7. 继续直到没有良好的匹配剩余或达到孤岛数量限制 孤岛限制控制着自动拼接可以开启多少个新孤岛。用户放置的种子不计入该限制。 为获得最佳效果,请在自动拼接之前尝试手动匹配几个单元格。 ## 低信息图块过滤 检测空白、纯色或近乎空白的图块,因为纯色背景或 cmd 图块不包含任何信息,对判断相邻关系没有帮助。 基于亮度方差、梯度能量、Sobel 边缘密度和熵进行计算。 低于阈值的图块会受到惩罚,并降低其相邻评分。 ## Cache 顺序 RDP cache 顺序并不是一个可靠的时间线。缓存存储可重用的片段是为了提高性能。文件顺序可能暗示了某些信息,但视觉匹配才是主要信号。 ## 保存和加载 会话会保存图块元数据、网格位置、标签页、设置、撤销历史记录、重建状态和 embedding。 ## OCR 使用 OCR 来识别富含文本的图块。有助于处理浏览器碎片、终端窗口、文档文本和对话框。仅作为辅助信号。 提供两种 OCR 选项:为保证性能而在 4 个线程上运行的 tesseract,或者在 WebGPU 上运行的 paddleOCR。 ## 运行 在浏览器中打开。推荐使用 Chrome/Edge/Chromium(支持 ONNX 推理、canvas、拖放、OCR worker)。 ## 隐私 在本地运行。解析、评分、拼接和导出均在客户端进行。根据配置的不同,一些 OCR/模型资源可能会从外部来源加载。 ## 局限性 - 缓存碎片可能是不完整的 - 碎片不具备时间顺序 - 重复的 UI 模式可能导致错误匹配 - 纯色背景难以拼接,但由于其包含的“数据”量极少,应当受到惩罚 - 神经相似度只是一个排名信号,并非确凿证据 - 自动拼接仍需要手动修正 ## 许可证 RDPuzzle 可免费用于个人、教育、学术和非商业研究用途。 商业用途,包括公司、咨询机构、MDR/IR 供应商、企业内部安全团队或商业取证服务的使用,需要单独的商业许可证。 如需商业许可,请联系:mrdanielbenzano@gmail.com ## 作者 Daniel Ben Zano 特别感谢 Tal Gaffen
标签:BIN, BMC, CNCF毕业项目, HSV, IR工作流, meg, OCR, ONNX, RDP安全, RDP缓存重建, 位图碎片还原, 信息安全, 免安装工具, 单文件HTML, 可视化拼接, 后端开发, 图像处理, 客户端可视化, 库, 应急响应, 数字取证, 数据可视化, 浏览器端工具, 皮尔逊相关性, 碎片重组, 神经网络, 自动化脚本, 自动拼接, 边缘匹配, 远程桌面协议