binary-re:tool-setup

Ensure required reverse engineering tools are available and properly configured for cross-architecture analysis.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "binary-re:tool-setup" with this command: npx skills add 2389-research/claude-plugins/2389-research-claude-plugins-binary-re-tool-setup

Tool Setup

Purpose

Ensure required reverse engineering tools are available and properly configured for cross-architecture analysis.

When to Use

  • Before first analysis session

  • When tool commands fail

  • Setting up new analysis environment

  • Updating to newer tool versions

Required Tools

Tool Purpose Priority

radare2 Static analysis, disassembly Required

rabin2 Fast binary triage Required (part of r2)

qemu-user Cross-arch emulation Required

gdb-multiarch Cross-arch debugging Required

Ghidra Decompilation Recommended

GEF GDB enhancements Recommended

Frida Dynamic instrumentation Optional

Unicorn Snippet emulation Optional

Angr Symbolic execution Optional

Installation by Platform

Ubuntu/Debian

Core tools

sudo apt update sudo apt install -y
radare2
qemu-user
qemu-user-static
gdb-multiarch
binutils-multiarch
jq # Required for JSON parsing in skill commands

ARM sysroots (for QEMU)

sudo apt install -y
libc6-armhf-cross
libc6-arm64-cross
libc6-dev-armhf-cross
libc6-dev-arm64-cross

Additional utilities

sudo apt install -y
file
binutils
elfutils
patchelf

Windows (WSL2)

Windows users should use WSL2 with Ubuntu for full compatibility:

PowerShell (Administrator) - Install WSL2 with Ubuntu

wsl --install -d Ubuntu

Restart computer when prompted, then open Ubuntu terminal

Inside WSL2 Ubuntu:

Install all required tools

sudo apt update && sudo apt install -y
radare2
qemu-user
qemu-user-static
gdb-multiarch
binutils-multiarch
jq
file
patchelf

Fix file permissions for Windows-mounted drives

sudo tee -a /etc/wsl.conf > /dev/null << 'EOF' [automount] options = "metadata,umask=22,fmask=11" EOF

Restart WSL to apply changes

(In PowerShell: wsl --shutdown)

WSL2 Tips:

  • Copy binaries into ~ rather than using /mnt/c/... paths (fewer permission issues)

  • Use wsl --shutdown in PowerShell to restart WSL after config changes

  • Docker Desktop integrates with WSL2 for container-based analysis

macOS (Homebrew)

Core tools

brew install radare2 jq

NOTE: Homebrew QEMU may lack qemu-user targets

Verify: qemu-arm --version || echo "qemu-user missing"

If missing, use Docker for cross-arch execution (see below)

GDB requires special handling on macOS

brew install gdb

Note: Code signing required for debugging

ARM cross tools (optional, for static analysis only)

brew install arm-linux-gnueabihf-binutils

macOS Docker Setup for Dynamic Analysis

Since Homebrew doesn't provide qemu-user , use Docker for cross-architecture execution:

Install Docker runtime (Colima is lightweight alternative to Docker Desktop)

brew install colima docker

Start Colima

colima start

Register multi-architecture emulation handlers

docker run --rm --privileged --platform linux/arm64
tonistiigi/binfmt --install arm

Verify ARM32 emulation works

docker run --rm --platform linux/arm/v7 arm32v7/debian:bullseye-slim uname -m

Should output: armv7l

Verify ARM64 emulation works

docker run --rm --platform linux/arm64 arm64v8/debian:bullseye-slim uname -m

Should output: aarch64

Verify x86-32 emulation works

docker run --rm --platform linux/i386 i386/debian:bullseye-slim uname -m

Should output: i686

IMPORTANT: On Colima, always mount from ~/ not /tmp/ :

✅ Works

docker run -v ~/samples:/work ...

❌ May fail silently

docker run -v /tmp/samples:/work ...

Arch Linux

sudo pacman -S radare2 qemu-user gdb yay -S arm-linux-gnueabihf-glibc # From AUR

Tool-Specific Setup

radare2

Verify installation

r2 -v rabin2 -v

Install r2ghidra plugin (decompilation)

r2pm init r2pm update r2pm -ci r2ghidra # -ci = clean install

Verify r2ghidra is working (CRITICAL CHECK)

r2 -qc 'pdg?' - 2>/dev/null | grep -q Usage && echo "r2ghidra OK" || echo "r2ghidra MISSING"

Alternative verification

r2 -c 'Ld' /bin/ls | grep -i ghidra

Common r2ghidra issues:

Symptom Cause Fix

pdg unknown command Plugin not loaded r2pm -ci r2ghidra

Plugin loads but crashes Version mismatch Update both r2 and plugin

Decompilation hangs Large function Use pdf instead, or Ghidra headless

Configuration (~/.radare2rc):

Disable colors for scripting

e scr.color=false

Increase analysis limits

e anal.timeout=120 e anal.maxsize=67108864

JSON output by default for scripts

e cfg.json.num=true

Ghidra (Headless)

Download from https://ghidra-sre.org/

Extract to /opt/ghidra

Verify headless script

/opt/ghidra/support/analyzeHeadless --help

Add to PATH

echo 'export PATH=$PATH:/opt/ghidra/support' >> ~/.bashrc

Memory configuration (for large binaries): Edit /opt/ghidra/support/analyzeHeadless :

MAXMEM=4G # Increase from default

GEF (GDB Enhanced Features)

Install GEF

bash -c "$(curl -fsSL https://gef.blah.cat/sh)"

Verify

gdb -q -ex "gef help" -ex "quit"

For ARM Cortex-M support, also install gef-extras

git clone https://github.com/hugsy/gef-extras.git ~/.gef-extras echo 'source ~/.gef-extras/scripts/checksec.py' >> ~/.gdbinit

