Clone it, source it, hack. The python env, native binaries, and tool config are kept inside the repo instead of scattered across your machine, so your setup is reproducible and easy to wipe by deleting the folder.
git clone <your-remote> hackbox && cd hackbox
source activate # first run sets everything up; later runs are instant
nuclei -version # tools are just on PATH
deactivate # leavehackbox runs on your operator machine (your laptop, a jump box, a cloud VM), not on a target. It is a portable toolbox, not an anti-forensics or "leave no trace on the victim" tool.
"Self-contained" means best-effort containment of your own setup, so tools
don't pollute your $HOME and your kit stays reproducible — not a guarantee
of zero footprint:
activateredirects the config/creds of the tools it knows about (aws, gcloud, gau, powershell, uv) into the repo. Other tools, and anything you install into the venv, may still write to$HOME,$TMPDIR, system keychains, or leave logs/caches elsewhere on the operator host.- Running a tool still produces normal artifacts on the target (auth logs, web/WAF logs, process history, files you drop, etc.). Containing your config does nothing about that. OPSEC on an engagement is a separate discipline.
- Only use these tools against systems you are authorized to test.
source activate does the whole setup and is idempotent:
- fetches uv (a single static binary) into
.tools/bin/ - runs
uv sync→ builds.venv/with the python tools frompyproject.toml(uv even downloads its own Python — no systempython3needed) - downloads the native binaries (nuclei, httpx, gcloud, …) into
.tools/ - puts
.tools/binand.venv/binonPATH
First run downloads; a marker (.tools/.synced) makes every later source activate instant. source activate again after editing pyproject.toml just
reconciles python deps.
uv sync manages Python packages only. Tools like nuclei/httpx/gau (Go),
jadx (Java), gcloud/aws/pwsh/nmap/radare2/ipsw are compiled native binaries —
not pip-installable, and not committable to git portably (a mac-arm64 binary
won't run on linux-x64). So they're fetched per machine into .tools/ (git-
ignored). That fetch is folded into activate, so you still only run one command.
hackbox/
├── activate # source this (bash/zsh) ← the entry point
├── activate.ps1 # dot-source this (native Windows)
├── pyproject.toml # python tools (uv sync) + uv.lock (commit it)
├── versions.env # pinned native-tool versions
├── bootstrap.sh # `hackbox` CLI: explicit fetch/update (optional)
├── lib/ # common.sh · recipes.sh · engine.sh
├── vendor/ # tools YOU supply: jeb, CRTE kit, PowerShell modules
├── .venv/ (ignored) # uv-managed python env
├── .tools/ (ignored) # native binaries + uv's python/cache
└── state/ (ignored) # tool config + credentials, contained in-repo
Inside an active shell the hackbox command wraps the fetcher:
hackbox --list # everything available on this platform
hackbox nuclei httpx # (re)fetch specific native tools
hackbox android # a group: android/ios, extra, manual
hackbox --force gau # re-fetch
hackbox --python --group ad # uv sync with an optional python bundle| Area | Auto-installed | Notes |
|---|---|---|
| Web / cloud | nuclei, httpx, gau, sqlmap, mitmproxy, gcloud, aws-cli | nmap: no clean static build everywhere — manual/system |
| Android / iOS | jadx (+repo-local JRE), ipsw, radare2 | radare2 builds from source (needs cc/make) |
| Windows / AD | pwsh (PowerShell 7) | AD modules + your CRTE kit → vendor/psmodules/ (see vendor/README.md) |
| Python | impacket + opt-in groups | pyproject.toml; `hackbox --python --group <ad |
| Licensed | — | jeb → drop into vendor/jeb/ |
| Apple-only | — | otool/plutil are macOS system tools; on Linux use ipsw/radare2 |
activate points aws, gcloud, and friends at state/ (AWS_CONFIG_FILE,
CLOUDSDK_CONFIG, …) instead of $HOME, so engagement creds travel with the
clone and never leak into the host's global config. state/ is git-ignored —
do not commit it if it holds secrets.
- Python: add it to
pyproject.toml, runhackbox --python(or re-source activate). - Native: copy a
recipe_<name>inlib/recipes.sh, add it to aHB_GROUP_*, pin a version inversions.env. A recipe downloads/extracts into.tools/pkg/<tool>/and callshb_link <binary> <name>.
Native Windows can't source bash — dot-source activate.ps1 (handles uv sync +
PowerShell/AD modules + cloud config). For the auto-downloaded native binary set,
easiest is WSL + ./activate.