Alex-Liu2024/win-clipboard-recover

GitHub: Alex-Liu2024/win-clipboard-recover

一款零依赖的取证级 Python 工具,直接从 cbdhsvc 进程内存堆中恢复被清除或覆盖的 Windows 剪贴板历史文本。

Stars: 0 | Forks: 0

# Windows 剪贴板内存数据恢复工具 [English](#english) | [中文](#中文) ## 英文版 一款取证级别的、无依赖的 Python 工具,用于直接从 Windows 剪贴板用户服务(`cbdhsvc`)的内存堆中恢复丢失或被覆盖的 Windows 剪贴板历史记录(未固定项)。 ### 问题背景 Windows 剪贴板历史记录(通过 `Win + V` 访问)仅将未固定项处理在剪贴板用户服务的易失性 RAM 中。当项目被清除、覆盖(因超出 25 个项目的限制被挤出)或系统重启时,这些记录将从活动界面中抹除。由于它们从不作为文件持久写入磁盘,标准的硬盘恢复工具和文件系统索引(MFT)扫描器无法恢复它们。 ### 解决方案 尽管剪贴板列表已被清空,但在那些特定的内存页被其他系统操作覆盖之前,字符串分配通常会保留在 `cbdhsvc` 服务进程(`svchost.exe`)的未分配内存堆中。 该脚本会打开目标进程,查询其已提交的虚拟内存页,并使用优化的二进制正则表达式高效提取 CJK(中文、日文、韩文)和 Latin 字符串,帮助您恢复丢失的文本、代码或 2FA 密钥。 ### 功能特性 - **无依赖**:仅使用 Python 标准库,并通过 `ctypes` 调用原生 Windows API。 - **内存高效**:直接在原始字节上使用二进制正则表达式,以防止产生庞大的中间内存分配。 - **动态支持 CJK 与 Latin 字符**:自动解析 UTF-16LE 和 UTF-8 编码,以同时恢复西方字符和中文字符。 - **过滤选项**: - 过滤特定的正则表达式模式(例如 2FA 密钥、电话号码、电子邮件)。 - 专门过滤 CJK 字符,以查找本地文档/聊天记录。 - **自动检测**:自动找到正确的宿主进程(运行 `cbdhsvc` 的 `svchost.exe`),无需手动输入 PID。 ### 环境要求 - **Python 3.x** - **Windows 操作系统** - **管理员权限**(打开并读取系统服务内存时必需) ### 用法 在已提权的命令提示符或 PowerShell(以管理员身份运行)中运行该脚本。 #### 1. 基础恢复 提取所有长度大于或等于 5 的唯一字符串,并将它们保存到 `recovered_clipboard.txt`: ``` python clipboard_recover.py ``` #### 2. 搜索 2FA 密钥 / 安全凭证 搜索 2FA 密钥(通常为 8 组 4 字符的字符串,用空格分隔,例如 `xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx`): ``` python clipboard_recover.py --search "\b[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}\b" ``` #### 3. 仅提取中文文本 仅恢复包含中文字符的字符串(非常适合恢复已删除的草稿、笔记或文章): ``` python clipboard_recover.py --chinese ``` #### 4. 自定义最小长度 仅提取较长的字符串(例如,长度 >= 10)以减少系统噪音: ``` python clipboard_recover.py --min-len 10 ``` #### 命令行参数 ``` options: -h, --help show this help message and exit --pid PID Specify target svchost.exe PID manually. If omitted, automatically detects the cbdhsvc service PID. --output OUTPUT Output file path (default: recovered_clipboard.txt) --search SEARCH Search for a specific regular expression pattern in the extracted strings (e.g. 2FA keys, emails) --chinese Only output strings containing CJK (Chinese) characters --min-len MIN_LEN Minimum string length to extract (default: 5) ``` ## 中文版 这是一款免安装、无任何第三方库依赖的 Windows 剪贴板历史记录(未固定项)内存数据取证恢复工具。它能够直接从 Windows 剪贴板用户服务(`cbdhsvc`)的内存堆中检索并导出不小心清空或被覆盖的文本历史记录。 ### 痛点背景 Windows 的剪贴板历史功能(按 `Win + V` 唤出)中,**未固定的历史项**仅以临时变量存储于剪贴板服务的内存(RAM)中。当这些内容因超出 25 个上限而被挤出、手动点击“清除全部”、或者电脑重启时,数据都会被剪贴板进程清空。由于这些临时记录未以文件形式写入磁盘,传统的硬盘文件恢复软件或 MFT 分区扫描器对此完全无能为力。 ### 解决方案 虽然剪贴板链表被清空,但在 C++ 进程堆内存中,已释放的剪贴板字符串在被系统重新分配的其他数据块覆盖之前,其原始文本仍会完整存留于未分配的内存堆页中。 本工具通过管理员权限直接打开 clipboard 宿主服务进程,遍历其 committed 状态的虚拟内存页,并在二进制字节流上使用高度优化的正则扫描机制,直接提取并解码 UTF-16LE 和 UTF-8 编码的 CJK(中日韩)和 Latin(英文字符)可见文本,从而最大化地帮您抢救回丢失的文字草稿、代码段或 2FA 密钥。 ### 核心功能 - **零外部依赖**:仅使用内置标准库,纯底层 Windows API(`ctypes`)开发,下载即可开箱即用。 - **高内存效率**:直接针对原始字节流(raw bytes)应用正则匹配,无需将整页解密至 Python unicode 字符串中,防止处理 100MB+ 的进程内存页时导致 `MemoryError` 内存溢出或响应卡死。 - **完善的中英文支持**:通过底层字节位模式,自动解码 UTF-16LE 和 UTF-8 的混合字符集,支持提取复杂的中文文本与标点符号。 - **高级过滤选项**: - 支持通过 `--search` 传入正则表达式过滤关键数据(如过滤 2FA 密钥、电话、IP 或邮箱)。 - 支持通过 `--chinese` 过滤中文文本,以便在杂乱的系统库名字节中快速提取您的文档和消息草稿。 - **自动定位 PID**:无需手动寻找服务进程 PID,脚本将自动根据服务名称定位对应的 `svchost.exe` 实例。 ### 运行环境 - **Python 3.x** - **Windows 操作系统** - **管理员权限**(需要管理员终端以获得 `PROCESS_VM_READ` 的进程内存读取权限) ### 使用指南 请在以 **管理员身份运行** 的命令提示符 (cmd) 或 PowerShell 中执行以下命令: #### 1. 基础全局恢复 提取长度大于等于 5 的所有唯一文本段并保存至 `recovered_clipboard.txt`: ``` python clipboard_recover.py ``` #### 2. 搜索 2FA 动态令牌/安全密钥 搜索典型的 8 组、每组 4 位的安全验证码(例如 `xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx`): ``` python clipboard_recover.py --search "\b[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}[-\s]+[a-zA-Z0-9]{4}\b" ``` #### 3. 仅提取中文草稿记录 只导出包含中文字符的文本段(适合用于找回刚才写的一段文案、聊天消息或临时记录): ``` python clipboard_recover.py --chinese ``` #### 4. 自定义最小字符阈值 仅提取更长(如大于 10 个字符)的连续文本,过滤微小的系统噪音: ``` python clipboard_recover.py --min-len 10 ``` #### 命令行参数说明 ``` options: -h, --help 显示帮助信息并退出 --pid PID 手动指定目标 svchost.exe 进程的 PID。默认会自动检测 cbdhsvc 服务。 --output OUTPUT 输出文件的保存路径 (默认: recovered_clipboard.txt) --search SEARCH 在提取结果中过滤匹配特定正则表达式的文本 (如 2FA 密钥, 邮箱等) --chinese 只输出包含 CJK(中文字符)的文本 --min-len MIN_LEN 限制被提取文本的最小长度 (默认: 5) ``` ## 免责声明 This utility is provided for personal data recovery and security research purposes only. Reading process memory of system services requires administrative credentials. Always ensure you have authorization before performing memory inspection on any target system. 本工具仅作为个人数据抢救和安全取证研究使用。读取系统进程的内存需要高等级安全授权。请在运行本脚本前确保您对目标主机具有完整合法的控制与使用权。
标签:HTTP工具, Python, SecList, 内存取证, 剪贴板, 数字取证, 数据恢复, 无后门, 端点可见性, 自动化脚本, 逆向工具