Skip to main content

Windows-first static installer analysis for endpoint / CPE teams

Project description

pkgprobe 🔍

pkgprobe is a Windows-first CLI tool that statically analyzes EXE and MSI installers and produces a machine-readable install plan for endpoint management and packaging workflows.

Think: package intelligence for Intune, SCCM, Jamf, RMM, and Client Platform Engineering teams.

Available on PyPI.


✨ Why pkgprobe exists

Packaging software on Windows is still more art than science:

  • Silent install flags are undocumented or inconsistent\
  • Installer technologies vary wildly (Inno, NSIS, InstallShield, Burn, etc.)
  • Detection rules are often copied, guessed, or discovered via trial-and-error
  • Testing installers directly is slow and risky on production machines

pkgprobe focuses on the analysis phase first:

Understand what an installer is likely to do --- before you ever run it.


🧩 What it does (v0.1)

Given an .msi or .exe, pkgprobe outputs a structured install plan containing:

Installer Intelligence

  • Installer type detection (MSI, Inno Setup, NSIS, InstallShield, Burn, Squirrel, etc.)
  • Confidence-scored classification with supporting evidence

Command Inference

  • Probable silent install command(s), ranked by confidence
  • Probable uninstall command(s)
  • Evidence explaining why each command was suggested

Detection Guidance

  • MSI product code--based detection (when available)
  • Follow-up guidance for improving detection accuracy
  • Designed to integrate cleanly into Intune / SCCM detection logic

Automation-Friendly Output

  • JSON output suitable for pipelines and tooling
  • Human-readable CLI summary for engineers

⚠️ Safety-first by design
This version performs static analysis only.
No installers are executed.


📦 Example

pkgprobe analyze .\setup.exe --out installplan.json

CLI summary:

Type: Inno Setup (confidence 0.92)

Install candidates:
  setup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP- (0.88)
  setup.exe /SILENT /SUPPRESSMSGBOXES /NORESTART /SP-     (0.62)

Uninstall candidates:
  unins000.exe /VERYSILENT (0.55)

Generated installplan.json (excerpt):

{
  "installer_type": "Inno Setup",
  "confidence": 0.92,
  "install_candidates": [
    {
      "command": "setup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-",
      "confidence": 0.88
    }
  ]
}

🚀 Installation

From PyPI (recommended for users):

pip install pkgprobe
pkgprobe --version
pkgprobe analyze .\setup.exe --out installplan.json

From source (development):

This project uses uv for fast, reproducible Python environments.

pip install uv
git clone https://github.com/Zeph3r/pkgprobe.git
cd pkgprobe
uv venv
uv sync
uv run pkgprobe --help

Use --quiet / -q to suppress the banner when scripting (e.g. in CI or pipes).


🖥️ Supported Inputs

File Type Status Notes


MSI ✅ Metadata parsed via Windows Installer APIs EXE ✅ Heuristic detection via string & signature analysis MSIX/AppX 🔍 Detection hints only (wrapper detection)


🧠 How detection works

pkgprobe combines:

  • Static string extraction (ASCII + UTF-16LE)
  • Known installer signature patterns
  • Heuristic confidence scoring
  • Evidence tracking (matched strings, metadata clues)

This keeps analysis fast, safe, and explainable.


⚠️ Current limitations

  • Windows-first (intentional --- this targets Windows endpoints)
  • EXE analysis is heuristic-based (not guaranteed)
  • No execution or sandbox tracing in v0.1
  • Detection rules improve significantly with runtime tracing (planned)

🛣️ Roadmap

v0.2.0 (next)

CLI UX

  • JSON to stdout – Support pkgprobe analyze <file> --format json (or -o -) so scripts can consume JSON only from stdout without writing a file.
  • --summary-only – Option to print only the human summary (no JSON file, no "Wrote: ..."); useful for quick terminal checks.
  • Exit codes – Document and standardize exit codes (e.g. 0 = success, 1 = usage, 2 = file/analysis error) for scripting.
  • Subcommand examples – Add a one-line example in pkgprobe analyze --help so first-time users see usage immediately.

Output & format

  • --format yaml – Optional YAML output for install plan (alongside JSON).

Later (v0.3.0+)

  • install4j / Java-based installer detection
  • Partial-read scanning for very large EXEs
  • ProcMon-backed trace mode
  • Optional trace-install mode (opt-in, sandboxed)

👤 Who this is for

  • Client Platform Engineers
  • Endpoint / EUC Engineers
  • Intune / SCCM / Jamf admins
  • Security teams validating installer behavior
  • Anyone tired of guessing silent install flags

📄 License

MIT License


🔍 Philosophy

pkgprobe is intentionally conservative.

It prefers: - explainability over magic - confidence scoring over certainty - safety over speed

If it can't be confident, it tells you why.

That's how real platform tooling should behave.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pkgprobe-0.1.0.tar.gz (25.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pkgprobe-0.1.0-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file pkgprobe-0.1.0.tar.gz.

File metadata

  • Download URL: pkgprobe-0.1.0.tar.gz
  • Upload date:
  • Size: 25.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pkgprobe-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7cd6b0d5500ca93a0ae6b720d314ee112efbdcc6480f51cea0bf32e59b7227b2
MD5 86035fa4473ace9fecace8f02eb59703
BLAKE2b-256 8838ebca2f9a53caad84612ac0b70c7d79949e1398569986487da7ffd0b81a20

See more details on using hashes here.

File details

Details for the file pkgprobe-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pkgprobe-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pkgprobe-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 59b8ac9ece252e2c17eb239942ca774fe9daf9ec0e39c5453183844cf8c3fcf3
MD5 0e085a336ffe8ce8197e866850b7d63a
BLAKE2b-256 39064a435667937ec3cdf49c8079e4561f222a4f3e5e9cd7d81d02ad9920f594

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page