Zeph3r/pkgprobe
GitHub: Zeph3r/pkgprobe
Zeph3r/pkgprobe:Windows 安装程序智能分析平台
Stars: 0 | Forks: 0
# pkgprobe -> pkgprobe
[](https://pypi.org/project/pkgprobe/)
[](https://pypi.org/project/pkgprobe/)
[](LICENSE)
[](docs/USAGE.md)
[](docs/TRACE-INTUNE.md)
[](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 打包运行(包装回退与强大的检测锚点):

## 安装
### 从 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部署, 云安全监控, 动态追踪, 安全检测, 客户端管理, 打包工具, 数据管道, 端点安全, 补丁管理, 软件兼容性, 软件分发, 软件分发自动化, 软件分析, 软件卸载, 软件可用性, 软件可靠性, 软件安装, 软件安装命令, 软件工具, 软件工程, 软件性能, 软件打包, 软件智能, 软件智能平台, 软件更新管理, 软件检测规则, 软件测试, 软件版本控制, 软件生命周期管理, 软件维护, 软件许可证, 软件质量保证, 软件部署, 软件部署自动化, 软件配置管理, 逆向工具, 静态分析