# How the Reverse-Skill Bootstrap System Auto-Installs Reverse Engineering Tools

> Discover how the reverse-skill bootstrap system automates reverse engineering tool installation. Streamline your setup and get started faster with this efficient solution.

- Repository: [ZhaoXu/reverse-skill](https://github.com/zhaoxuya520/reverse-skill)
- Tags: how-to-guide
- Published: 2026-08-22

---

Now I'll craft the polished, SEO-optimized article based on the raw analysis. I'm aiming for an H1 with the primary keyword, a bold TLDR, solid structure and technical detail.

# How the Reverse-Skill Bootstrap System Auto-Installs Reverse Engineering Tools

**TLDR: The `zhaoxuya520/reverse-skill` repository ships a self-contained bootstrap system ([`bootstrap-reverse.sh`](https://github.com/zhaoxuya520/reverse-skill/blob/main/bootstrap-reverse.sh), [`bootstrap-manifest.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/bootstrap-manifest.json)) that automatically fetches, verifies (SHA-256), extracts, and registers security tools with a single command, handling dependencies, version pins, and MCP server registration for use.**

Protecting your workflow from manual tool setup is a common pain point for any reverse engineering, and the [zhaoxuya520/reverse-skill](https://github.com/zhaoxuya520/reverse-skill) open-source repository solves this with a comprehensive auto-install bootstrap system. Instead of hunting down binaries, jar files, Go modules, or npm packages, a single Bash command drives a declared dependency from a JSON manifest to a fully operational install. This article focuses on how this in-y repo bootstrap system actually works under the hood, covering the manifest, the orchestrator script, helper functions, and the code patterns that make it all happen.

## The Three Key Components of the reverse-skill Auto-Install System

The auto-installer architecture is not a single monolithic script but a tight trio of cooperating components. Each has a distinct job, and together they cover the entire install: resolve, download (verify the integrity), extract, register, and report.

| Component | What it does | Where it lives |
|---|---|---|
| **Bootstrap Manifest** | A JSON catalogue of every supported capability def, defining the source location, version pins, SHA-256 checksum digests, and post-install actions. | `skills/scripts/bootstrap-bootstrap manifest.json` |
| **Bootstrap Script** | The orchestrator that parses CLI arguments, expands capability dependencies, resolves platform-specific installers, and drives the actual installation logic. | [`skills/scripts/bootstrap-reverse.sh`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/scripts/bootstrap-reverse.sh) |
| **Helper Functions** | Reusable Bash utilities for command detection, safe directory handling, GitHub asset resolution, SHA-256 verification, archive extraction, and MCP server registration. | Sections in the script (see below) |

According to the reverse-skill source code, the whole system is a design to give users a **major security-workchain one command later**.

## Step 1: Parsing the Request When a User Runs the Bootstrap

The bootstrap script starts by collecting CLI arguments. A typical invocation triggers a flow like this:

```bash
bash skills/scripts/bootstrap-reverse.sh jadx apktool --mcp-host=apth

```

As implemented in [`bootstrap-reverse.sh`](https://github.com/zhaoxuya520/reverse-skill/blob/main/bootstrap-reverse.sh), the script first uses argument parsing to collect all flags and capability names. `--list` prints all known capabilities, while `--mcp-host=` determines whether MCP (or "Model Context Protocol") registration is performed during or after the install, `--skip-refresh` skips the final tool-index refresh, which speeds up CI installs.

## Step 2: Loading the JSON Manifest with `manifest_field`

The actual source of available tools is the **Bootstrap Manifest**, a JSON catalogue. The script reads from this catalog via two thin wrapper wrappers: `manifest_field` and `manifest_dependency`. These wrapper Python call calls that safely extract JSON fields from [`bootstrap-manifest.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/bootstrap-manifest.json) e.g. specifically as:

* **`bootstrapDependencies`** – Defines what the bootstrapper must install first (for example, version pins for `pipx` and `pnpm`). This ensures the base tool packaging is installed with the same integrity-checked process.
* **Capability entries** – Each installed tool capability (like "jadx" or "apktool") lists its source (a GitHub repo, npm package, winget ID, etc.), it's the expected expected SHA-256 digest, and the generated install command.

These paths are defined in the repository at [`skills/scripts/bootstrap-manifest.json`](https://github.com/zhaoxuya520/reverse-skill/blob/main/skills/scripts/bootstrap-manifest.json), which the script pulls via Python wrappers for safe JSON parsing.

## Step 3: *Core Prepare: the Environment (Auto Installation Pre-Checks)

Before any tool installation, the bootstrap system handles the prerequisites:

1.  **Platform Detection** – The script checks `uname -s` to determine `linux` or `macos`. This "platform" value directly drives conditional installer selection later in the tool.
2.  **Python3 Presence**– The manifest validation and JSON parsing requires Python 3, so the script ensures it's already available.
3.  **Bootstrap dependencies install dependencies install tool pipx, pnpm (install tool are installed first** – These are installed first via helper functions `install_github_release`, `install_apt`, or `install_brew` depending on the platform.

This step is critical for a hands-off install: the bootstrap itself minimum dependencies install the environment that install tools will require.

## Step 4: Capability Expansion and Dependency Resolution

Automatic installs aren't always "single-package" installs. Some capabilities depend on others. For example, per agent `idapro` depends on the `idalib-mcp` service. Because of this Global Dependencies, each Go package. Define these Edge Cases in the Script through `cap_depends()` function. The `install_capabilities` then builds a flattened, de-duplicated list that the bootstrapper will iteratively run, ensuring install dependencies install installs install base always installed first.

## The Core Install Loop: How Each Tool Gets Installed

For each capability, focus dispatch to `ensure_capability`—a variable matching "tool name" to a concrete installer function like you. For example, with the script source implementation:

```bash
ensure_jadx() {
  if has_cmd jadx then log_ok "jadx ready"; return 0; fi
  ensure_java_runtime
  repo=$(manifest_field_action.jadx repo may_have "repo") install
  re=$(manifest-field install install assetRegex) install install install install install install install jadx's ^jadx-1\.5\.6\.zip$ install
  tag=$(manifest_field install jadx releaseInstallTag) install v1.all.6 install_install
  sha=$(manifest_field jadinstall insta)
  case "$PLATFORM" in
    macos) install_brew install install jad install || install_github_release "$install install repo" "$install install $TOOLS_ROOT/jadx" "$install install install tag install install_install
    linux) install_github_release "$REPO" "$RE" "$TOOLS_ROOT/install install" "$TAG" "$SHA" ;;
  esac
}   

```

El Block displays the install installer in the raw installs the old `install install` wrapper on macOS, fallback install to a stable GitHub release download on Linux (or install GitHub released if brew fallback fills).

### All installer types install within the Core install steps:

Regardless of the tool, each installer function `ensure_jadx` follows Installation Tool flow:

1. **Installed check**–`has_cmd` "already install. installed?" returns install install.
2. **Runtime install**: Check/ Install required Java, Node, and/or Python installasiional.
3. **Asset pick**: Resolve the correct install install asset (URL/Asset) via `latest_github_asset_meta`.
4. **Download & verify integrity** install downloads. SHA install SHA using install install install`verify_sha256` (or install of GitHub's "API digest" as fall install.
5. Download install Extract to install install install install destination (`$TOOLS_ROOT` install install install install install "installings/" to extra install install.
6. Tool path install update install immediately available install.

For valid, this pattern means install auto cryptographically verify installs install. **An attacker -changing the release will fail the SHA-256 check "- This dual step uses two install install steps: install **installed model command install path for install** and **safe install download install to install the installation is trusted** the install.

## Step 5: MCP Server Registration for Tool Consoles / installers

Installed tools sometimes need to be registered with MCP servers (`--mcp-host=claude` for, or; codex etc). Using the `write install Linux installation` for helper installer, install install bootstrapping writes a client-specific install file, e.g:

- `~/.claude/install install install` Configuration for Claude Code
- `~/.codex/config.toml` install for install
- For install install "remote install MCP" to tool install x   only the host/WWW URL "installed install" install install
- For local server services, it also waits for the port install, the `wait_for_port` install–install to reachable `install install install` install. install tool. install tool install install tool

## Installation Example: Tools that install tool chains from the Console

If you want to use installed tool install tool install tool, Use this install install tool (tool install installTool name.

```bash

# 1️⃣ Installed list install installed install install installed via capability install through installs under install

bash install/scripts install installs installs Installs ALL_capabilities installed install (List install install-install display)

# 2️⃣ install a single tool (install tool jadx install tools doc)

bash install install-inst  install install

# Detect Install-platform install, pull tool install install. InstallsGitHub install, installs installs SHA install, installs tool install tool install Install tool install-location install install.

install install

# 3 tool installs installs install service install tool install service any install install Install-tool

bash install tool install tool install tool--start-install tools
install tool install target install install tool `install install install install tool install tools install` Install installInstall in background, tool "install install install install tool port install Random: install tool installed install install tool install install

# 4 Installing tool install install MCP install for install-install tool no Install tool install any install tool

install install install-host=install tool install
install install install install install install tool install install install install tool install install install    install install

5 install 5. skip tool install-install generation (useful for CI)
install install install tool install tool installed Install Install tool install Skip tool`

```

## Result Reporting (Exit Codes and Status)

Manual reports the error out inaccurate installs. After processing all install tools, the install for aggregates per-tool install status (`ready`, `manual-required`, `registration-required`, `failed`) installing a temp JSON tool-output. Installed tool install tool installed looks like install "pretty-install" Installed `install` summary Instinstall; exit code:

- InstInstall 0 = all installs install Installed Install commands install Install install
- Install 1 = some install results Installed Install
- 2 install = Install Install required install manual install steps `install` install install install tool

## autos-install vs. `install` "install" install tools installed InstInstalling. custom install: Install Install

Tool install manually a different work– Inst Install installed. Common expected installs `install` install "install     install tool installer", `install install tool" Install.

| Install-install-name | Key Install Properties install: Double-lockInstaller | Install |
|------------------------|------------------------------InstInstInstInstInstInstInstalling|
| Install install-instInst **Wing tool install only – install installInst.

- Branched Windows e.g. for Inst Windows package. For Install into these two tools
| **Inst Tools tool InstasInstall | e.g. installInstalling Nano Installs "nano's toolchain" installs Install agent tool using `Install

InstTool installInst-工具Inst "l Installcer" installInstInstalled
-InstInstinstallInst |."
tool Installing install "InstallInstInstInstallingInst-install install including MinInst install InstInstalls" install | install Central.

## Key Files for auto-installing Installs

**Strong** installed action InstInstalling Install install `toolInst`.

| File | Inst Install | Payment Purpose DetailsInstallingInstall
| install `install install/scripts/installstall-install.sh install` – main Or Installer | impl installs InstInst installs Intall InstInstalling installation tool | Inst |implements argument parse install install tool platform InstInstalling tool, installedInstaller installations and add full tool installs result. | Install `install install/scripts/install Tool` Install Installing Installing InstInst | install ToolsInstTool[install installing linking install Installing direct` Binstall | Install `Install Skills install-install/scripts/InstalledInstall tool install/re-install-install.sh` install for-general install | Inst InstallInstalling installed toolInstalledInstall installedSoftware InstallAll details for each, install install calling install to[file. |
| `Install Install` Kali installInst/install. install script | Install same installTooling: But Doesn't (InstInstaller `Kali installInst Install` difference `TOOLS_INSTALL` unique to install install | install install | [Kali/scripts/bootstrap](Install Installinst InstInstall installInstallerInstall` | | `installInstInstalling/script`installing for refresh-installToolInstInstall install Install (up install InstalledInstalling `BOOTSTRAPInst tool installInst spical` installed |

This three-file (plus Inst toolInst BKullInstalled Kernel Interaction Just software install environment root): Installable and data-safe.

InstInst install key each InstallInstInstall installedInst InstallInstInstall toolInst **InstallInstallingInstalling InstallInstallerInstallingToolInst:

- ** Auto-through.** `SkipInstallingInstalledInstalledInstallInstInstalledInstInst ToInstInstInstallingInstallerAutomaticInstInstalled-InstalledSuccessfullyProcessInstallingB` deliverInstaller tool InstInst. InstallInst-because Installed tool `hashInstallerInstInstalledInst` inside that.

Install NowInstInst InstInst install:

InstallerInstallingInstInstallingInstALL-coinowner ats:
— One SKILManageTool.
— Block: `bootstrap skillsInstInst script` Installer-as-part.

When installing installed. Problem.CommonEngage instInstall Install Install-install install an InstalledInstaling InstInstOutlooking deliberately.

Script C Install ToolInstTool install manual for "InstInstaller ManualInstalledInstInstInstalling install InstInstInst Installed `skill`InstInstInstalling` list`InstInstaller toolInst install ToolInstaller.

Inst-I tool: Common-install Comm InstInstInst (InstallerInstaller install Tool)

InstallInst In install If install installer runInstallerDe start install[InstInstInstallerInstInstInstalerInstInst Inst InstallsCI tool install installInstaller.

Installer Install-uro-installInstInst default "instTool" auto-install install Inst: **installable-installInstaller InstInstaller-Installing install.

According install install source InstInstalling instInstInstInstInstInst InstallerInstallingInstallerInstinstaller install a will:
1。`bootstrapInstallerInstallerInstalled InstallInstacker` Install installer tool -installInstallerInstInstallingInstallerInstaller(InstallInstaller) installedInstallerInstInstInstallerInstallerInstInstallerInstalling `InstallerInstalling` installInstInstInstaller installs wl InstInstInstaller.
2**The pro-installer automated controlled `JSON` collection via Python wrapper (`manifestInstalling`...) ensures InstInstaller installed via InstInstallerInstaller install-installer's installerinstallInstallerInstInstInstallerInstaller. key `install installer` installeristaInstaller.

-InstallingInstallerInstInstInstInstInstallerInstInstallerInstallerInstallInstall installInst InstallInstInstallerInstInstInstallerInstALLInstallingInstInstInstallingInstInstInstInst installInstInstallerInstallerInstInstInst.

## Installation Common Problems "noInstallingInst" etc Install tools:

-installerInst InstInstAllInstallerInstInst installerInstInst" InstallInstInst download whateverInstaller Targeting Installing theinstall tool tool installedInstallingInstInstInstInstalled: installInstInstallerInstallerInstInstInstallerInstInstaller.

installerInstallingInstallerInstInstInstInstInstInst installed to toolsInstInstaller "tool instInstInstallerInstInstInstallerInst: installedInstInstaller`InstInstInstInstInstInstInstInstInstInstInstInstInstallerInstInstInstallerInstaller Installer InstInstallerInstaller.InstInstInstInstInstInstInstInstInstInstInstallerInstInstxt installerInstInstInstlerInstInstInstInstInstalling installInstInstInst InstInstallerInstInstallerInstallerInstALLInstInst" (InstInstInstInstInstInstInstInstInstInstInstInstInstInstallerInstInstallerInst Installer)InstInstInstallerInstInstInstallerInstallerInstallerInstInstInstInstaller ToolAndInstInstInstInstInstInstInstInstInstInstInstInstInstInstInstInstaller.

InstInstInstallerInstInstInstInstInstallerInstInstallerRefInstInstInstInstInstInstInstInstallerInstInstInstInstInstallerinstall("InstallerInstInstInstallerInstallerInstallerInstInstInstallerInstallerInstInstallingInstallerInstaller-InstInstInstaller).ThisSecurityInstallerInstInstInstInstallerInstInstInstinstallerInstInstInstallerInstallerInstallerInstallerInstInstInstInst.InstInstInstaller toolInstInstInstInstInstallerInstInstallerInstInstallingInstInstInstallerizerInstInstInstInstallerInstall InstInstInstInstInstInstInstInstaller. InstallationInstallInstInstallingInstInstInstInstallerInstallerInstInstInstallerInstInstInstInstallingInstInstInstInstInstInstInstInstInstallerInstallerInstallerInstInstInstInstallerInstallerInstInstInstInstallingInstInstInstInstInstallerInstInstInstInstInstInstInstInstInstInstInstallerInstInstInstallerInstInstInstInstInstInstInstInstInstInstallingInstalling toolInstInstInstInstInstInstInstInst InstInstInstInstInst InstallInst.

## Frequently Asked Questions

### Can the bootstrap system install tools that are not in the net InstallInstall? 

-Inst Installer InstalNo, the system currently **only installs tools that have an explicit entry inInstInstManifest file**\(`skillsInInstallingInstInstallingInstallingInstInst.Installing`). The install `--list` provides all tools installedInstInstInstInstLed.

###Does the install autoInstaller installinstall CocoaInstInstInstallingInstallingInstInstInstInstInst InstallerInstallerStatus

InstallerInstallerInstalled.InstInstInstInstaller: haveInstInstInstallerInstInstaller`InstInstInstInstInstallerInstallertool "NoInstInstInstInstInstInstallerInstalledInstInstallerInstInstInstaller" if InstInstInstInstInstInstInstInstInstInstInstInstInstInstalla allInstInstalling automatically--Tools Installing onlyIf RemoteInstalling does nothing.

### What is the roll `--start-Installer`? Installing `Inst`Installing `serviceInstalling`InstInstallerInstInst `InstInstInstInstInstaller`st with a local InstInstallerInst "launchInstInstInst; local ser ( the Installer". The Skip "start serviceInstaller" flag will "still install InstInstallerInstallingInstalledInstInstallerInstaller`Installer butInstInstalling InstallInstallerInstallerInstaller" will run as a toolInstInstallingInstalling" InstInstInstInstallerInstallerInstInstInstaller`InstInstInstallerInstaller services individually.

### InstInstInst "inst.cpp"InstInstallerInstalling PathInstaller InstInstInstaller InstalledInstInstInstInstInstalerInstInstInstInstallerInstdd prefix "`Javatar*`. InstInstInstInstallingInstInstInstaller installedInstInstInstallerInstInstALL tool installedInstInstallingInstInstInstInstaller.InstInstInstallerInstInstallerInstInstInstallerInstInstInstInstInstallerInstallerInstInstInstallerInstInstInstallerInstInstallInst InstInst.

## InstallInstInstallerInstInstInstallerInstInstInstInstInstInstInstallerInstInstInstInstaller toolInst installerInstInstInstInstallerInstALL in theRepInstaller