본문으로 건너뛰기
cccskills
무료GitHub에 공개

binary-re

Analyzes ELF binaries, executables, and firmware images to understand behavior without source code; coordinates sub-skills binary-re:triage, binary-re:static-analysis, binary-re:dynamic-analysis, binary-re:synthesis, and binary-re:tool-setup. Use when working with a binary, executable, or ELF file; asked to reverse engineer, disassemble, decompile, or figure out what something does; targeting ARM64, ARMv7, x86_64, or MIPS; or analyzing Python bytecode (.pyc, marshal). For Python bytecode analysis, see docs/python-bytecode-re.md.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구Docker
설치 방법 보기

포함된 파일(1)

  • SKILL.md11.0 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Binary Reverse Engineering

Purpose

Comprehensive guide for binary reverse engineering. This skill provides the overall methodology, philosophy, and reference material. Related skills handle specific phases:

Related Skills

SkillPurposeTrigger Keywords
binary-re:triageFast fingerprinting"what is this binary", "identify", "file type"
binary-re:static-analysisr2 + Ghidra analysis"disassemble", "decompile", "functions"
binary-re:dynamic-analysisQEMU + GDB + Frida"run", "execute", "debug", "trace"
binary-re:synthesisReport generation"summarize", "report", "document findings"
binary-re:tool-setupInstall tools"install", "setup", "tool not found"

Note: Each skill auto-detects based on keywords. You don't need to explicitly route - just ask what you need.

Pre-Flight Verification

Before beginning any analysis, verify tooling availability:

Core Tools (Required)

rabin2 -v  # Should show version
r2 -v      # Should show version

Decompilation (Optional)

# Check r2ghidra availability
r2 -qc 'pdg?' - 2>/dev/null | grep -q Usage && echo "r2ghidra OK" || echo "r2ghidra missing - install with: r2pm -ci r2ghidra"

Dynamic Analysis Platform Check

Host PlatformMethodSetup Required
Linux x86_64Native QEMUapt install qemu-user
macOS (any)Docker + binfmtSee binary-re:tool-setup skill
WindowsWSL2Use Linux method inside WSL

If dynamic tools unavailable: Proceed with static-only analysis, note reduced confidence in synthesis phase.

Fallback Tooling (No r2/Ghidra)

When radare2 or Ghidra aren't available, use standard binutils/LLVM tools:

# Metadata (replaces rabin2 -I)
readelf -h binary              # ELF header
readelf -d binary              # Dynamic section (dependencies)
file binary                    # Quick identification

# Imports/Exports (replaces rabin2 -i/-E)
readelf -Ws binary | grep -E "FUNC|OBJECT" | awk '{print $8}'
nm -D binary 2>/dev/null       # Dynamic symbols

# Strings (replaces rabin2 -zz)
strings -a -n 8 binary | grep -Ei 'http|ftp|/etc|/var|error|pass|key|token|api'

# Disassembly (replaces r2 pdf)
objdump -d -M intel binary | head -500
# Or LLVM (better cross-arch support):
llvm-objdump -d --no-show-raw-insn binary | head -500

# Dependencies (replaces rabin2 -l)
ldd binary 2>/dev/null || readelf -d binary | grep NEEDED

Limitations of fallback approach:

  • No cross-references (axt/axf) - must trace manually
  • No decompilation - assembly only
  • No function boundary detection - raw disassembly
  • Reduced accuracy for stripped binaries

Philosophy

The LLM drives analysis; the human provides context.

Human provides:

  • Platform info (device type, OS, hardware)
  • Suspected purpose (what the binary might do)
  • Constraints (no network, isolated env, etc.)

LLM executes:

  • Tool selection and invocation
  • Hypothesis formation from evidence
  • Experiment design
  • Knowledge synthesis

The Agentic Loop

┌─────────────────────────────────────────────────┐
│           HYPOTHESIS-DRIVEN ANALYSIS            │
├─────────────────────────────────────────────────┤
│                                                 │
│  0. I/O SANITY → Compare known inputs/outputs   │
│  1. OBSERVE → Gather facts via tools            │
│  2. HYPOTHESIZE → Form theories from facts      │
│  3. PLAN → Design experiments to test theories  │
│  4. EXECUTE → Run tools (gate risky ops)        │
│  5. RECORD → Capture observations               │
│  6. UPDATE → Confirm/refute hypotheses          │
│  7. LOOP → Until understanding sufficient       │
│                                                 │
└─────────────────────────────────────────────────┘

