Skip to main content

Generate forensic/pentest artifact manifests; zip, encrypt (OpenSSL), and sign (GPG) with a polished TUI.

Project description

Manifest Wizard (yes, it actually works)

You drop a bunch of forensic/pentest artifacts in a pile and Manifest Wizard turns them into neat little manifests (JSON + CSV), computes hashes, zips everything up, can encrypt it with OpenSSL if you’re paranoid, and sign it with GPG if you want to pretend you did it all properly.

It ships a fancy interactive Rich UI for humans and a no-nonsense CLI for CI systems that don’t care about your feelings.

Install

If you know how to type and have Python, this will be the easiest part of your day:

$ pip install manifest-wizard

Usage

Interactive (for people who like pretty things and colorful progress bars)

$ manifest-wizard

Walk away while it makes your life tidy. Or hover over it...I won’t judge.

Non-interactive (for scripts, cron jobs, and robots)

If you prefer things automated like most of the questionable decisions in IT...here's the full command:

$ manifest-wizard \
  --non-interactive \
  --finding-id CASE-20251005-01 \
  --phase Exploit \
  --collector alice \
  --tool curl \
  --tool-version 8.9.1 \
  --tool-command "curl --version" \
  --target "https://api.example.com/endpoint" \
  --notes "POC collection for ticket #123" \
  --add-file ./req.txt:request \
  --add-file ./resp.json:response \
  --encrypt \
  --sign \
  --gpg-key alice@example.com

Yes, all those flags. Yes, you probably need most of them. No, there’s no “Make me a sandwich” flag...the moral standards of CLI maintainers are low, but not that low.

What it actually does (short version)

  • Scans and records files you tell it about.
  • Computes hashes so you can prove you didn’t “accidentally” alter anything.
  • Zips the artifacts, because nobody wants twenty loose files floating around.
  • Optionally encrypts with OpenSSL (AES-256-GCM preferred, falls back to AES-256-CBC like a polite bouncer).
  • Optionally signs with GPG (detached ASCII), because signatures look official and make things feel legal.

Notes (nerdy but important)

  • Encryption prefers AES-256-GCM if your OpenSSL is modern and feeling brave; otherwise it falls back to AES-256-CBC like a sensible adult.
  • Password strengthening: PBKDF2 with 100,000 iterations and salted...yes, it takes a moment, but you wanted secure, not instant-gratification.
  • Signing uses detached ASCII GPG signatures.
  • Pass --gpg-key to select a specific key. If you don’t, it’ll try the default key and hope for the best.

Tests (they work; don’t make it mad)

Minimal smoke test to keep CI happy:

from pathlib import Path
from manifest_wizard.models import ManifestBuilder, FileMeta
from manifest_wizard.storage import ArtifactCollector

def test_builder(tmp_path: Path):
    b = ManifestBuilder("CASE-1", "Exploit", "alice", "curl", "8.0", "curl --version", "https://x", "notes")
    ac = ArtifactCollector(tmp_path)
    case = ac.create_case_dir("CASE-1", now=b.now)
    # create a temp file and add
    p = case / "dummy.txt"
    p.write_text("hello")
    meta = ac.copy_evidence(p, case, "other", 1)
    b.add_file(meta)
    m = b.build()
    assert m.files and m.finding_id == "CASE-1"

Run the tests. If they fail, blame the CI pipeline and then fix your code.

Contributing

Open a PR, file an issue, or send a strongly worded email. Contributions welcome. Be kind, or at least be funny about it.

Final thoughts (advice you didn’t ask for)

If you're handling evidence, treat it like whiskey: respect it, label it, and don’t leave it in a hot car. Manifest Wizard helps with the labeling and the zip...the hot car part is still on you.

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

manifest_wizard_well_it_wasnt_me-1.0.0.tar.gz (13.1 kB view details)

Uploaded Source

Built Distribution

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

File details

Details for the file manifest_wizard_well_it_wasnt_me-1.0.0.tar.gz.

File metadata

File hashes

Hashes for manifest_wizard_well_it_wasnt_me-1.0.0.tar.gz
Algorithm Hash digest
SHA256 1c8f57a08effed63392efd5b085bc11b7c5fbf988bc85101275a41c684f70667
MD5 be4d8eaf1ac055ba1f4577e27b258901
BLAKE2b-256 5208f3b930df67fc04686a760bfa0977bdf1eda77a219384568b9b3e45163557

See more details on using hashes here.

File details

Details for the file manifest_wizard_well_it_wasnt_me-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for manifest_wizard_well_it_wasnt_me-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 31be5411cf0fca4c75d3a9ff536c79c31011d1d3f87650a960abf9cdee502b85
MD5 a2104f40935c686e07decc36e3a09f5f
BLAKE2b-256 95c18b04b64c2dbe8f3aa647013401178b8ba87c934b0a6277575608cf500d3d

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