К основному содержанию
скилл CX Codex

reverse-engineering · mohitmishra786 — скилл для Claude Code: анализ бинарей

Скилл для разбора скомпилированных бинарей: подсказывает агенту порядок работы с Ghidra, radare2 и Binary Ninja. Пригодится, когда исходников нет, а логику восстановить надо.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mohitmishra786/low-level-dev-skills --skill reverse-engineering -a claude-code
Открыть на GitHub

Что делает reverse-engineering

Скилл описывает рабочий процесс реверса: первичный осмотр через file, strings, xxd, readelf и checksec, затем дизассемблирование и декомпиляция. Отдельные разделы посвящены headless-анализу в Ghidra, скриптам на Java и Jython, командному режиму radare2 и Python API Binary Ninja.

Есть блок про распознавание паттернов C++ — таблицы виртуальных методов, RAII, шаблоны, устройство std::string. Плюс восстановление символов в stripped-бинарях и сравнение версий через Diaphora или BinDiff. В конце — таблица типичных сбоев: почему декомпилятор Ghidra срывается на косвенных переходах, что делать при неполном анализе в r2, как обойти проверку ptrace.

Скилл ничего не устанавливает сам. Ghidra, radare2, Binary Ninja и checksec должны быть в системе до того, как вы попросите агента заняться бинарём — иначе он будет ссылаться на инструменты, которых нет.

Какие задачи решает

  • разобрать незнакомый бинарь без исходников
  • восстановить алгоритм из скомпилированного файла
  • сравнить две прошивки и найти пропатченные функции
  • вытащить символы из stripped ELF или PE
  • написать скрипт для Ghidra или r2 вместо ручного кликанья

Примеры запросов агенту

  • проанализируй этот ELF: сначала triage через file и strings, потом загрузи в Ghidra
  • распиши, как найти main в stripped-бинаре через __libc_start_main
  • сравни firmware_v1 и firmware_v2 и покажи, какие функции изменились

Как установить reverse-engineering

1Через Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill reverse-engineering -a claude-code

2Вручную: положить файлы

~/.claude/skills/reverse-engineering/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/reverse-engineering/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора62

zig-comptime Скилл для агентов, который помогает писать обобщённые функции, рефлексию типов и код, вычисляемый на этапе компиляции в Zig. CX Codex +1 443установок zig-testing Скилл ведёт агента по тестовой системе Zig: zig build test, фильтры, comptime-проверки, тестовый аллокатор и встроенный фаззер. CX Codex +1 440установок stm32-baremetal Ведёт агента по сборке прошивки STM32 на одних заголовках CMSIS: тактовые частоты, RCC, линкерный скрипт, сборка через arm-none-eabi-gcc. CX Codex +1 360установок device-drivers Скилл ведёт агента по разработке драйверов ядра Linux: platform/i2c/spi, символьные устройства, IRQ, DMA, regmap и runtime PM. CX Codex +1 358установок abi-and-calling-conventions Скилл для ИИ-агента, который разбирает правила ABI: какие регистры держат аргументы, как выравнивается стек, что ломается в FFI. CX Codex +1 342установок linux-kernel-architecture Даёт агенту карту ядра Linux: порядок загрузки, крупные подсистемы, уровни initcall и места, где искать код в linux.git. CX Codex +1 333установок cuda Помогает агенту писать и оптимизировать CUDA-ядра: иерархия потоков, разделяемая память, потоки, флаги nvcc и Thrust. CX Codex +1 320установок kernel-debugging-advanced Скилл для трассировки ядра Linux: ftrace, trace-cmd, perf, kprobes, kgdb и разбор vmcore. Пригодится, когда драйвер тормозит без явной ошибки. CX Codex +1 317установок

Другие версии reverse-engineering

Похожие