Step 0: Compare Known I/O First (CRITICAL)

Before diving into code analysis, always check if known inputs/outputs exist.

This step prevents hours of wasted analysis by establishing ground truth first.

⚠️ REQUIRES HUMAN APPROVAL - Even for I/O comparison, get explicit approval before execution.

# SAFE: Use emulation for cross-arch binaries (after human approval)
# ARM32 example:
qemu-arm -L /usr/arm-linux-gnueabihf -- ./binary input.txt > actual_output.txt

# x86-64 native (still requires approval):
./binary input.txt > actual_output.txt

# Docker-based (macOS - safest option):
docker run --rm --platform linux/arm/v7 -v ~/samples:/work:ro \
  arm32v7/debian:bullseye-slim /work/binary /work/input.txt > actual_output.txt

# Compare outputs:
diff expected_output.txt actual_output.txt
cmp -l expected_output.txt actual_output.txt | head -20  # Byte-level

# Document the delta:
# - Where does output first diverge?
# - What pattern appears in the corruption?
# - Does file size match (logic bug) or differ (truncation)?

Record as FACT:

FACT: Output differs at byte {N}, expected "{X}" got "{Y}" (source: diff/cmp)
FACT: File sizes match/differ by {N} bytes (source: ls -l)

This single step often reveals the bug category before any disassembly.

Knowledge Model

Throughout analysis, maintain structured knowledge via episodic memory:

FACTS: Verified observations with tool attribution
HYPOTHESES: Theories with confidence and evidence
QUESTIONS: Open unknowns blocking progress
EXPERIMENTS: Planned tool invocations
OBSERVATIONS: Results from experiments
DECISIONS: Human-approved choices with rationale

Episodic Memory Integration

Knowledge persists across sessions via episodic memory. Use consistent tagging:

[BINARY-RE:{phase}] {artifact_name} (sha256: {hash})
FACT: {observation} (source: {tool})
HYPOTHESIS: {theory} (confidence: {0.0-1.0})
QUESTION: {unknown}
DECISION: {choice} (rationale: {why})

Starting analysis: Search episodic memory for artifact hash first After each phase: Findings are automatically captured in conversation Resuming: Search [BINARY-RE] {artifact_name} to restore context

Human-in-the-Loop Triggers

ALWAYS ask human before:

  1. Executing the binary - Even under QEMU, confirm sandbox
  2. Network operations - Prevent unintended phone-home
  3. Conflicting evidence - Resolve contradictory findings
  4. Privileged operations - Device access, root actions
  5. Major direction changes - Significant analysis pivots

Session Management

Starting New Analysis

1. Compute artifact hash: sha256sum binary
2. Search episodic memory: "[BINARY-RE] sha256:{hash}"
3. If previous analysis found:
   → "Found previous analysis from {date}. Resume or start fresh?"
4. If resuming: Load facts/hypotheses, continue from last phase
5. If fresh: Begin with triage phase

Resuming Interrupted Analysis

User: "Continue analyzing that thermostat binary"

Claude:
1. If the episodic-memory plugin is available, invoke episodic-memory:search-conversations
   Query: "[BINARY-RE] thermostat"
   Otherwise, ask the user what was found in the previous session.
2. Retrieve previous session findings
3. Summarize: "Last session identified ARM32/musl, found network
   functions. We were about to run dynamic analysis."
4. Continue from that phase

Searching Past Analyses

User: "Have we analyzed any ARM binaries with hardcoded passwords?"

Claude:
1. Search: "[BINARY-RE] FACT: hardcoded" or "[BINARY-RE] ARM"
2. Return matching artifacts and findings

Standard Analysis Flow

For typical unknown binary analysis:

1. Triage (binary-re:triage)
   └─ Architecture, ABI, dependencies, capabilities

2. Static Analysis (binary-re:static-analysis)
   └─ Functions, strings, xrefs, decompilation

3. Dynamic Analysis (binary-re:dynamic-analysis) - if safe
   └─ Syscalls, network, file access

4. Synthesis (binary-re:synthesis)
   └─ Structured report with evidence

