# 安全说明

## 安全边界

Blakhole 通过 Windows 屏幕捕获接口取得本机画面，并在内存和 GPU 中生成黑洞视觉效果。捕获内容不会由 `blackhole.exe` 保存、上传或发送到网络。

Qt 配置工具 `appBlakholeUI.exe` 可访问 GitHub Releases 检查正式版本更新。它只读取版本信息并用系统浏览器打开发布页，不会在程序内下载、解压或替换可执行文件。渲染器 `blackhole.exe` 不包含网络通信功能。

## 敏感权限说明

- 屏幕捕获：黑洞渲染的核心输入，画面只在本机处理。
- 进程查询：用于判断全屏游戏、媒体播放状态和管理本程序创建的渲染子进程，不用于注入其他进程。
- 子进程与 Job Object：多显示器模式会创建多个渲染实例，并在父进程退出时清理这些受管实例。
- 全局热键：主渲染器注册 `Ctrl+Alt+R`，用于切换录制捕获状态，不轮询全局键盘状态。
- 开机自启动：仅由 Qt 配置工具在当前用户的 `Run` 注册表项中管理，渲染器不写入自启动项。

程序使用普通用户权限运行，不请求管理员权限。项目不使用 UPX、加壳、混淆、随机修改文件或伪造数字签名来规避安全检测。

## 发布文件与哈希

正式候选包包含 `RELEASE_INFO.txt`、`release_checksums.sha256` 和 `verify_release_checksums.ps1`。前者记录版本、标签、Git 提交、UTC/本地构建时间、签名状态和未剥离构建产物哈希；哈希清单递归覆盖解压目录中的全部文件，仅排除清单自身，并包含校验器脚本。

在解压目录中执行：

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File .\verify_release_checksums.ps1
```

校验器只使用 PowerShell 自带的 `Get-FileHash`，不需要源码、构建目录或 `objdump`。它会拒绝不安全路径、格式错误、哈希不一致，以及清单和解压目录之间的漏项或多余项。`tools/check_release_security.ps1` 依赖发布者的构建环境，只供发布前检查，不要求下载用户运行。

哈希只能证明文件与发布者提供的候选文件一致，不能代替来源确认、代码审查或数字签名。

## 签名与误报限制

v1.2.0 的本地构建状态记录为 `Unsigned/NotSigned`，不伪造发布者或证书身份。将来如使用可信代码签名证书，应同时签署两个 EXE，并在发布前验证签名和时间戳。

屏幕捕获、全局热键和较低下载信誉仍可能触发启发式检测。本项目只能通过收敛敏感行为、公开源码、稳定哈希和厂商复核来尽量降低误报概率，不能承诺任何安全产品绝对不报警。

未经文件所有者明确授权，不应把 EXE 上传到 VirusTotal、杀毒厂商或其他外部扫描服务。提交误报申诉时，应使用最终候选文件，记录检测名称、安全产品与引擎版本、命中文件、SHA-256、正式 Release URL、源码 URL、功能说明，以及发布检查中未发现所列常见网络和进程注入导入的结果。该导入检查只覆盖脚本明确列出的常见 API，不构成对所有实现形式的形式化证明。申诉后不要重新编译或随机修改文件，否则哈希变化会使原证据失效。

## 报告安全问题

报告真实安全问题时，请提供受影响版本、复现步骤、影响范围和必要日志。涉及未公开漏洞或敏感信息时，优先使用 GitHub 的私密安全报告渠道，不要在公开 Issue 中粘贴个人画面、访问令牌或其他隐私数据。