reverse-engineer sickn33 Скилл задаёт методику реверс-инжиниринга бинарных файлов: статический и динамический анализ, поиск паттернов и скрипты для декомпиляторов. CX Codex +1 892установок ctf-reverse ljagiello Справочник по реверс-инжинирингу для CTF: помогает агенту разбирать скомпилированные бинарники, распаковывать протекторы и анализировать виртуальные машины. CX Codex +1 10 100установок reverse-engineering-tools gmh5225 Скилл для анализа игровых бинарей, драйверов и дампов: дизассемблирование, декомпиляция, отладка и восстановление интерфейсов. CX Codex +1 544установок learn-reverse-engineering rohitg00 Интерактивный учебник по чтению скомпилированных программ. Проходит один урок за вызов: от формата файла и дизассемблирования до символьного исполнения и AI-анализа. Нужны Python 3.10+ и собственный исходный код. CX Codex +1 488установок ghidra-headless trailofbits Скилл запускает headless-анализатор Ghidra и вытаскивает из бинаря функции, строки, символы и граф вызовов. Пригодится, когда исходников нет, а разобрать надо. CX Codex +1 507установок code-obfuscation-deobfuscation yaklang Скилл помогает анализировать и снимать защиту в нативных бинарниках: от мусорного кода и непрозрачных предикатов до виртуализации и сплющивания графа потока управления. CX Codex +1 4 000установок

Рядом в теме «Безопасность»

Всё по теме «Безопасность» →

Вопросы о reverse-engineering

Как установить reverse-engineering в Claude?

Выполните npx skills add mohitmishra786/low-level-dev-skills --skill reverse-engineering -a claude-code. Скилл появится в ~/.claude/skills/reverse-engineering/SKILL.md.

Что делает reverse-engineering?

Ведёт агента по шагам анализа бинарей: первичный осмотр, декомпиляция в Ghidra, работа в radare2, скрипты Binary Ninja, распознавание C++-паттернов, восстановление символов и диффинг версий.

Какие инструменты нужны для работы скилла?

Ghidra, radare2, Binary Ninja, Diaphora или BinDiff и утилиты вроде strings, readelf, checksec. Скилл только описывает процесс, ставить их нужно отдельно.

Исходный текст

SKILL.md · MIT
---
name: reverse-engineering
description: Reverse engineering skill for binary analysis. Use when decompiling with Ghidra, analyzing with radare2, scripting RE tools, triaging with strings/file/xxd, or diffing binaries. Activates on queries about Ghidra, radare2, r2, decompiler, Binary Ninja, Diaphora, or stripped binary analysis.
---

# Reverse Engineering

## Purpose

Guide agents through reverse engineering binaries: Ghidra project setup and decompilation, radare2 analysis workflow, Binary Ninja scripting, initial triage with `strings`/`file`/`xxd`, identifying C++ patterns (vtables, RAII), analyzing stripped binaries, and diffing with Diaphora or BinDiff.

## When to Use

- Analyzing an unknown binary without source code
- Recovering algorithm logic from compiled executables
- Comparing two firmware versions for vulnerability patches
- Understanding malware or CTF challenge binaries
- Recovering symbols from stripped ELF/PE files
- Automating analysis with Ghidra or r2 scripts

## Workflow

### 1. Initial triage

```bash
file suspicious_binary
strings -n 8 suspicious_binary | head -50
strings -el suspicious_binary          # UTF-16 LE
xxd suspicious_binary | head -20
readelf -h suspicious_binary           # ELF
objdump -d -M intel suspicious_binary | head -40

# Check protections
checksec --file=suspicious_binary
```

| Command | Reveals |
|---------|---------|
| `file` | Architecture, static/dynamic, stripped |
| `strings` | URLs, paths, error messages, keys |
| `readelf -s` | Symbol table (if not stripped) |
| `nm -D` | Dynamic symbols |
| `checksec` | RELRO, NX, PIE, canary |

### 2. Ghidra workflow

```bash
# Headless analysis
analyzeHeadless /tmp/ghidra_projects MyProject \
  -import suspicious_binary \
  -postScript ExportDecompile.java

# GUI: File → New Project → Import File → Analyze (Yes)
```

Key steps:
1. **Auto-analysis** — let Ghidra complete disassembly
2. **Define functions** — `F` at entry points if missed
3. **Decompiler** — Window → Decompiler (C-like output)
4. **Rename** — `L` on variables/functions for clarity
5. **Cross-references** — `Ctrl+Shift+F` on function/data

```java
// Ghidra script (Java) — list functions > 100 bytes
import ghidra.program.model.listing.*;

FunctionManager fm = currentProgram.getFunctionManager();
for (Function f : fm.getFunctions(true)) {
    if (f.getBody().getNumAddresses() > 100)
        println(f.getName() + " @ " + f.getEntryPoint());
}
```

