LinusandClaude Opus 5.5 c198c36ea4 Add unsquashfs and stop SquashFS tools failing on xattrs
Install Ubuntu's squashfs-tools so the stock unsquashfs/mksquashfs exist
next to sasquatch. As the non-root container user, unsquashfs and
sasquatch can't restore security.* xattrs and exit 2 although every file
was extracted; wrap them to pass -no-xattrs unless an xattr option is
given.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 19:51:45 +01:00

claude_re_setup

A Docker-based reverse-engineering workstation for Linux. Claude Desktop is connected over MCP to Ghidra and to REA ("Reverse Engineer Anything"), and binwalk, unblob and esptool are installed alongside them. Nothing beyond Docker and an X server (or XWayland) is needed on the host.

Usage

./install.sh        # build the image and add "Claude RE Workstation" to the app menu
./install.sh --uninstall              # remove that launcher again
./run.sh            # build the image if needed, pick a folder to share, start
./run.sh --build    # rebuild the image first
./run.sh --workspace ~/re/target-x    # share this folder without asking
docker stop claude-desktop            # stop everything

On every start a window asks for the model provider:

  • Base URL empty: Anthropic's models; sign in to claude.ai as usual.
  • Base URL set: Claude Desktop runs in its third-party "gateway" mode, with no claude.ai account: Chat, Code and Cowork send their requests to that URL with the token. The server must speak the Anthropic Messages API (/v1/messages), e.g. a self-hosted model behind LiteLLM. Models are optional (comma-separated, first = default); without them Claude Desktop asks the server's /v1/models. A server on this machine is reachable as http://host.docker.internal:PORT (localhost is rewritten to that) and must listen on an address Docker can reach. With http:// the token is sent unencrypted.

The shared folder is mounted at /workspace in both containers. Neither the sign-in nor the token is kept between starts. Closing Claude Desktop or Ghidra's project window stops everything.

The launcher runs run.sh from this checkout, so re-run ./install.sh after moving it. Started from the menu, errors appear in a dialog.

What runs where

Container Contents Network
claude-desktop Claude Desktop, Ghidra GUI + GhidraMCP, binwalk, unblob, esptool default + internal
claude-re-mcp REA MCP server (headless Ghidra, binwalk, unblob), no display internal only, no internet

Both containers run from the same image. REA gets its own container because some of its tools run the target. Claude Desktop reaches it at http://rea:8765/mcp through mcp-remote.

MCP servers in Claude Desktop (claude-desktop/claude_desktop_config.json):

  • ghidra: needs a program open in Ghidra's CodeBrowser.
  • rea: opens files from /workspace by itself, with its own headless Ghidra project.

Sources

Versions and checksums are pinned in the Dockerfile. CLAUDE.md has the details.

S
Description
No description provided
Readme
219 KiB
Languages
Dockerfile 49.3%
Shell 48.8%
Python 1.9%