Zeph3r/pkgprobe

GitHub: Zeph3r/pkgprobe

Zeph3r/pkgprobe:Windows 安装程序智能分析平台

Stars: 0 | Forks: 0

# pkgprobe -> pkgprobe [![PyPI版本](https://img.shields.io/pypi/v/pkgprobe?color=4f46e5&style=flat-square)](https://pypi.org/project/pkgprobe/) [![Python版本](https://img.shields.io/pypi/pyversions/pkgprobe?style=flat-square&color=4f46e5)](https://pypi.org/project/pkgprobe/) [![许可证:MIT](https://img.shields.io/badge/license-MIT-gray?style=flat-square)](LICENSE) [![文档:使用说明](https://img.shields.io/badge/docs-usage-blue?style=flat-square)](docs/USAGE.md) [![文档:跟踪 + Intune](https://img.shields.io/badge/docs-trace%20%2B%20intune-blue?style=flat-square)](docs/TRACE-INTUNE.md) [![平台:Windows](https://img.shields.io/badge/platform-Windows-0078d4?style=flat-square&logo=windows)](https://pypi.org/project/pkgprobe/) **pkgprobe** 是一个针对端点团队的 Windows 安装程序智能工具包。 它结合了: - **静态分析** (`pkgprobe analyze`),用于快速、无执行预测静默安装命令、检测规则和卸载指南 - **可选的运行时验证** (`pkgprobe-trace`),在可丢弃的 VMware 快照中执行安装程序,捕获 ProcMon 支持的系统更改,并生成经过验证的输出(包括 `.intunewin` 打包工件) 想象一下:为 Intune、SCCM、Jamf、RMM 和客户端平台工程工作流程提供可靠的软件包智能。 可在 [PyPI](https://pypi.org/project/pkgprobe/) 上获取。 **[完整使用文档](docs/USAGE.md)** — 命令、选项、输出格式和跟踪安装行为。 **跟踪 + Intune 打包(VMware ProcMon 跟踪 → 验证清单 → `.intunewin`)**: **[完整跟踪/intunewin 文档](docs/TRACE-INTUNE.md)**。 ## ✨ pkgprobe 存在的原因 在 Windows 上打包软件仍然更多的是艺术而非科学: - 静默安装标志未记录或不一致 - 安装程序技术差异很大(Inno、NSIS、InstallShield、Burn 等) - 检测规则通常是通过复制、猜测或通过试错发现的 - 在生产机器上直接测试安装程序既慢又危险 **pkgprobe** 设计上以静态分析为主: ## 它做什么(v0.3) 给定 `.msi` 或 `.exe`,pkgprobe 输出一个包含以下内容的结构化 **安装计划**: ### 安装程序智能 - 检测安装程序类型(MSI、Inno Setup、NSIS、InstallShield、WiX Burn、Squirrel、MSIX/AppX Wrapper) - 带有结构化证据轨迹的置信度分类 - 预先检查(帮助屏幕、7-Zip 列表)在仅字节级标记不足时促进检测 - 家族可解释性:查看考虑了哪些家族以及为什么选择了获胜者 ### 部署评估 - **打包层**分类:简单、标准或跟踪所需 - **部署风险**评级(低/中/高) - 根据检测到的难度提供**可操作的下一步行动** - 与家族识别分开——同一个家族可以根据置信度有不同的部署可行性 ### 命令推断 - 可能的静默安装命令,按置信度排序 - 家族特定的卸载命令(Inno、NSIS、InstallShield、Burn、Squirrel、MSIX/AppX 和通用回退) - 解释为什么建议每个命令的证据 ### 检测指南 - 基于 MSI ProductCode 的检测(当可用时) - 家族感知的检测规则:注册表 ARP 检查、`file_exists` 用于特定于安装程序的卸载程序、Burn 包的注册表键、PowerShell `Get-AppxPackage` 用于 MSIX/AppX - 提高检测准确性的后续指南 - 设计用于干净地集成到 Intune / SCCM 检测逻辑中 ### 自动化友好的输出 - 适用于管道和工具的 JSON 输出 - 默认情况下为干净的 CLI 摘要;`--verbose`(-V)用于完整详细表(证据、所有候选者、检测规则、注释、替代方案) - 内部分析器遥测(`--telemetry`)用于诊断日志 ### 静态分析(MSI 优先,然后是 EXE) - **MSI** 首先分类并获取可预测的 `msiexec` 指南。包括部署评估和打包层。 - **EXE** 添加了 Windows 上的可选预先检查(`/?` 帮助、**7-Zip** 列表用于嵌套 `.msi` / Squirrel / `setup.ini` 指示)。安装计划包括 `silent_viability`、`recommendation`、部署风险和打包层;当静默不可靠时,该工具会将您引导到 **VM 跟踪** 而不是更多的静默标志猜测。 ### 可选的运行时跟踪 + 打包 - `pkgprobe-trace run` 在可丢弃的 VMware VM 快照中执行安装程序并捕获 ProcMon 跟踪数据 - **客户准备就绪** 使用 `vmrun checkToolsState` 轮询(有界等待)而不是固定睡眠;通过 `--boot-wait` 选项可选额外延迟 - **差异质量**:内置过滤器删除常见的 VM/ProcMon 噪音(VMware Tools 路径、跟踪工具、嘈杂的进程);可选 **安装程序 PID 树** 过滤(ProcMon `PID` / `Parent PID`);可选 **基线 CSV** 减法(空闲 VM 捕获)以删除启动/OS 噪音 - **可靠性**:`vmrun` 在失败的复制/客户操作上重试 - **性能**:首先将 PML 复制到主机,然后使用 `--host-procmon`(本地 `procmon.exe`)导出 CSV,而不是仅在客户机上导出 - **调试**:`--pause-after` 跳过清理快照还原,以便您可以检查 VM - 将 **`trace_contract.json`**(安装计划 + 原始差异)和总结检测到的静默参数、检测锚点和打包资格的 **`verified_manifest.json`** 写入本地跟踪 - `pkgprobe-trace pack-intunewin` 从跟踪运行产生的验证清单构建 `.intunewin` 包 **设计上以安全为首要考虑**\ 默认 `pkgprobe analyze` 仍然是 **仅静态分析**(无执行)。\ 运行时执行是可选的,并隔离在可丢弃的 VM 工作流程中。 ## 示例 ``` pkgprobe analyze .\setup.exe ``` 默认输出(干净的摘要): ``` Installer: Inno Setup Confidence: High Deployment Risk: Low Recommended next step: -> Try silent install: "setup.exe" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP- Packaging tier: Simple (Well-known silent switches; high detection confidence) Wrote: installplan.json ``` 添加 `--verbose`(-V)以获取完整详细表(证据、所有候选者、检测规则、注释、替代方案): ``` pkgprobe analyze .\setup.exe --verbose ``` 生成的 `installplan.json`(摘录): ``` { "installer_type": "Inno Setup", "confidence": 0.92, "deployment": { "silent_viability": "likely", "deployment_risk": "low", "recommended_next_step": "auto_package", "packaging_tier": "simple", "tier_reason": "Well-known silent switches; high detection confidence", "suggested_command": "\"setup.exe\" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" }, "install_candidates": [ { "command": "\"setup.exe\" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-", "confidence": 0.88 } ] } ``` 运行时跟踪 + 清单示例: ``` pkgprobe-trace run .\setup.exe ` --vmx "C:\VMs\TraceVM\TraceVM.vmx" ` --snapshot TRACE_BASE ` --guest-user Administrator ` --guest-pass "..." ` --output "C:\traces\job-001" ` --silent-args /S ` --emit-manifest ``` 可选标志(请参阅 [docs/TRACE-INTUNE.md](docs/TRACE-INTUNE.md)):例如 `--baseline-csv`(减去空闲跟踪)、`--host-procmon`(在主机上导出 PML→CSV)、`--vmrun-retries`、`--pause-after`、`--guest-tools-timeout`。 成功的 VMware 跟踪 + Intune 打包运行(包装回退与强大的检测锚点): ![VM 跟踪到 Intune 包成功](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/6bb76240fe133149.png) ## 安装 ### 从 PyPI(推荐) ``` pip install pkgprobe pkgprobe --version pkgprobe analyze .\setup.exe --out installplan.json ``` ### 从源(开发) 此项目使用 **uv** 来创建快速、可重复的 Python 环境。 ``` pip install uv git clone https://github.com/Zeph3r/pkgprobe.git cd pkgprobe uv venv uv sync uv run pkgprobe --help ``` 使用 `--quiet` / `-q` 在脚本中抑制横幅(CI、管道等)。 有关运行时跟踪和 Intune 打包设置,请参阅: - [docs/TRACE-INTUNE.md](docs/TRACE-INTUNE.md) ## 支持的输入 文件类型 状态 备注 MSI ✅ 通过 Windows 安装程序 API 解析元数据 EXE ✅ 通过字符串和签名分析进行启发式检测 MSIX / AppX 🔍 EXE 包装检测 + PowerShell 指南 ### 检测到的 EXE 安装程序家族 家族 字节标记 预先检查(7z) 安装开关 卸载 检测规则 NSIS ✅ — ✅ ✅ file_exists Inno Setup ✅ — ✅ ✅ file_exists InstallShield ✅ — ✅ ✅ ARP 注册表 WiX Burn ✅ ✅ ✅ ✅ 注册表键 Squirrel ✅ ✅ ✅ ✅ file_exists MSIX/AppX Wrapper ✅ — ✅ ✅ powershell ## 检测工作原理 pkgprobe 结合了: - 六个安装程序家族的静态字符串提取(ASCII + UTF-16LE) - PE 遮罩/结构启发式(NSIS 有效负载检测) - 可选的预先检查(帮助屏幕、7-Zip 列表),当仅字节级标记模糊时促进检测 - 启发式置信度评分(0–1,确定性) - 证据跟踪(匹配的字符串、元数据线索、预先检查提示) 这使分析 **快速、安全且可解释**。 ## 当前限制 - Windows 优先(有意为之——这针对 Windows 端点) - EXE 分析基于启发式(不保证) - 运行时跟踪目前针对基于 VMware Workstation 的 Windows 主机 - `pkgprobe-trace` 需要客户准备(VMware Tools、ProcMon、基线快照) - 跟踪差异是 **启发式**(ProcMon CSV);PID-tree 和基线选项提高信号但不是完整进程树回放的替代品 ## 路线图 ### v0.3.0(当前) - 每个家族的部署风险评估 - 带有 `--verbose`(-V)的干净默认 CLI 输出以获取详细信息 - 内部分析器遥测(`--telemetry`) - 家族可解释性(证据、考虑的替代方案) - Burn 置信度保守主义、Squirrel 输出细微差别 - MSIX/AppX 早期分支与原生部署指南 - MSI 部署评估和层 ### 下一步 - install4j / Java 基于的安装程序检测 - 非常大的 EXE 的部分读取扫描 - 扩展跟踪 + 打包的安装程序家族覆盖范围 ## 这是给谁的 - 客户端平台工程师 - 端点 / EUC 工程师 - Intune / SCCM / Jamf 管理员 - 验证安装程序行为的网络安全团队 - 任何厌倦了猜测静默安装标志的人 ## 哲学 pkgprobe 故意保守。 它更喜欢: - 可解释性而非魔法 - 置信度评分而非确定性 - 安全性而非速度 如果它不能自信,它会告诉你 *为什么*。 这就是真正的平台工具应该有的行为。 ## 许可证 MIT
标签:Intune, Jamf, pocsuite3, ProcMon, PyPI, RMM, SCCM, URL发现, VMware, VPS部署, 云安全监控, 动态追踪, 安全检测, 客户端管理, 打包工具, 数据管道, 端点安全, 补丁管理, 软件兼容性, 软件分发, 软件分发自动化, 软件分析, 软件卸载, 软件可用性, 软件可靠性, 软件安装, 软件安装命令, 软件工具, 软件工程, 软件性能, 软件打包, 软件智能, 软件智能平台, 软件更新管理, 软件检测规则, 软件测试, 软件版本控制, 软件生命周期管理, 软件维护, 软件许可证, 软件质量保证, 软件部署, 软件部署自动化, 软件配置管理, 逆向工具, 静态分析