reverse-engineering について
セキュリティ分野のリバースエンジニアリングとデバッグ向けスキルです。静的・動的解析や脆弱性調査を扱い、タスク別の資料と IDA エクスポート、Android DEX ダンプ用ツールを備えています。
主な機能
- 01形式・タスク別の解析ガイド
- 02静的・動的解析の手順
- 03脆弱性調査の方法論
- 04IDA エクスポートプラグイン
- 05Android DEX ダンプスクリプト
活用シーン
- 01未知のバイナリの初期調査
- 02モバイルアプリやマルウェアの解析
- 03クラッシュのデバッグと脆弱性調査
- 04Ghidra または IDA の解析スクリプト作成
MCP 対応
ida-pro-mcp、GhidraMCP、r2mcp などの上流 MCP サーバーへの接続設定と、ライブクエリの手順を記載しています。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ r00tedbrain-backup/ skills --skill reverse-engineeringインストール後、Claude Code で/reverse-engineeringを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/android-re.mdanticheat-re.mddynamic-debugging.mdexploit-dev.mdfirmware-embedded.mdfrida.mdghidra-scripting.mdidapython.mdios-re.mdmacos-kernel-re.mdmalware-analysis.mdmanaged-code-re.mdprotocol-re.mdstatic-analysis.mdstruct-recovery.mdsymbol-recovery.mdunicorn-emulation.mdwindows-re.mdtools/dex_memory_dumper.jsida_export_plugin.pyREADME.mdtools/mcp/claude-config-snippets.jsoncline-config-snippets.jsoncontinue-config-snippets.jsoncursor-config-snippets.jsonghidra-mcp.mdida-pro-mcp.mdopencode-config-snippets.jsonREADME.mdwindsurf-config-snippets.json詳細
リバースエンジニアリングとデバッグ
静的解析、動的解析、デバッグ、バイナリ悪用のための専門的な手法です。
クイックリファレンス — 適切なリファレンスファイルを読み込む
| タスク | リファレンスファイル |
|---|---|
| 静的解析、逆アセンブル、Ghidra、radare2、objdump、パッチ適用 | references/static-analysis.md |
| GDB(+pwndbg/gef/peda)、LLDB、strace/ltrace、クラッシュ解析 | references/dynamic-debugging.md |
| Android APK、DEX、smali、ADB、Android での Frida、再パッケージ化 | references/android-re.md |
| iOS IPA、Mach-O、class-dump、Frida ObjC/Swift、Keychain | references/ios-re.md |
| macOS XPC、launchd、kext、SIP、Linux カーネルモジュール | references/macos-kernel-re.md |
| Windows PE、WinDbg、x64dbg、.NET/dnSpy、カーネルドライバー | references/windows-re.md |
| Frida スクリプト、Java/Native/ObjC のフック、SSL ピンニング解除、ガジェット | references/frida.md |
| .NET IL、dnSpy、de4dot、Java/JVM、Kotlin、Unity/IL2CPP、Mono | references/managed-code-re.md |
| マルウェア、難読化、パッカー解析、IOC 抽出、Volatility | references/malware-analysis.md |
| CTF pwn/rev、BOF、ROP、ヒープ悪用、pwntools、angr/Z3 | references/exploit-dev.md |
| ネットワークプロトコルのリバースエンジニアリング、Wireshark、mitmproxy、Protobuf、gRPC、Lua ディセクター、Boofuzz | references/protocol-re.md |
| ファームウェア、binwalk、QEMU エミュレーション、JTAG/UART、U-Boot、IoT | references/firmware-embedded.md |
| EAC、BattlEye、Vanguard、FACEIT、VAC、カーネル AC 解析 | references/anticheat-re.md |
| Ghidra Python/Java スクリプト、ヘッドレス、脆弱性の発見、カスタムアナライザー | references/ghidra-scripting.md |
| IDAPython / IDALib スクリプト、Hex-Rays API、一括デコンパイル、OLLVM ヘルパー | references/idapython.md |
| Unicorn エンジンのエミュレーション、関数レベルのエミュレーション、JNI スタブ化、システムコールのシミュレーション | references/unicorn-emulation.md |
| 削除されたシンボルの復元、マジックナンバー、ペアになった呼び出し、xref 解析 | references/symbol-recovery.md |
| C/C++ 構造体の復元、vtable、std::string/vector/map、フィールド型の推定 | references/struct-recovery.md |
同梱ツール(tools/)
このスキルには、すぐに使える補助ユーティリティが付属しています(すべて独自開発、MIT ライセンス)。
| ツール | 用途 |
|---|---|
tools/ida_export_plugin.py | IDA Pro プラグイン(Ctrl-Shift-E)— IDB を decompile/ ディレクトリにプレーンテキストファイルとしてエクスポートします。エージェントが直接読み取れます |
tools/dex_memory_dumper.js | Frida エージェント — メモリスキャンと ClassLoader の走査により、実行中の Android プロセスから DEX をダンプします |
tools/mcp/ | エージェントを上流の MCP サーバー(ida-pro-mcp、GhidraMCP、r2mcp)に接続するためのセットアップ手順と設定スニペット |
使い方の詳細は tools/README.md を参照してください。tools/mcp/ ディレクトリでは、(ファイルのエクスポートに代わる)ライブクエリのワークフローについて説明しています。上記の方法ファイルでは、どちらのモードにも対応しています。
あらゆるケースに共通する最初の手順
リファレンスファイルを読み込む前に、コンテキストを確認します。
1. 対象を特定する
file <binary> # file type, arch, bits, stripped?
xxd <binary> | head -4 # magic bytes
strings -a <binary> | head -60
checksec --file=<binary> # NX, PIE, RELRO, stack canary, ASLR
バイナリ形式の判断ツリー:
- ELF → Linux ネイティブ →
references/static-analysis.md+references/dynamic-debugging.md - PE/PE32+ → Windows ネイティブ →
references/windows-re.md+references/static-analysis.md - .NET メタデータを含む PE →
references/managed-code-re.md(最初に dnSpy) - Mach-O → macOS/iOS →
references/macos-kernel-re.md+references/ios-re.md - DEX/APK/AAB → Android →
references/android-re.md - JAR/WAR/AAR → Java →
references/managed-code-re.md - .sys ドライバー →
references/windows-re.md(カーネルセクション)またはreferences/anticheat-re.md - Assembly-CSharp.dll → Unity →
references/managed-code-re.md(Unity セクション) - 不明/ファームウェア →
references/firmware-embedded.md(binwalk + エントロピー)
タスク種別の判断ツリー(すべての形式に適用):
- シンボルが除去されたバイナリで、関数が不明 →
references/symbol-recovery.md - デコンパイル時に構造体のレイアウトが不明 →
references/struct-recovery.md - 1 つの関数だけを単独で実行する必要がある →
references/unicorn-emulation.md - 分析に IDA Pro を使用する →
references/idapython.md - 分析に Ghidra を使用する →
references/ghidra-scripting.md
2. 範囲を定める
ユーザーに尋ねる(または文脈から推測する)項目:
- 目標:ロジックの理解/脆弱性の発見/保護の回避/パッチ適用/CTF フラグ/マルウェアの IOC?
- プラットフォーム:Linux/Windows/macOS/Android/iOS/組み込み?
- 利用可能なツール:Ghidra/IDA/radare2/Binary Ninja/Hopper?
- 動的分析は可能か?:実行できるか? VM はあるか? エミュレーターはあるか? 実機はあるか?
3. 分析モードを選択する
Static only → No execution risk, slower understanding
Dynamic only → Fast but misses dead code
Static + Dynamic (recommended) → Static for map, dynamic for runtime truth
コアツールチェーンの概要
静的分析
| ツール | 最適な用途 |
|---|---|
Ghidra | 完全なデコンパイル、スクリプト作成、無料 |
radare2 / cutter | 強力な CLI、スクリプト作成、組み込み |
Binary Ninja | API ファースト、高速、商用 |
IDA Pro / IDA Free | 業界標準、優れたシグネチャ |
objdump | 手軽な逆アセンブル、インストール不要 |
readelf / nm | ELF のシンボル/セクションの検査 |
jadx | Android DEX → Java、GUI |
apktool | APK の展開/再パッケージ/smali |
動的分析
| ツール | 最適な用途 |
|---|---|
GDB + pwndbg/peda/gef | Linux ELF のデバッグ |
LLDB | macOS/iOS/Swift のデバッグ |
Frida | クロスプラットフォームのフック、ソース不要 |
strace / ltrace | システムコール/ライブラリ呼び出しのトレース |
Valgrind | メモリーエラー、Helgrind |
WinDbg | Windows カーネル+ユーザーモード |
x64dbg | Windows GUI デバッガー |
ネットワーク
| ツール | 最適な用途 |
|---|---|
Wireshark / tshark | パケットキャプチャ+解析 |
mitmproxy / Burp Suite | HTTP/S MITM |
Frida | プロセス内での SSL ピンニング解除 |
tcpdump | ヘッドレスキャプチャ |
方法論フレームワーク
静的分析のワークフロー
1. file + strings + checksec → quick triage
2. Entropy analysis → packed/encrypted?
3. Import table / symbol table → understand capabilities
4. Load in decompiler → rename, retype, annotate
5. Identify key functions → main(), crypto, network, anti-debug
6. Trace data flow → user input → sink
7. Document findings → comment inline
動的分析のワークフロー
1. Set up isolated environment → VM / container / device
2. Run with strace/ltrace first → understand syscall footprint
3. Attach debugger → set breakpoints at key functions
4. Observe runtime behavior → memory, registers, branches taken
5. Correlate with static → validate decompiler output
6. Patch / hook as needed → bypass checks, log values
脆弱性発見のワークフロー
1. Attack surface mapping → inputs: file, network, env vars, args
2. Dangerous function search → strcpy, gets, sprintf, memcpy, system
3. Integer overflow candidates → size calculations, loops
4. Format string candidates → printf(user_input)
5. UAF / double-free candidates → heap allocation patterns
6. Trigger + confirm → crash → controlled → exploitable
解析妨害の回避 — クイックリファレンス
アンチデバッグ検出
# Check if binary detects debugger
strings <bin> | grep -iE "ptrace|debugger|isDebuggerPresent|TracerPid"
# Linux: ptrace self-detection
# Bypass: preload hook or patch the ptrace call
一般的な保護機能
| 保護機能 | 検出方法 | 回避方法 |
|---|---|---|
ptrace アンチデバッグ | strace に ptrace(TRACEME) が表示される | JNZ→JMP にパッチするか、LD_PRELOAD で偽の ptrace を使う |
| タイミングチェック | ループ内の rdtsc / clock_gettime | 比較処理にパッチするか NOP に置き換える |
| チェックサム/整合性チェック | 独自の .text セクションのハッシュ | 復号後、チェック前にパッチする |
| パッカー(UPX など) | 高エントロピー+少数のインポート | upx -d を実行するか、展開後にメモリーからダンプする |
| 文字列の難読化 | 読み取れる文字列がない | 実行してメモリーから抽出する/Frida フックを使う |
| SSL ピンニング(モバイル) | アプリ内でネットワークエラーが発生する | Frida で SSL ピンニングを解除する/references/frida.md を参照 |
出力基準
リバースエンジニアリングの調査結果を報告する際は、必ず次の形式で出力します:
## Binary: <name>
- **Format**: ELF64 / PE32+ / DEX / Mach-O
- **Arch**: x86_64 / ARM64 / ARMv7 / MIPS
- **Stripped**: Yes/No | **PIE**: Yes/No | **NX**: Yes/No
## Key Findings
1. <function name @ offset> — <what it does>
2. ...
## Vulnerability / Behavior
- <description with evidence>
- Offset: 0x<addr>
- Triggerable via: <input vector>
## Recommended Next Steps
- [ ] <action>
デコンパイラー作業の命名規則
Ghidra/IDA/r2 で注釈を付ける際は、次の基準に従います:
Functions: verb_noun_context → decrypt_config_xor, check_license_hwid
Variables: type_purpose → buf_user_input, sz_packet, ptr_heap_chunk
Structs: ST_<name> → ST_PacketHeader, ST_LicenseData
Labels: loc_<purpose> → loc_anti_debug_fail, loc_success
スクリプトのクイックスタート
Frida のパターン全般については references/frida.md を参照してください。
GDB Python ワンライナー(関数の引数を記録)
# In GDB: source this file
import gdb
class LogArgs(gdb.Breakpoint):
def stop(self):
frame = gdb.selected_frame()
print(f"[*] {frame.name()} rdi={gdb.parse_and_eval('$rdi')} rsi={gdb.parse_and_eval('$rsi')}")
return False # don't stop, just log
LogArgs("target_function")
radare2 の一括分析
r2 -A -q -c "afl~suspicious; pdf @ sym.check_license" <binary>
Ghidra のヘッドレス分析
$GHIDRA_HOME/support/analyzeHeadless /tmp/proj MyProject \
-import <binary> -postScript PrintAST.java -scriptPath ~/ghidra_scripts
コメント
Markdown 対応