Quick Reference

Essential Commands

# Fast triage
rabin2 -I binary              # Metadata
rabin2 -l binary              # Dependencies
rabin2 -zz binary             # Strings

# Static analysis
r2 -q -c 'aa; aflj' binary    # Functions
r2 -q -c 'izj' binary         # Strings

# Dynamic (ARM example)
qemu-arm -L /usr/arm-linux-gnueabihf -strace ./binary

Architecture Detection

IndicatorArchitectureQEMU BinaryGhidra Processor
e_machine=EM_386 (3)x86 32-bitqemu-i386 or Docker --platform linux/i386x86:LE:32:default
e_machine=EM_ARM (40)ARM 32-bitqemu-arm or Docker --platform linux/arm/v7ARM:LE:32:v7
e_machine=EM_AARCH64 (183)ARM 64-bitqemu-aarch64 or Docker --platform linux/arm64AARCH64:LE:64:v8A
e_machine=EM_X86_64 (62)x86-64Native or Docker --platform linux/amd64x86:LE:64:default
e_machine=EM_MIPS (8)MIPS 32 LEqemu-mipselMIPS:LE:32:default
e_machine=EM_MIPS (8) BEMIPS 32 BEqemu-mipsMIPS:BE:32:default
e_machine=EM_RISCV (243)RISC-V 64qemu-riscv64RISCV:LE:64:RV64I
e_machine=EM_RISCV (243) 32RISC-V 32qemu-riscv32RISCV:LE:32:RV32I

Libc Detection

InterpreterLibc
ld-linux-armhf.so.3glibc (ARM hard-float)
ld-musl-arm.so.1musl
ld-uClibc.so.0uClibc

Error Recovery

SituationAction
Tool not foundUse binary-re:tool-setup skill
Wrong architectureRe-run triage, verify file output
QEMU failsTry Qiling, Unicorn, or on-device
Analysis timeoutReduce scope, use aa not aaa
Conflicting evidenceAsk human, document both interpretations

Documentation

See companion docs:

  • docs/r2-commands.md - Complete r2 reference for LLMs
  • docs/ghidra-headless.md - Ghidra scripting guide
  • docs/arch-adapters.md - Per-architecture quirks
  • docs/python-bytecode-re.md - Python .pyc/marshal obfuscation patterns

Integration

Works with other plugins:

  • remote-system-maintenance: Extract binaries from devices via SSH
  • fresh-eyes-review: Validate conclusions before documenting
  • scenario-testing: Create reproducible analysis environments

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Observes runtime behavior of binaries via QEMU emulation, GDB debugging, and Frida hooking — syscall tracing, breakpoints, memory inspection, and function interception. Use when running, tracing, or debugging a binary, verifying hypotheses from static analysis, or watching actual syscalls, network calls, or file access; requires human approval before any execution.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

2389-research/binary-re202026년 9월 26일 업데이트

Performs static analysis of binary code using radare2 and Ghidra — function enumeration, cross-reference tracing, decompilation, and control flow graphs without executing the binary. Use when disassembling or decompiling code, mapping functions, tracing data flow, or building hypotheses before dynamic verification.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

2389-research/binary-re202026년 9월 26일 업데이트

Compiles binary analysis findings into structured reports — correlates facts from triage, static, and dynamic phases, validates hypotheses against evidence, and produces traceable documentation. Use when ready to summarize findings, generate a report, document what a binary does, or prepare results for handoff or archival.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

2389-research/binary-re202026년 9월 26일 업데이트

Installs and configures reverse engineering tools including radare2, Ghidra, GDB, QEMU, Frida, and cross-compilation toolchains for ARM64, ARMv7, x86_64, and MIPS. Use when a tool command fails, a required tool is missing, or you need to set up a fresh analysis environment.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

2389-research/binary-re202026년 9월 26일 업데이트

Fingerprints unknown binaries using rabin2 — detects architecture (ARM, x86, MIPS), ABI, libc, dependencies, and strings of interest. Use when first encountering an unknown binary, ELF file, or firmware blob, or when you need architecture or ABI information before committing to deeper analysis.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

2389-research/binary-re202026년 9월 26일 업데이트

2389-research의 스킬 모두 보기

이 스킬의 문제 신고