torjaeger1709/windows-license-inspector
GitHub: torjaeger1709/windows-license-inspector
一款基于 C++17 的轻量级只读扫描器,通过双收集器交叉验证系统性检测 Windows 和 Office 的许可证篡改与激活绕过行为。
Stars: 0 | Forks: 0
# 许可证完整性扫描器
[](https://www.microsoft.com/windows)
[](https://en.cppreference.com/w/cpp/17)
[](https://cmake.org/)
[](#)
许可证检查器是一款使用 C++17 编写的轻量级、只读系统完整性扫描器。它对 Windows 10/11 和 Microsoft Office 2016/2019/2021/365 执行系统性检查,以检测未经授权的许可证修改、激活绕过脚本、本地 KMS 模拟器服务以及 Click-to-Run (C2R) 异常。
## 1. 范围与功能 (工具的作用与限制)
### 工具的作用
- **系统性取证分类**:在 Windows OS (`[A1 - A14]`) 和 Microsoft Office (`[B1 - B3]`) 中执行 17 项只读检查。
- **交叉验证共识**:将主要的内核/COM 许可证状态与辅助的 VBScript 输出 (`slmgr /dlv`) 进行比较,以识别差异。
- **硬件一致性验证**:通过 WMI 读取 ACPI `MSDM` 和 `OA3` 表,将出厂预装的 OEM 数字密钥与当前运行的操作系统版本进行比较。
- **结构化审计报告**:导出人类可读的 (`.txt`) 和机器可解析的 (`.json`) 审计报告,包含完整的收集器细分指标和原始审计跟踪。
### 工具的限制 (不执行的操作)
- **不执行自动修复或删除**:该工具在只读检查模式下运行。它不会删除文件、终止运行的服务或自动修改注册表项。
- **不支持旧版操作系统**:专为 64 位 Windows 10 和 Windows 11 (`x64`) 设计。不支持 Windows 7、Windows 8.1 和 ARM64 架构。
- **不解析外部依赖项**:完全依赖于内置的 Windows API (WMI, COM, Win32 API)。如果本地 WMI 存储库 (`winmgmt` 服务) 损坏或被禁用,受影响的检查将报告为 `UNAVAILABLE (N/A)`。
## 2. 系统架构与共识管道
### 2.1 高级架构图
```
graph TD
subgraph "System Collectors"
C1["Primary Collector
WMI / COM API
SoftwareLicensingProduct"] C2["Secondary Collector
VBScript Child Process
cscript slmgr.vbs /dlv"] C3["Hardware Collector
ACPI MSDM / OA3 Tables
Firmware OEM Key"] end subgraph "Normalization Layer" N1["Invariant-First Parser
Activation ID / App ID / GUIDs"] N2["Semantic Normalizer
Token-Alias Table Mapping"] end subgraph "Consensus & Verification Layer" V1["Multi-Collector Consensus Engine v1.1
Applicable Fields Agreement & Provenance Tracking"] V2["Zero-Downgrade & Graded Conflict Rules
CRITICAL MISMATCH vs. LEGITIMATE_UPGRADE"] end subgraph "Output & Reporting Layer" O1["Evidence Graph & Risk Scoring
7-Layer DAG Topology"] O2["TXT / JSON Audit Reports
SIEM / SOAR Compatible Schema"] end C1 --> N1 C2 --> N1 N1 --> N2 N2 --> V1 C3 --> V1 V1 --> V2 V2 --> O1 O1 --> O2 ``` ### 2.2 多收集器交叉验证 1. **收集器独立性与来源追踪**: - 主 WMI (`WMI_LICENSE_PRODUCT`):直接连接到 `ROOT\CIMV2` (`IWbemServices`) 以枚举 `PartialProductKey IS NOT NULL` 的 `SoftwareLicensingProduct` 记录。在测试运行中观察到的延迟分解平均值约为 `~15 ms` (COM 初始化) + `~20-515 ms` (查询执行,取决于 WMI 存储库缓存状态)。 - 辅助 SLMGR (`SLMGR_DLV`):通过具有 `7000 ms` 安全超时的异步管道执行 `cscript.exe //NoLogo %windir%\System32\slmgr.vbs /dlv`。观察到的平均延迟约为 `~340-380 ms` (进程生成和脚本解释)。 2. **不变性优先与 Token 别名标准化**: - 为了确保在本地化的 OS 环境 (例如日语、德语、法语) 中进行一致的评估,解析器会提取与语言无关的锚点字符串:`Activation ID` (`{GUID}`)、`Application ID` (`{GUID}`) 以及产品密钥的最后 5 个字符。 - 版本和通道描述通过别名表 (`EditionAlias`) 进行映射,统一等效的 token (`CoreCountrySpecific`, `CoreSingleLanguage`, `Core` $\rightarrow$ `HOME family`;`ProfessionalEducation`, `ProfessionalWorkstation` $\rightarrow$ `PRO family`)。 3. **多因子置信度与适用字段一致性**: - 一致性严格根据适用字段 (`comparedFields`) 进行评估。例如,在 `KMS Machine` 为 `NOT_APPLICABLE` 的零售版或 OEM 系统上,共识分数将在剩余的 4 个字段 (`Status`, `Edition`, `Channel`, `Partial Key`) 中进行计算。 - 如果 `SLMGR_DLV` 遇到超时或执行失败,`Zero-Downgrade Rule` 会将主要的 WMI 检查状态保留为 `VERIFIED` (`Confidence: WMI_ONLY`),且不会进行人为的扣分。 4. **分级冲突严重性与身份边界**: - WMI 和 SLMGR 之间的差异被归类为精确的原因代码 (`conflict_reason_code`):`CRITICAL MISMATCH` (例如,零售版配置上激活了 KMS/GVLK 覆盖) 对比 `LEGITIMATE_UPGRADE` (例如,出厂 OEM 家庭版硬件通过 Microsoft Store 升级为专业零售版)。 - 检查 `[A4]` 仅验证身份和许可证通道 (`Status`, `Edition`, `Channel`, `Partial Key`, `KMS Machine`),而检查 `[A14]` 评估硬件 ACPI `MSDM/OA3` 表的一致性。 ## 3. 威胁覆盖范围与取证套件 (`A1-A14`, `B1-B3`) ### 3.1 威胁覆盖矩阵 | 威胁 / 异常类别 | 目标攻击向量 | 关联的检查 ID | 验证检测标准 | |:---|:---|:---|:---| | **未经授权的 KMS 服务器** | 注册表 (`KeyManagementServiceServer`) & WMI 缓存 | `A1`, `A11` | 自定义 KMS 主机地址、环回 (`127.0.0.1`)、私有局域网 IP 或已知的盗版激活域名。 | | **激活绕过脚本** | PowerShell 历史记录 & 计划任务 | `A2`, `A6` | `ConsoleHost_history.txt` 中的脚本调用命令 (`irm massgrave.dev`, `slmgr /skms`, `gatherosstate`) 以及隐藏的计划续订任务 (`TASK_ENUM_HIDDEN`)。 | | **SPP 服务与 Hook 篡改** | 注册表 (`SkipRearm`)、`sppsvc` 配置和 WMI 许可记录 | `A3`, `A7`, `A8` | `SkipRearm = 1` 策略、`NoGenTicket` 遥测抑制、2038 年评估扩展 Hook 或被禁用的 `sppsvc` 服务。 | | **恶意 KMS 模拟器服务** | Windows 服务管理器 (`OpenSCManager`) & 文件系统 | `A5`, `A9` | 活动或休眠的模拟器服务 (`AutoKMS`, `KMSELDI`, `MAS_AActSvc`) 以及位于 `C:\Program Files` 或 `C:\Windows\Temp` 的破解工具目录 (`KMSAuto`, `KMSpico`, `AAct`)。 | | **网络与 DNS 黑洞** | 本地 `hosts` 文件 (`C:\Windows\System32\drivers\etc\hosts`) | `A10` | 针对微软激活服务器 (`0.0.0.0`, `127.0.0.1`) 或已知 KMS 盗版域名 (`kms.loli.beer`, `kms.03k.org`) 的重定向条目。 | | **SPP DLL 劫持** | COM 注册表 (`InProcServer32`) | `A13` | 验证 `sppc.dll` 和 `slc.dll` 的 COM 服务器路径是否严格指向 `C:\Windows\System32\` 内的有效二进制文件。 | | **硬件与操作系统差异** | ACPI `MSDM/OA3` 表与已安装的 OS 版本对比 | `A14` | 出厂预装的 OEM 数字密钥与当前运行的 OS 版本不匹配 (例如,OEM 家庭版硬件运行未经授权的 Volume/KMS 安装)。 | | **Office C2R / OSPP 异常** | WMI (`Applications\MicrosoftOffice`) & `ospp.vbs` | `B1`, `B2`, `B3` | 将 Click-to-Run (C2R) 用户订阅数字授权与本地安装的 MAK/KMS 密钥进行交叉验证。 | ### 3.2 详细检查规范 #### 模块 A:Windows 许可证取证与硬件一致性 | ID | 检查名称 | 角色 | 类型 | 主要数据源 | |:---|:---|:---|:---|:---| | `A1` | 恶意 KMS 服务器检测 | `PRIMARY` | `FORENSIC_EVIDENCE` | `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Software Protection Platform` & WMI `SoftwareLicensingService` | | `A2` | PowerShell 与 MAS 历史记录 | `PRIMARY` | `FORENSIC_EVIDENCE` | `%APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt` | | `A3` | KMS38 时间戳 Hook | `PRIMARY` | `FORENSIC_EVIDENCE` | WMI `SoftwareLicensingProduct` (评估结束日期) & 注册表 `SkipRearm` | | `A4` | 许可证状态与通道共识 | `PRIMARY` | `LICENSE_STATE` | 双收集器交叉验证:WMI `SoftwareLicensingProduct` 对比 `slmgr.vbs /dlv` 管道 | | `A5` | 破解工具目录 | `PRIMARY` | `FORENSIC_EVIDENCE` | 文件系统 (`C:\Program Files`, `C:\ProgramData`, `C:\Windows\Temp`) | | `A6` | 隐藏的计划任务 | `PRIMARY` | `FORENSIC_EVIDENCE` | 任务计划程序 API (`ITaskFolder::GetTasks(TASK_ENUM_HIDDEN)`) | | `A7` | 遥测与注册表策略 | `PRIMARY` | `FORENSIC_EVIDENCE` | 注册表 `HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Software Protection Platform` | | `A8` | 软件保护服务 | `PRIMARY` | `CONFIGURATION` | Windows 服务管理器 (`sppsvc` 启动类型和运行时状态) | | `A9` | KMS Windows 服务 | `PRIMARY` | `FORENSIC_EVIDENCE` | Windows 服务管理器 (`OpenSCManager` 扫描目标名称:`AutoKMS`, `KMSELDI` 等) | | `A10` | Hosts 文件篡改 | `PRIMARY` | `FORENSIC_EVIDENCE` | 文件系统 (`C:\Windows\System32\drivers\etc\hosts`) | | `A11` | KMS 主机缓存 | `PRIMARY` | `CONFIGURATION` | WMI `SoftwareLicensingProduct` (`KeyManagementServiceHost`, `KeyManagementServicePort`) | | `A12` | SPP 事件日志取证 | `PRIMARY` | `FORENSIC_EVIDENCE` | Windows 事件日志 API (`wevtapi.lib` 查询 `Microsoft-Windows-Security-SPP/Operational`) | | `A13` | DLL 劫持与 SPP 注册表 | `PRIMARY` | `FORENSIC_EVIDENCE` | 注册表 `HKLM\SOFTWARE\Classes\CLSID\{GUID}\InProcServer32` (`sppc.dll`, `slc.dll`) | | `A14` | 固件许可证一致性 | `SUPPORTING` | `CONFIGURATION` | WMI `ROOT\CIMV2` (`SoftwareLicensingService` / ACPI `MSDM` / `OA3` 原始二进制数据) | #### 模块 B:Microsoft Office 取证 | ID | 检查名称 | 角色 | 类型 | 主要数据源 | |:---|:---|:---|:---|:---| | `B1` | Office WMI 许可证探测 | `PRIMARY` | `LICENSE_STATE` | WMI `ROOT\CIMV2\Applications\MicrosoftOffice` (`LicensingStatus`, 通道, 部分密钥) | | `B2` | OSPP.VBS 本地密钥探测 | `SUPPORTING` | `FORENSIC_EVIDENCE` | 子进程执行 `cscript.exe //NoLogo ospp.vbs /dstatus` | | `B3` | Click-to-Run 数字授权 | `PRIMARY` | `LICENSE_STATE` | Click-to-Run 配置注册表与遥测 (`Digital Entitlement / User-Subscription`) | ## 4. 构建要求与编译 ### 4.1 系统依赖项 构建配置需要兼容 C++17 的编译器和原生 Windows SDK 头文件 (`Windows.h`, `WbemIdl.h`, `Taskschd.h`, `Shlwapi.h`, `EvtItf.h`, `Bcrypt.h`)。 | 工具链 / 组件 | 最低版本 | 推荐版本 | 验证目标平台 | |:---|:---|:---|:---| | **CMake** | `3.20+` | `3.28+` | Windows 10 / Windows 11 (`x64`) | **C++ 编译器** | 兼容 C++17 | MSVC 2019 / 2022 (`v19.28+`) | Visual Studio "使用 C++ 的桌面开发" | | **Windows SDK** | `10.0.19041.0+` | `10.0.22621.0+` | 原生链接库:`wbemuuid.lib`, `ole32.lib`, `oleaut32.lib`, `taskschd.lib`, `shlwapi.lib`, `wevtapi.lib`, `bcrypt.lib` | ### 4.2 编译说明 (通过 PowerShell 使用 MSVC) 在仓库根目录下打开 **Developer PowerShell for VS 2022**: ``` cmake -S . -B build -A x64 cmake --build build --config Release ``` 成功编译后,独立二进制文件将输出至:`.\build\Release\license-inspector.exe`。 ## 5. 命令行参考与用法 ### 5.1 CLI 参数 ``` Usage: license-inspector.exe [options] Options: --output, -o Specify file report output format:
- txt : ASCII text report
- json : Structured JSON audit report for SIEM/SOAR
- both : Save both TXT and JSON reports simultaneously
--file, -f Custom file path or base name (e.g., "audit_report_2026").
If omitted, auto-generates timestamped names:
"license_report_YYYYMMDD_HHMMSS.txt/json"
--no-pause, -n Do not wait for "Press any key to exit..." upon completion
(recommended for automated scripts and enterprise deployment)
--no-admin-check Allow running without Administrator privileges
(performs best-effort scan; restricted checks report ACCESS_DENIED)
--event-limit Limit number of Event Log records scanned in [A12] (default: 100)
--help, -h Display this help message and exit
```
### 5.2 使用场景
- **标准提权扫描**:
.\build\Release\license-inspector.exe
- **带有 SIEM JSON 导出的自动化审计**:
.\build\Release\license-inspector.exe --output both --file audit_host01 --no-pause --no-admin-check
在工作目录中生成四个输出文件:
1. `audit_host01.txt` (完整的 ASCII 审计报告)
2. `audit_host01.json` (结构化的 SIEM/SOAR JSON 报告)
3. `audit_host01_slmgr.txt` (原始 SLMGR 收集器输出文本镜像)
4. `collector_output/slmgr.txt` (目录审计镜像)
## 6. 样本输出验证
### 控制台报告
WMI / COM API
SoftwareLicensingProduct"] C2["Secondary Collector
VBScript Child Process
cscript slmgr.vbs /dlv"] C3["Hardware Collector
ACPI MSDM / OA3 Tables
Firmware OEM Key"] end subgraph "Normalization Layer" N1["Invariant-First Parser
Activation ID / App ID / GUIDs"] N2["Semantic Normalizer
Token-Alias Table Mapping"] end subgraph "Consensus & Verification Layer" V1["Multi-Collector Consensus Engine v1.1
Applicable Fields Agreement & Provenance Tracking"] V2["Zero-Downgrade & Graded Conflict Rules
CRITICAL MISMATCH vs. LEGITIMATE_UPGRADE"] end subgraph "Output & Reporting Layer" O1["Evidence Graph & Risk Scoring
7-Layer DAG Topology"] O2["TXT / JSON Audit Reports
SIEM / SOAR Compatible Schema"] end C1 --> N1 C2 --> N1 N1 --> N2 N2 --> V1 C3 --> V1 V1 --> V2 V2 --> O1 O1 --> O2 ``` ### 2.2 多收集器交叉验证 1. **收集器独立性与来源追踪**: - 主 WMI (`WMI_LICENSE_PRODUCT`):直接连接到 `ROOT\CIMV2` (`IWbemServices`) 以枚举 `PartialProductKey IS NOT NULL` 的 `SoftwareLicensingProduct` 记录。在测试运行中观察到的延迟分解平均值约为 `~15 ms` (COM 初始化) + `~20-515 ms` (查询执行,取决于 WMI 存储库缓存状态)。 - 辅助 SLMGR (`SLMGR_DLV`):通过具有 `7000 ms` 安全超时的异步管道执行 `cscript.exe //NoLogo %windir%\System32\slmgr.vbs /dlv`。观察到的平均延迟约为 `~340-380 ms` (进程生成和脚本解释)。 2. **不变性优先与 Token 别名标准化**: - 为了确保在本地化的 OS 环境 (例如日语、德语、法语) 中进行一致的评估,解析器会提取与语言无关的锚点字符串:`Activation ID` (`{GUID}`)、`Application ID` (`{GUID}`) 以及产品密钥的最后 5 个字符。 - 版本和通道描述通过别名表 (`EditionAlias`) 进行映射,统一等效的 token (`CoreCountrySpecific`, `CoreSingleLanguage`, `Core` $\rightarrow$ `HOME family`;`ProfessionalEducation`, `ProfessionalWorkstation` $\rightarrow$ `PRO family`)。 3. **多因子置信度与适用字段一致性**: - 一致性严格根据适用字段 (`comparedFields`) 进行评估。例如,在 `KMS Machine` 为 `NOT_APPLICABLE` 的零售版或 OEM 系统上,共识分数将在剩余的 4 个字段 (`Status`, `Edition`, `Channel`, `Partial Key`) 中进行计算。 - 如果 `SLMGR_DLV` 遇到超时或执行失败,`Zero-Downgrade Rule` 会将主要的 WMI 检查状态保留为 `VERIFIED` (`Confidence: WMI_ONLY`),且不会进行人为的扣分。 4. **分级冲突严重性与身份边界**: - WMI 和 SLMGR 之间的差异被归类为精确的原因代码 (`conflict_reason_code`):`CRITICAL MISMATCH` (例如,零售版配置上激活了 KMS/GVLK 覆盖) 对比 `LEGITIMATE_UPGRADE` (例如,出厂 OEM 家庭版硬件通过 Microsoft Store 升级为专业零售版)。 - 检查 `[A4]` 仅验证身份和许可证通道 (`Status`, `Edition`, `Channel`, `Partial Key`, `KMS Machine`),而检查 `[A14]` 评估硬件 ACPI `MSDM/OA3` 表的一致性。 ## 3. 威胁覆盖范围与取证套件 (`A1-A14`, `B1-B3`) ### 3.1 威胁覆盖矩阵 | 威胁 / 异常类别 | 目标攻击向量 | 关联的检查 ID | 验证检测标准 | |:---|:---|:---|:---| | **未经授权的 KMS 服务器** | 注册表 (`KeyManagementServiceServer`) & WMI 缓存 | `A1`, `A11` | 自定义 KMS 主机地址、环回 (`127.0.0.1`)、私有局域网 IP 或已知的盗版激活域名。 | | **激活绕过脚本** | PowerShell 历史记录 & 计划任务 | `A2`, `A6` | `ConsoleHost_history.txt` 中的脚本调用命令 (`irm massgrave.dev`, `slmgr /skms`, `gatherosstate`) 以及隐藏的计划续订任务 (`TASK_ENUM_HIDDEN`)。 | | **SPP 服务与 Hook 篡改** | 注册表 (`SkipRearm`)、`sppsvc` 配置和 WMI 许可记录 | `A3`, `A7`, `A8` | `SkipRearm = 1` 策略、`NoGenTicket` 遥测抑制、2038 年评估扩展 Hook 或被禁用的 `sppsvc` 服务。 | | **恶意 KMS 模拟器服务** | Windows 服务管理器 (`OpenSCManager`) & 文件系统 | `A5`, `A9` | 活动或休眠的模拟器服务 (`AutoKMS`, `KMSELDI`, `MAS_AActSvc`) 以及位于 `C:\Program Files` 或 `C:\Windows\Temp` 的破解工具目录 (`KMSAuto`, `KMSpico`, `AAct`)。 | | **网络与 DNS 黑洞** | 本地 `hosts` 文件 (`C:\Windows\System32\drivers\etc\hosts`) | `A10` | 针对微软激活服务器 (`0.0.0.0`, `127.0.0.1`) 或已知 KMS 盗版域名 (`kms.loli.beer`, `kms.03k.org`) 的重定向条目。 | | **SPP DLL 劫持** | COM 注册表 (`InProcServer32`) | `A13` | 验证 `sppc.dll` 和 `slc.dll` 的 COM 服务器路径是否严格指向 `C:\Windows\System32\` 内的有效二进制文件。 | | **硬件与操作系统差异** | ACPI `MSDM/OA3` 表与已安装的 OS 版本对比 | `A14` | 出厂预装的 OEM 数字密钥与当前运行的 OS 版本不匹配 (例如,OEM 家庭版硬件运行未经授权的 Volume/KMS 安装)。 | | **Office C2R / OSPP 异常** | WMI (`Applications\MicrosoftOffice`) & `ospp.vbs` | `B1`, `B2`, `B3` | 将 Click-to-Run (C2R) 用户订阅数字授权与本地安装的 MAK/KMS 密钥进行交叉验证。 | ### 3.2 详细检查规范 #### 模块 A:Windows 许可证取证与硬件一致性 | ID | 检查名称 | 角色 | 类型 | 主要数据源 | |:---|:---|:---|:---|:---| | `A1` | 恶意 KMS 服务器检测 | `PRIMARY` | `FORENSIC_EVIDENCE` | `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Software Protection Platform` & WMI `SoftwareLicensingService` | | `A2` | PowerShell 与 MAS 历史记录 | `PRIMARY` | `FORENSIC_EVIDENCE` | `%APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt` | | `A3` | KMS38 时间戳 Hook | `PRIMARY` | `FORENSIC_EVIDENCE` | WMI `SoftwareLicensingProduct` (评估结束日期) & 注册表 `SkipRearm` | | `A4` | 许可证状态与通道共识 | `PRIMARY` | `LICENSE_STATE` | 双收集器交叉验证:WMI `SoftwareLicensingProduct` 对比 `slmgr.vbs /dlv` 管道 | | `A5` | 破解工具目录 | `PRIMARY` | `FORENSIC_EVIDENCE` | 文件系统 (`C:\Program Files`, `C:\ProgramData`, `C:\Windows\Temp`) | | `A6` | 隐藏的计划任务 | `PRIMARY` | `FORENSIC_EVIDENCE` | 任务计划程序 API (`ITaskFolder::GetTasks(TASK_ENUM_HIDDEN)`) | | `A7` | 遥测与注册表策略 | `PRIMARY` | `FORENSIC_EVIDENCE` | 注册表 `HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Software Protection Platform` | | `A8` | 软件保护服务 | `PRIMARY` | `CONFIGURATION` | Windows 服务管理器 (`sppsvc` 启动类型和运行时状态) | | `A9` | KMS Windows 服务 | `PRIMARY` | `FORENSIC_EVIDENCE` | Windows 服务管理器 (`OpenSCManager` 扫描目标名称:`AutoKMS`, `KMSELDI` 等) | | `A10` | Hosts 文件篡改 | `PRIMARY` | `FORENSIC_EVIDENCE` | 文件系统 (`C:\Windows\System32\drivers\etc\hosts`) | | `A11` | KMS 主机缓存 | `PRIMARY` | `CONFIGURATION` | WMI `SoftwareLicensingProduct` (`KeyManagementServiceHost`, `KeyManagementServicePort`) | | `A12` | SPP 事件日志取证 | `PRIMARY` | `FORENSIC_EVIDENCE` | Windows 事件日志 API (`wevtapi.lib` 查询 `Microsoft-Windows-Security-SPP/Operational`) | | `A13` | DLL 劫持与 SPP 注册表 | `PRIMARY` | `FORENSIC_EVIDENCE` | 注册表 `HKLM\SOFTWARE\Classes\CLSID\{GUID}\InProcServer32` (`sppc.dll`, `slc.dll`) | | `A14` | 固件许可证一致性 | `SUPPORTING` | `CONFIGURATION` | WMI `ROOT\CIMV2` (`SoftwareLicensingService` / ACPI `MSDM` / `OA3` 原始二进制数据) | #### 模块 B:Microsoft Office 取证 | ID | 检查名称 | 角色 | 类型 | 主要数据源 | |:---|:---|:---|:---|:---| | `B1` | Office WMI 许可证探测 | `PRIMARY` | `LICENSE_STATE` | WMI `ROOT\CIMV2\Applications\MicrosoftOffice` (`LicensingStatus`, 通道, 部分密钥) | | `B2` | OSPP.VBS 本地密钥探测 | `SUPPORTING` | `FORENSIC_EVIDENCE` | 子进程执行 `cscript.exe //NoLogo ospp.vbs /dstatus` | | `B3` | Click-to-Run 数字授权 | `PRIMARY` | `LICENSE_STATE` | Click-to-Run 配置注册表与遥测 (`Digital Entitlement / User-Subscription`) | ## 4. 构建要求与编译 ### 4.1 系统依赖项 构建配置需要兼容 C++17 的编译器和原生 Windows SDK 头文件 (`Windows.h`, `WbemIdl.h`, `Taskschd.h`, `Shlwapi.h`, `EvtItf.h`, `Bcrypt.h`)。 | 工具链 / 组件 | 最低版本 | 推荐版本 | 验证目标平台 | |:---|:---|:---|:---| | **CMake** | `3.20+` | `3.28+` | Windows 10 / Windows 11 (`x64`) | **C++ 编译器** | 兼容 C++17 | MSVC 2019 / 2022 (`v19.28+`) | Visual Studio "使用 C++ 的桌面开发" | | **Windows SDK** | `10.0.19041.0+` | `10.0.22621.0+` | 原生链接库:`wbemuuid.lib`, `ole32.lib`, `oleaut32.lib`, `taskschd.lib`, `shlwapi.lib`, `wevtapi.lib`, `bcrypt.lib` | ### 4.2 编译说明 (通过 PowerShell 使用 MSVC) 在仓库根目录下打开 **Developer PowerShell for VS 2022**: ``` cmake -S . -B build -A x64 cmake --build build --config Release ``` 成功编译后,独立二进制文件将输出至:`.\build\Release\license-inspector.exe`。 ## 5. 命令行参考与用法 ### 5.1 CLI 参数 ``` Usage: license-inspector.exe [options] Options: --output, -o
标签:Bash脚本, C++17, HTTP头分析, Linux, Windows, 完整性检查, 系统运维, 许可证审计