npapatheodorou/affinity-guard-go

GitHub: npapatheodorou/affinity-guard-go

Windows 防截屏监控工具的 Go 移植版,通过内核驱动或用户模式补丁检测并中和屏幕捕获尝试与 DRM 绕过补丁。

Stars: 0 | Forks: 0

# ProtectionOverflow Monitor (Go 移植版) Windows 防截屏监控工具。可检测屏幕捕获尝试、DRM 绕过补丁,并能中和显示亲和性保护。 ## 前置条件 - **Windows 10/11** (x64) - **Go 1.21+** — 从 https://go.dev/dl/ 下载 验证 Go 是否已安装: ``` go version ``` ## 构建 在 `goloader/` 目录下执行: ``` go mod tidy go build -o dot.exe ``` 或者直接双击 `build.bat`。 ## 运行 ``` dot.exe [options] [process_names...] ``` ### 基础监控 ``` dot.exe ``` 打开控制台窗口并打印点号(静默模式 — 每个点代表程序正在运行)。关闭窗口或按 **Ctrl+C** 停止。 ### 查看检测结果(详细模式) Go 移植版默认以静默模式运行(仅显示点号,与最新的 C++ 版本保持一致)。要查看完整的检测输出,请检查在当前目录下生成的日志文件: ``` lockdown_2026-06-04T12-34-56.log ``` 或者禁用静默模式/重定向输出(取决于终端环境)。日志文件包含所有窗口扫描、保护状态更改以及捕获流水线的警报信息。 ### 监控并中和特定进程的显示亲和性 ``` dot.exe javaw.exe java.exe ``` 将 `javaw.exe` 和 `java.exe` 所拥有的窗口的 `WDA_EXCLUDEFROMCAPTURE` / `WDA_MONITOR` 重置为 `WDA_NONE`。默认使用内核驱动模式。 ### 用户模式补丁(无需驱动) ``` dot.exe --user-patch javaw.exe ``` 修补目标进程中的 `SetWindowDisplayAffinity`,使其始终返回 TRUE(空操作)。无需内核驱动。 ### 重置所有进程的亲和性 ``` dot.exe --all ``` ### 禁用日志文件 ``` dot.exe --no-log ``` 默认情况下,所有诊断信息都会输出到日志文件中。使用 `--no-log` 可禁止生成日志。 ### 自定义驱动名称 ``` dot.exe --driver MyDriverName javaw.exe ``` ### 完整选项 | 标志 | 描述 | |---|---| | `--user-patch` | 使用用户模式补丁代替内核驱动 | | `--worker` | 由服务启动器生成(内部使用) | | `--no-log` | 禁用日志文件生成 | | `--all` | 重置所有进程的显示亲和性 | | `--driver ` / `-d ` | 自定义内核驱动设备名称 | | `--help` / `-h` | 显示帮助 | ## 文件结构 | 文件 | 用途 | |---|---| | `main.go` | 入口点,标志解析 | | `types.go` | 共享数据结构 | | `winapi.go` | Win32 API 声明(延迟加载 DLL) | | `driver.go` | 内核驱动 IOCTL 通信 | | `scan.go` | 窗口枚举和显示亲和性扫描 | | `pipeline.go` | 捕获流水线检测(NvFBC、模块、补丁) | | `patch.go` | 用户模式 `SetWindowDisplayAffinity` 修补 | | `monitor.go` | 核心监控循环 | | `service.go` | Windows 服务启动器(生成用户会话工作进程) | ## 架构 ![系统架构](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/0465d9a0a0210250.svg) ## 工作原理 1. **窗口扫描** — 每 500ms 枚举所有顶级窗口,检查显示亲和性(`WDA_NONE`、`WDA_MONITOR`、`WDA_EXCLUDEFROMCAPTURE`),并检测可疑的覆盖层(分层 + 置顶 + 透明)。 2. **流水线扫描** — 每 5 秒检查所有进程是否包含: - 加载了 NvFBC64.dll 或 NvFBC.dll(NVIDIA 捕获库) - 截屏软件的 DLL(obs.dll、discord_hook.dll、fraps.dll 等) - `GetWindowDisplayAffinity` 函数被修补(DRM 绕过检测) - 正在运行 ffmpeg.exe(JPEG 编码阶段) 3. **亲和性绕过** — 通过内核驱动或用户模式补丁重置目标进程的显示亲和性。 ## 与 C++ 原版的区别 - **无需内核驱动** 即可进行用户模式补丁 (`--user-patch`) - **无需 Visual Studio / Windows SDK** — 仅需 Go - **拥有同等的 Win32 API 覆盖率**,通过 `golang.org/x/sys/windows` 以及延迟加载 DLL 实现
标签:DRM, EVTX分析, Go, Ruby工具, 云资产清单, 内存补丁, 内核驱动, 反截屏监控, 日志审计, 端点可见性, 系统底层, 网络协议, 逆向工程