Frida

Install Frida tools

pip install frida-tools

Verify

frida --version

Install frida-server for device debugging (optional)

Download from https://github.com/frida/frida/releases

Unicorn (Python bindings)

pip install unicorn

Verify

python -c "from unicorn import *; print('OK')"

Angr

Create virtual environment (recommended)

python -m venv ~/angr-venv source ~/angr-venv/bin/activate

Install angr

pip install angr

Verify

python -c "import angr; print('OK')"

YARA

Ubuntu/Debian

sudo apt install yara

Or from source for latest

git clone https://github.com/VirusTotal/yara.git cd yara ./bootstrap.sh ./configure make && sudo make install

Python bindings

pip install yara-python

Sysroot Setup

Standard Debian/Ubuntu Sysroots

Already installed via libc6-*-cross packages:

Verify paths

ls /usr/arm-linux-gnueabihf/lib/ ls /usr/aarch64-linux-gnu/lib/

Custom Sysroot from Device

Pull from device via SSH

mkdir -p ~/sysroots/device ssh user@device "tar czf - /lib /usr/lib" | tar xzf - -C ~/sysroots/device

Or minimal extraction

ssh user@device "tar czf - /lib/ld-* /lib/libc.* /lib/libpthread.* /lib/libdl.*"
| tar xzf - -C ~/sysroots/device

Musl Sysroot

From Alpine Linux

docker run -it --rm -v ~/sysroots:/out alpine:latest sh -c
"apk add musl musl-dev && cp -a /lib /usr /out/alpine-musl"

Verification Script

Run this to verify all tools are working:

#!/bin/bash set -e

echo "=== Binary RE Tool Verification ==="

radare2

echo -n "radare2: " r2 -v | head -1

rabin2

echo -n "rabin2: " rabin2 -v | head -1

QEMU

echo -n "qemu-arm: " qemu-arm --version | head -1

echo -n "qemu-aarch64: " qemu-aarch64 --version | head -1

GDB

echo -n "gdb-multiarch: " gdb-multiarch --version | head -1

Ghidra (optional)

if command -v analyzeHeadless &> /dev/null; then echo -n "Ghidra: " analyzeHeadless 2>&1 | head -1 || echo "available" else echo "Ghidra: not installed (optional)" fi

Frida (optional)

if command -v frida &> /dev/null; then echo -n "Frida: " frida --version else echo "Frida: not installed (optional)" fi

Sysroots

echo "" echo "=== Sysroots ===" [ -d /usr/arm-linux-gnueabihf ] && echo "ARM hard-float: OK" || echo "ARM hard-float: MISSING" [ -d /usr/aarch64-linux-gnu ] && echo "ARM64: OK" || echo "ARM64: MISSING"

echo "" echo "=== Verification Complete ==="

Troubleshooting

Common Issues Quick Reference

Symptom Cause Fix

exec format error in Docker binfmt not registered docker run --privileged tonistiigi/binfmt --install arm

ld-linux.so.3 not found

Linker path mismatch ln -sf /lib/ld-linux-armhf.so.3 /lib/ld-linux.so.3

libXXX.so not found

Missing dependency apt install in container (check rabin2 -l )

r2 pdg unknown command r2ghidra not installed r2pm -ci r2ghidra

Empty xrefs from axtj

Shallow analysis Use aa; aac or manual af @addr

Empty Docker mount Colima /tmp issue Use ~/path instead of /tmp/path

strace fails in container ptrace not implemented Use LD_DEBUG=files,libs

r2 "Cannot open file"

Check permissions

ls -la binary

Try with explicit format

r2 -b 32 binary

QEMU "Invalid ELF image"

Verify architecture matches

file binary

Check QEMU variant

qemu-arm --help | grep -i "target"

Docker "exec format error"

Register binfmt handlers (one-time setup)

docker run --rm --privileged --platform linux/arm64
tonistiigi/binfmt --install arm

Verify registration

cat /proc/sys/fs/binfmt_misc/qemu-arm

GDB "Cannot execute binary"

Use QEMU as gdbserver

qemu-arm -g 1234 ./binary & gdb-multiarch -ex "target remote :1234" ./binary

Ghidra "Out of memory"

Increase heap in analyzeHeadless script

Or pass explicitly:

analyzeHeadless ... -max-cpu 4 -analysisTimeoutPerFile 600

Missing ARM libraries in QEMU

Set LD_LIBRARY_PATH in QEMU environment

qemu-arm -E LD_LIBRARY_PATH=/lib:/usr/lib -L /sysroot ./binary

Or use patchelf to modify binary's rpath

patchelf --set-rpath /lib:/usr/lib ./binary

Docker container can't find libraries

Inside container, install common dependencies

apt-get update && apt-get install -y libcap2 libacl1

Check what the binary needs

(Run rabin2 -l on host before entering container)

Version Recommendations

Tool Minimum Recommended

radare2 5.8.0 Latest

QEMU 7.0 8.0+

GDB 12.0 14.0+

Ghidra 10.3 11.0+

Frida 16.0 Latest

Environment Variables

Add to ~/.bashrc or ~/.zshrc :

Ghidra

export GHIDRA_HOME=/opt/ghidra export PATH=$PATH:$GHIDRA_HOME/support

Default sysroot for QEMU

export QEMU_LD_PREFIX=/usr/arm-linux-gnueabihf

Angr virtual environment

alias angr-activate='source ~/angr-venv/bin/activate'

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Research

binary-re:static-analysis

No summary provided by upstream source.

Repository SourceNeeds Review
Research

binary-re:triage

No summary provided by upstream source.

Repository SourceNeeds Review
Research

omakase-off

No summary provided by upstream source.

Repository SourceNeeds Review