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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file manifest_wizard_well_it_wasnt_me-1.0.0.tar.gz.
File metadata
- Download URL: manifest_wizard_well_it_wasnt_me-1.0.0.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c8f57a08effed63392efd5b085bc11b7c5fbf988bc85101275a41c684f70667
|
|
| MD5 |
be4d8eaf1ac055ba1f4577e27b258901
|
|
| BLAKE2b-256 |
5208f3b930df67fc04686a760bfa0977bdf1eda77a219384568b9b3e45163557
|
File details
Details for the file manifest_wizard_well_it_wasnt_me-1.0.0-py3-none-any.whl.
File metadata
- Download URL: manifest_wizard_well_it_wasnt_me-1.0.0-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31be5411cf0fca4c75d3a9ff536c79c31011d1d3f87650a960abf9cdee502b85
|
|
| MD5 |
a2104f40935c686e07decc36e3a09f5f
|
|
| BLAKE2b-256 |
95c18b04b64c2dbe8f3aa647013401178b8ba87c934b0a6277575608cf500d3d
|