
Binary Re
- 1 installs
- 404 repo stars
- Updated August 5, 2026
- aiskillstore/marketplace
binary-re is a Claude Code skill that reverse engineers binaries, executables and bytecode using a hypothesis-driven methodology and tools like radare2, Ghidra, QEMU and GDB.
About
binary-re is a reverse engineering skill for understanding what binaries, executables and bytecode do. It provides a hypothesis-driven methodology and routes to sub-skills for triage, static analysis, dynamic analysis, synthesis and tool setup, using tools like radare2, Ghidra, GDB, QEMU and Frida. Analysts use it to disassemble, decompile and document unknown binaries.
- End-to-end methodology for reverse engineering binaries and bytecode
- Routes to triage, static, dynamic, synthesis and tool-setup sub-skills
- Uses radare2, Ghidra, GDB, QEMU and Frida with binutils fallbacks
Binary Re by the numbers
- 1 all-time installs (skills.sh)
- Ranked #1,834 of 2,203 Security skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
binary-re capabilities & compatibility
- Capabilities
- reverse engineering · binary analysis · disassembly · decompilation
- Use cases
- security audit · debugging
- Platforms
- Linux · macOS · Windows · WSL
What binary-re says it does
This skill should be used when analyzing binaries, executables, or bytecode to understand what they do or how they work.
Comprehensive guide for binary reverse engineering. This skill provides the overall methodology, philosophy, and reference material.
npx skills add https://github.com/aiskillstore/marketplace --skill binary-reAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 404 |
| Last updated | August 5, 2026 |
| Repository | aiskillstore/marketplace ↗ |
What it does
Reverse engineer a binary or bytecode using a triage-to-synthesis methodology with radare2, Ghidra, QEMU and GDB.
Who is it for?
Reverse engineering unknown binaries or bytecode to understand how they work.
Skip if: Source-level code review or tasks with readable source available.
When should I use this skill?
A user needs to reverse engineer, disassemble, or decompile a binary, ELF, or python bytecode.
What you get
A documented understanding of the binary's behavior via triage, static and dynamic analysis.
- triage fingerprint
- static and dynamic analysis findings
- synthesis report
By the numbers
- 5 sub-skills (triage, static, dynamic, synthesis, tool-setup)
- 8-step agentic analysis loop
- supports Linux, macOS and Windows/WSL for dynamic analysis
Files
Dynamic Analysis (Phase 4)
Purpose
Observe actual runtime behavior. Verify hypotheses from static analysis. Capture data that's only visible during execution.
Human-in-the-Loop Requirement
CRITICAL: All execution requires human approval.
Before running ANY binary: 1. Confirm sandbox configuration is acceptable 2. Verify network isolation if required 3. Document what execution will attempt 4. Get explicit approval
Platform Support Matrix
| Host Platform | Target Arch | Method | Complexity |
|---|---|---|---|
| Linux x86_64 | ARM32/64, MIPS | Native qemu-user | Low |
| Linux x86_64 | x86-32 | Native or linux32 | Low |
| macOS (any) | ARM32/64 | Docker + binfmt | Medium |
| macOS (any) | x86-32 | Docker --platform linux/i386 | Medium |
| Windows | Any | WSL2 → Linux method | Medium |
macOS Docker Setup (One-Time)
# Start Docker runtime (Colima, Docker Desktop, etc.)
colima start
# Register ARM emulation handlers (requires privileged mode)
docker run --rm --privileged --platform linux/arm64 \
tonistiigi/binfmt --install armDocker Mount Best Practices
CRITICAL: On Colima, /tmp mounts often fail silently. Always use home directory paths:
# ✅ GOOD - use home directory
docker run -v ~/code/samples:/work:ro ...
# ❌ BAD - /tmp mounts can fail on Colima
docker run -v /tmp/samples:/work:ro ...---
Analysis Options
| Method | Isolation | Granularity | Best For |
|---|---|---|---|
| QEMU -strace | High | Syscall level | Initial behavior mapping |
| QEMU + GDB | High | Instruction level | Detailed debugging |
| Docker | High | Process level | Cross-arch on macOS |
| Frida | Medium | Function level | Hooking without recompilation |
| On-device | Low | Full system | When emulation fails |
Option A: QEMU User-Mode with Syscall Trace
Safest approach - runs in isolation with syscall logging.
Setup
# Verify sysroot exists
ls /usr/arm-linux-gnueabihf/lib/libc.so*
# ARM 32-bit execution
qemu-arm -L /usr/arm-linux-gnueabihf -strace -- ./binary
# ARM 64-bit execution
qemu-aarch64 -L /usr/aarch64-linux-gnu -strace -- ./binarySysroot Selection
| Binary ABI | Sysroot Path | QEMU Flag |
|---|---|---|
| ARM glibc hard-float | /usr/arm-linux-gnueabihf | -L |
| ARM glibc soft-float | /usr/arm-linux-gnueabi | -L |
| ARM64 glibc | /usr/aarch64-linux-gnu | -L |
| ARM musl | Custom extraction needed | -L |
Environment Control
# Set environment variables
qemu-arm -L /sysroot \
-E HOME=/tmp \
-E USER=nobody \
-E LD_DEBUG=bindings \
-- ./binary
# Unset dangerous variables
qemu-arm -L /sysroot \
-U LD_PRELOAD \
-- ./binarySyscall Analysis
Strace output patterns to watch:
# Network activity
openat.*socket
connect(.*AF_INET
sendto\|send\|write.*socket
recvfrom\|recv\|read.*socket
# File access
openat.*O_RDONLY.*"/etc
openat.*O_WRONLY
stat\|lstat.*"/
# Process operations
execve
fork\|cloneOption B: QEMU + GDB for Deep Debugging
Attach debugger for instruction-level control.
Launch Binary Under GDB
# Start QEMU with GDB server
qemu-arm -g 1234 -L /usr/arm-linux-gnueabihf ./binary &
# Connect with gdb-multiarch
gdb-multiarch -q \
-ex "set architecture arm" \
-ex "target remote :1234" \
-ex "source ~/.gdbinit-gef.py" \
./binaryGDB Commands for RE
# Breakpoints
break *0x8400 # Address
break main # Symbol
break *0x8400 if $r0 == 5 # Conditional
# Execution control
continue # Run until break
stepi # Single instruction
nexti # Step over calls
finish # Run until return
# Inspection
info registers # All registers
x/20i $pc # Disassemble from PC
x/10wx $sp # Stack contents
x/s 0x12345 # String at address
# Memory
find 0x8000, 0x10000, "pattern" # Search memory
dump memory /tmp/mem.bin 0x8000 0x9000 # Extract regionGEF Enhancements
With GEF loaded, additional commands:
gef> vmmap # Memory layout
gef> checksec # Security features
gef> context # Full state display
gef> hexdump qword $sp 10 # Better hex dump
gef> pcustom # Structure definitionsBatch Debugging Script
# Create GDB script
cat > analyze.gdb << 'EOF'
set architecture arm
target remote :1234
break main
continue
info registers
x/20i $pc
continue
quit
EOF
# Run batch
gdb-multiarch -batch -x analyze.gdb ./binaryOption C: Frida for Function Hooking
Intercept function calls without modifying binary.
⚠️ Architecture Constraint: Frida requires native-arch execution. It cannot attach to QEMU-user targets.
| Scenario | Works? | Alternative |
|---|---|---|
| Native binary (x86_64 on x86_64) | ✅ | - |
| Cross-arch under QEMU-user | ❌ | Use on-device frida-server |
| Docker native-arch container | ✅ | - |
| Docker cross-arch (emulated) | ❌ | Use on-device frida-server |
For cross-arch Frida, deploy frida-server to the target device:
# On target device:
./frida-server &
# On host:
frida -H device:27042 -f ./binary -l hook.js --no-pauseBasic Hook
// hook_connect.js
Interceptor.attach(Module.findExportByName(null, "connect"), {
onEnter: function(args) {
console.log("[connect] Called");
var sockaddr = args[1];
var family = sockaddr.readU16();
if (family == 2) { // AF_INET
var port = sockaddr.add(2).readU16();
var ip = sockaddr.add(4).readByteArray(4);
console.log(" Port: " + ((port >> 8) | ((port & 0xff) << 8)));
console.log(" IP: " + new Uint8Array(ip).join("."));
}
},
onLeave: function(retval) {
console.log(" Return: " + retval);
}
});# Run with Frida
frida -f ./binary -l hook_connect.js --no-pauseTracing All Calls to Library
// trace_libcurl.js
var libcurl = Process.findModuleByName("libcurl.so.4");
if (libcurl) {
libcurl.enumerateExports().forEach(function(exp) {
if (exp.type === "function") {
Interceptor.attach(exp.address, {
onEnter: function(args) {
console.log("[" + exp.name + "] called");
}
});
}
});
}Memory Inspection
// dump_memory.js
var base = Module.findBaseAddress("binary");
console.log("Base: " + base);
// Dump region
var data = base.add(0x1000).readByteArray(256);
console.log(hexdump(data, { offset: 0, length: 256 }));Option D: Docker-Based Cross-Architecture (macOS)
Use Docker for cross-arch execution when native QEMU unavailable.
ARM32 Binary on macOS
docker run --rm --platform linux/arm/v7 \
-v ~/code/samples:/work:ro \
arm32v7/debian:bullseye-slim \
sh -c '
# Fix linker path mismatch (common issue)
ln -sf /lib/ld-linux-armhf.so.3 /lib/ld-linux.so.3 2>/dev/null || true
# Install dependencies if needed (check rabin2 -l output)
apt-get update -qq && apt-get install -qq -y libcap2 libacl1 2>/dev/null
# Run with library debug output (strace alternative)
LD_DEBUG=libs /work/binary args
'ARM64 Binary on macOS
docker run --rm --platform linux/arm64 \
-v ~/code/samples:/work:ro \
arm64v8/debian:bullseye-slim \
sh -c 'LD_DEBUG=libs /work/binary args'x86 32-bit Binary on macOS
docker run --rm --platform linux/i386 \
-v ~/code/samples:/work:ro \
i386/debian:bullseye-slim \
sh -c '/work/binary args'Tracing Limitations in Docker/QEMU User-Mode
| Method | Works? | Alternative |
|---|---|---|
| strace | ❌ (ptrace not implemented) | LD_DEBUG=files,libs |
| ltrace | ❌ (same reason) | Direct observation or Frida |
| gdb | ✓ (with QEMU -g flag) | N/A |
LD_DEBUG Options (strace alternative)
LD_DEBUG=libs # Library search and loading
LD_DEBUG=files # File operations during loading
LD_DEBUG=symbols # Symbol resolution
LD_DEBUG=bindings # Symbol binding details
LD_DEBUG=all # Everything (verbose)---
Option E: On-Device Analysis
When emulation fails or device-specific behavior needed.
Remote GDB via gdbserver
# On target device (via SSH/ADB)
gdbserver :1234 ./binary
# On host (with port forward)
ssh -L 1234:localhost:1234 user@device &
gdb-multiarch -q \
-ex "target remote localhost:1234" \
./binaryRemote strace (if available)
# On target device
strace -f -o /tmp/trace.log ./binary
# Pull log
scp user@device:/tmp/trace.log .Sandbox Configuration
Minimal Sandbox (nsjail)
nsjail \
--mode o \
--chroot /sysroot \
--user 65534 \
--group 65534 \
--disable_clone_newnet \
--rlimit_as 512 \
--time_limit 60 \
-- /binaryQEMU with Resource Limits
# CPU time limit
timeout 60 qemu-arm -L /sysroot -strace ./binary
# Memory limit via cgroup (requires setup)
cgexec -g memory:qemu_sandbox qemu-arm -L /sysroot ./binaryAnti-Analysis Detection
Before dynamic analysis, check for common anti-debugging/anti-analysis patterns:
Static Detection (Pre-Execution)
# Check for anti-debug strings/imports
strings -a binary | grep -Ei 'ptrace|anti|debugger|seccomp|LD_PRELOAD|/proc/self'
# r2: Look for ptrace/prctl/seccomp imports
r2 -q -c 'iij' binary | jq '.[].name' | grep -Ei 'ptrace|prctl|seccomp'
# Common anti-analysis indicators:
# - ptrace(PTRACE_TRACEME) - Prevent debugger attach
# - prctl(PR_SET_DUMPABLE, 0) - Prevent core dumps
# - seccomp - Syscall filtering
# - /proc/self/status checks - Detect TracerPidRuntime Detection
# If native execution possible:
strace -f ./binary 2>&1 | grep -E 'ptrace|prctl|seccomp|/proc/self'Mitigation Strategies
| Pattern | Detection | Bypass |
|---|---|---|
ptrace(TRACEME) | Returns EPERM if debugger attached | Patch call to NOP, use QEMU |
/proc/self/status check | Reads TracerPid field | Use QEMU (no /proc emulation) |
| Timing checks | gettimeofday/rdtsc loops | Single-step with GDB, patch checks |
| Self-checksum | Reads own binary/memory | Compute expected checksum, patch |
When anti-analysis detected: Prefer QEMU-strace over GDB (fewer detection vectors), or patch checks in r2 before execution.
---
Error Recovery
| Error | Cause | Solution |
|---|---|---|
Unsupported syscall | QEMU limitation | Try Qiling or on-device |
Invalid ELF image | Wrong arch/sysroot | Verify file output |
Segfault at 0x0 | Missing library | Check ldd equivalent |
QEMU hangs | Blocking on I/O | Add timeout, check strace |
Anti-debugging | Detection code | Use Frida stalker mode |
exec format error in Docker | binfmt not registered | Run tonistiigi/binfmt --install arm |
ld-linux.so.3 not found | Linker path mismatch | Create symlink in container |
libXXX.so not found | Missing dependency | apt install in container |
| Empty mount in Docker | Colima /tmp issue | Use ~/ path instead of /tmp/ |
ptrace: Operation not permitted | strace in QEMU | Use LD_DEBUG instead |
Output Format
Record observations as structured data:
{
"experiment": {
"id": "exp_001",
"method": "qemu_strace",
"command": "qemu-arm -L /usr/arm-linux-gnueabihf -strace ./binary",
"duration_secs": 12,
"exit_code": 0
},
"syscall_summary": {
"network": {
"socket": 2,
"connect": 1,
"send": 5,
"recv": 3
},
"file": {
"openat": 4,
"read": 12,
"close": 4
}
},
"network_connections": [
{
"family": "AF_INET",
"address": "192.168.1.100",
"port": 8443,
"protocol": "tcp"
}
],
"files_accessed": [
{"path": "/etc/config.json", "mode": "read"},
{"path": "/var/log/app.log", "mode": "write"}
],
"hypotheses_tested": [
{
"hypothesis_id": "hyp_001",
"result": "confirmed",
"evidence": "connect() to 192.168.1.100:8443 observed"
}
]
}Knowledge Journaling
After dynamic analysis, record findings for episodic memory:
[BINARY-RE:dynamic] {filename} (sha256: {hash})
Execution method: {qemu-strace|qemu-gdb|frida|on-device}
DECISION: Approved execution with {sandbox_config} (rationale: {why_safe})
Runtime observations:
FACT: Binary reads {path} (source: strace openat)
FACT: Binary connects to {ip}:{port} (source: strace connect)
FACT: Binary writes to {path} (source: strace write)
FACT: Function {addr} receives args {values} at runtime (source: gdb)
Syscall summary:
Network: {socket|connect|send|recv counts}
File: {open|read|write|close counts}
Process: {fork|exec|clone counts}
HYPOTHESIS UPDATE: {confirmed or refined theory} (confidence: {new_value})
Confirmed by: {runtime observation}
Contradicted by: {if any}
New questions:
QUESTION: {runtime-discovered unknown}
Answered questions:
RESOLVED: {question} → {runtime evidence}Example Journal Entry
[BINARY-RE:dynamic] thermostat_daemon (sha256: a1b2c3d4...)
Execution method: qemu-strace
DECISION: Approved execution with network-blocked sandbox (rationale: static analysis shows outbound only, no server)
Runtime observations:
FACT: Binary reads /etc/thermostat.conf at startup (source: strace openat)
FACT: Binary attempts connect to 93.184.216.34:443 (source: strace connect)
FACT: Binary writes to /var/log/thermostat.log (source: strace openat O_WRONLY)
FACT: sleep(30) called between network attempts (source: strace nanosleep)
Syscall summary:
Network: socket(2), connect(1-blocked), send(0), recv(0)
File: openat(4), read(12), write(8), close(4)
Process: none
HYPOTHESIS UPDATE: Telemetry client confirmed - reads config, attempts HTTPS to thermco servers every 30s (confidence: 0.95)
Confirmed by: connect() to expected IP, sleep(30) timing, config file read
Contradicted by: none
Answered questions:
RESOLVED: "Does it actually phone home?" → Yes, connect() to 93.184.216.34:443 observed
RESOLVED: "What files does it access?" → /etc/thermostat.conf (read), /var/log/thermostat.log (write)Next Steps
→ binary-re-synthesis to compile findings into report → Additional static analysis if new functions identified → Repeat with different inputs if behavior varies
{
"schema_version": "2.0",
"meta": {
"generated_at": "2026-01-21T15:30:24.404Z",
"slug": "2389-research-binary-re",
"source_url": "https://github.com/2389-research/claude-plugins/tree/main/binary-re/skills",
"source_ref": "main",
"model": "claude",
"analysis_version": "3.0.0",
"source_type": "community",
"content_hash": "4061fd7006c6646815936b91deb516e840c42ee5f45a87d1cc3ea2b02eef6e9c",
"tree_hash": "89685b89acb146296e456a6197a6444978a52fed7b106946fc3ded94b903212e"
},
"skill": {
"name": "binary-re",
"description": "This skill should be used when analyzing binaries, executables, or bytecode to understand what they do or how they work. Triggers on \"binary\", \"executable\", \"ELF\", \"what does this do\", \"reverse engineer\", \"disassemble\", \"decompile\", \"pyc file\", \"python bytecode\", \"analyze binary\", \"figure out\", \"marshal\". Routes to sub-skills for triage, static analysis, dynamic analysis, synthesis, or tool setup.",
"summary": "Comprehensive binary reverse engineering workflow with guided static and dynamic analysis capabilities",
"icon": "🔍",
"version": "1.0.0",
"author": "2389-research",
"license": "MIT",
"category": "security",
"tags": [
"reverse-engineering",
"binary-analysis",
"security-research",
"malware-analysis",
"debugging"
],
"supported_tools": [
"claude",
"codex",
"claude-code"
],
"risk_factors": [
"external_commands",
"filesystem"
]
},
"security_audit": {
"risk_level": "low",
"is_blocked": false,
"safe_to_publish": true,
"summary": "This skill provides guidance for binary reverse engineering using standard security research tools. The static analyzer detected 508 patterns related to tool execution commands (radare2, QEMU, GDB, Docker), but these are false positives in context: they are documentation and setup instructions for legitimate security research tools, not malicious code execution. The skill includes proper human-in-the-loop safeguards requiring approval before binary execution. No actual malicious behavior or data exfiltration detected.",
"risk_factor_evidence": [
{
"factor": "external_commands",
"evidence": [
{
"file": "tool-setup/SKILL.md",
"line_start": 37,
"line_end": 60
},
{
"file": "dynamic-analysis/SKILL.md",
"line_start": 26,
"line_end": 50
},
{
"file": "static-analysis/SKILL.md",
"line_start": 25,
"line_end": 48
}
]
},
{
"factor": "filesystem",
"evidence": [
{
"file": "tool-setup/SKILL.md",
"line_start": 194,
"line_end": 217
},
{
"file": "dynamic-analysis/SKILL.md",
"line_start": 144,
"line_end": 170
}
]
}
],
"critical_findings": [],
"high_findings": [],
"medium_findings": [],
"low_findings": [
{
"title": "Tool Installation Commands Require Elevated Privileges",
"description": "The skill documentation includes sudo commands for installing reverse engineering tools on Linux systems. These are legitimate installation procedures for standard security research tools and include clear documentation of what is being installed. Users retain control over whether to execute these commands.",
"locations": [
{
"file": "tool-setup/SKILL.md",
"line_start": 38,
"line_end": 60
}
]
},
{
"title": "Docker Privileged Mode Used for Emulation Setup",
"description": "The skill uses Docker privileged mode to register binfmt handlers for multi-architecture emulation on macOS. This is the standard method for enabling QEMU user-mode emulation in Docker and is well-documented in the Docker ecosystem. The command is clearly explained and only runs during one-time setup.",
"locations": [
{
"file": "tool-setup/SKILL.md",
"line_start": 132,
"line_end": 134
},
{
"file": "dynamic-analysis/SKILL.md",
"line_start": 38,
"line_end": 40
}
]
}
],
"dangerous_patterns": [],
"files_scanned": 7,
"total_lines": 7387,
"audit_model": "claude",
"audited_at": "2026-01-21T15:30:24.404Z",
"risk_factors": [
"external_commands",
"filesystem"
]
},
"content": {
"user_title": "Analyze Unknown Binaries with Guided Reverse Engineering",
"value_statement": "Binary reverse engineering is complex and requires specialized tools and methodologies. This skill provides Claude Code with step-by-step guidance for analyzing executables across architectures using industry-standard tools like radare2, QEMU, and Ghidra with proper safety protocols.",
"seo_keywords": [
"Claude Code",
"Claude",
"Codex",
"reverse engineering",
"binary analysis",
"malware analysis",
"disassembly",
"decompilation",
"security research",
"radare2"
],
"actual_capabilities": [
"Guide systematic analysis of binary executables across multiple architectures including x86, ARM, MIPS, and RISC-V",
"Provide structured workflows for triage, static analysis, dynamic analysis, and reporting phases",
"Generate commands for using reverse engineering tools like radare2, Ghidra, QEMU, GDB, and Frida",
"Detect architecture, ABI, dependencies, and capabilities from binary metadata",
"Create cross-architecture emulation setups using QEMU and Docker for safe execution",
"Extract functions, strings, cross-references, and decompiled pseudocode from binaries"
],
"limitations": [
"Does not include the actual reverse engineering tools; users must install radare2, QEMU, Ghidra separately",
"Requires human approval before executing any binaries for safety",
"Cross-architecture dynamic analysis requires proper sysroot and toolchain setup",
"Effectiveness depends on binary characteristics such as obfuscation, stripping, and packing"
],
"use_cases": [
{
"title": "Analyze Suspicious Firmware Binary",
"description": "Security researchers can use this skill to systematically analyze unknown firmware extracted from IoT devices, identifying backdoors, hardcoded credentials, or vulnerabilities through guided static and dynamic analysis.",
"target_user": "Security Researcher"
},
{
"title": "Debug Cross-Platform Embedded Software",
"description": "Embedded developers can analyze compiled ARM or MIPS binaries to understand behavior, identify bugs, or verify correct compilation when source code is unavailable or when debugging stripped production builds.",
"target_user": "Embedded Systems Developer"
},
{
"title": "Understand Legacy Binary Behavior",
"description": "Software maintainers can reverse engineer undocumented legacy binaries to understand their functionality, extract business logic, or prepare for migration when original source code is lost.",
"target_user": "Software Maintainer"
}
],
"prompt_templates": [
{
"title": "Basic Binary Identification",
"prompt": "I have a binary file called firmware.bin. What architecture is it and what does it do?",
"scenario": "Starting point for analyzing an unknown binary file"
},
{
"title": "Find Hardcoded Credentials",
"prompt": "Analyze this binary for hardcoded passwords, API keys, or authentication secrets",
"scenario": "Security audit focusing on credential exposure"
},
{
"title": "Trace Network Behavior",
"prompt": "Run this binary in a safe environment and show me what network connections it attempts to make",
"scenario": "Dynamic analysis of network activity using QEMU and strace"
},
{
"title": "Decompile Specific Function",
"prompt": "Decompile the function at address 0x8048450 and explain what it does",
"scenario": "Deep dive into specific function behavior with Ghidra decompilation"
}
],
"output_examples": [
{
"input": "What architecture is this binary?",
"output": "Analysis Results:\n\nArchitecture: ARM 32-bit (little-endian)\nABI: Linux EABI5 (hard-float)\nInterpreter: /lib/ld-linux-armhf.so.3\nStripped: Yes\n\nThe binary is compiled for ARM v7 processors with hardware floating point. It requires glibc and can be emulated using qemu-arm with the armhf sysroot."
},
{
"input": "Find hardcoded credentials in this binary",
"output": "Security Findings:\n\nHardcoded Credentials Detected:\n\n1. admin:admin123 at offset 0x4a20\n Context: Basic authentication string in .rodata section\n Reference: Used by function authenticate_user at 0x8040\n\n2. API Key: sk_live_abc123xyz at offset 0x5100\n Context: Plaintext API token in data section\n Reference: Passed to curl_easy_setopt in network_request function\n\nRecommendation: These credentials should be moved to secure configuration files with proper encryption."
}
],
"best_practices": [
"Always verify binary hash against known good samples before analysis to ensure you are analyzing the correct version",
"Use QEMU user-mode emulation or Docker containers for safe execution rather than running unknown binaries directly on your system",
"Document all findings with specific evidence including file offsets, function addresses, and tool commands used for verification"
],
"anti_patterns": [
"Running unknown binaries directly on your host system without sandboxing or emulation can compromise your security",
"Analyzing binaries without first performing triage wastes time on wrong architecture assumptions or missing dependencies",
"Skipping human approval gates when executing binaries defeats the safety mechanisms built into this workflow"
],
"faq": [
{
"question": "Do I need to install reverse engineering tools separately?",
"answer": "Yes, this skill provides guidance for using tools but does not include them. You need to install radare2, QEMU, and optionally Ghidra on your system. The skill includes installation instructions for Linux, macOS, and Windows."
},
{
"question": "Is it safe to analyze malware with this skill?",
"answer": "The skill includes safety protocols using QEMU emulation and Docker containers for isolated execution. However, you should always use a dedicated analysis virtual machine and ensure proper network isolation when analyzing potentially malicious binaries."
},
{
"question": "What architectures are supported?",
"answer": "The skill supports x86 32-bit and 64-bit, ARM 32-bit and 64-bit, MIPS 32-bit, and RISC-V 32-bit and 64-bit. Support quality depends on QEMU emulation accuracy and availability of proper sysroots."
},
{
"question": "Can this skill analyze Windows PE files?",
"answer": "The skill is primarily designed for Linux ELF binaries. While radare2 can analyze PE files, the dynamic analysis workflows using QEMU are Linux-focused. For Windows binaries, static analysis will work but dynamic analysis is limited."
},
{
"question": "How does this compare to using IDA Pro or Binary Ninja?",
"answer": "This skill uses open-source tools like radare2 and Ghidra rather than commercial tools. The workflow is designed for AI-guided analysis where Claude Code executes tool commands. It complements rather than replaces manual analysis in dedicated RE tools."
},
{
"question": "What if the binary is obfuscated or packed?",
"answer": "The skill includes techniques for identifying packers and obfuscation, but heavily protected binaries may require manual unpacking first. Dynamic analysis with QEMU can sometimes bypass packing by observing runtime behavior after unpacking occurs in memory."
}
]
},
"file_structure": [
{
"name": "dynamic-analysis",
"type": "dir",
"path": "dynamic-analysis",
"children": [
{
"name": "SKILL.md",
"type": "file",
"path": "dynamic-analysis/SKILL.md",
"lines": 564
}
]
},
{
"name": "static-analysis",
"type": "dir",
"path": "static-analysis",
"children": [
{
"name": "SKILL.md",
"type": "file",
"path": "static-analysis/SKILL.md",
"lines": 407
}
]
},
{
"name": "synthesis",
"type": "dir",
"path": "synthesis",
"children": [
{
"name": "SKILL.md",
"type": "file",
"path": "synthesis/SKILL.md",
"lines": 374
}
]
},
{
"name": "tool-setup",
"type": "dir",
"path": "tool-setup",
"children": [
{
"name": "SKILL.md",
"type": "file",
"path": "tool-setup/SKILL.md",
"lines": 486
}
]
},
{
"name": "triage",
"type": "dir",
"path": "triage",
"children": [
{
"name": "SKILL.md",
"type": "file",
"path": "triage/SKILL.md",
"lines": 268
}
]
},
{
"name": "SKILL.md",
"type": "file",
"path": "SKILL.md",
"lines": 312
}
]
}
Related skills
FAQ
What are the sub-skills?
triage, static-analysis, dynamic-analysis, synthesis and tool-setup, each auto-detected by keywords.
Which tools does it use?
radare2 (r2), Ghidra, GDB, QEMU and Frida, with binutils/LLVM fallbacks when r2/Ghidra are unavailable.