```python
# Ghidra Python (Jython)
from ghidra.program.model.listing import FunctionManager
fm = currentProgram.getFunctionManager()
for f in fm.getFunctions(True):
    print(f.getName(), f.getEntryPoint())
```

### 3. radare2 workflow

```bash
r2 suspicious_binary
```

```
[0x00001000]> aaa          # analyze all
[0x00001000]> afl          # list functions
[0x00001000]> pdf @ main   # disassemble function
[0x00001000]> VV           # visual graph mode
[0x00001000]> iz           # strings in data sections
[0x00001000]> s sym.main; pdf
```

Patching:

```
[0x00001000]> wx 9090 @ 0x401234   # write NOPs
[0x00001000]> wci 0x401234         # insert instruction
[0x00001000]> wt modified_binary
```

```bash
# r2 scripting
r2 -qc 'aaa; afl' suspicious_binary
r2 -i analysis.r2 suspicious_binary
```

### 4. Binary Ninja scripting

```python
# BN Python API
import binaryninja as bn

bv = bn.load("suspicious_binary")
for func in bv.functions:
    if func.name.startswith("sub_"):
        hlil = func.hlil
        for block in hlil:
            print(block)
```

### 5. C++ pattern recognition

```cpp
// Vtable pattern in disassembly
// mov rax, [rdi]      ; load vtable pointer
// call [rax+0x10]     ; virtual call at offset

// Constructor pattern
// mov [obj], offset vtable
```

| Pattern | Indicator |
|---------|-----------|
| Vtable | `.data.rel.ro` section, array of function pointers |
| RAII | paired ctor/dtor calls, exception landing pads |
| Templates | Mangled names `_Z...`, duplicate logic per type |
| std::string | SSO buffer inline or heap pointer at offset 0 |

```bash
# Demangle C++ symbols
c++filt _ZN4Math3addEii
```

### 6. Stripped binary recovery

```bash
# Find main via __libc_start_main
readelf -s binary | grep -E 'main|start'
# Or r2: afl~entry

# FLIRT signatures (Ghidra/BN) — match libc patterns
# Stack string analysis in Ghidra decompiler
```

Strategies:
- Identify `main` via libc init or entry point
- Find syscalls (`syscall` insn on Linux)
- String xref to locate error handlers
- Entropy analysis for encrypted sections

### 7. Binary diffing

```bash
# Diaphora (Ghidra/IDA plugin)
# Export from both binaries, run diff

# BinDiff (commercial, IDA/Ghidra)
bindiff old.i64 new.i64

# Simple hash diff
sha256sum firmware_v1 firmware_v2
diff <(objdump -d v1) <(objdump -d v2) | head
```

Use diffing to find patched vulnerability functions after updates.

### 8. RE decision tree

```
Binary type?
├── ELF/Linux → Ghidra + r2 + readelf
├── PE/Windows → Ghidra + PE-bear + x64dbg reference
├── Firmware → binwalk extract → Ghidra on architecture
└── Obfuscated → dynamic analysis (gdb/ltrace) first
```

## Common Problems

| Symptom | Cause | Fix |
|---------|-------|-----|
| Ghidra decompiler fails | Indirect jumps, bad types | Fix function signature; define struct |
| r2 analysis incomplete | Large binary | `aaa` then `aac` ; increase analysis depth |
| Wrong architecture | ARM vs Thumb, MIPS | Set `-a arm` or correct Ghidra language |
| Anti-debug trap | ptrace check | Patch or use `-gdb` in QEMU |
| Packed binary | UPX/etc. | `upx -d` or manual unpack |
| No xrefs to string | PIE/RELRO | Follow GOT; runtime analysis |

## Related Skills

- `skills/binaries/elf-inspection` — ELF structure analysis
- `skills/debuggers/gdb` — dynamic analysis complement
- `skills/runtimes/binary-hardening` — understanding mitigations being bypassed
- `skills/security/kernel-security` — kernel RE and CVE analysis
- `skills/low-level-programming/assembly-x86` — reading disassembly
- `skills/low-level-programming/assembly-arm` — ARM binary analysis

© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой