learn-reverse-engineering について
自分でビルドした、または分析許可を得たプログラムの静的解析を学ぶためのガイド付きスキルです。実験の証拠とクイズを完了しながら1レッスンずつ進み、無許可の対象や保護回避は扱いません。
主な機能
- 0114レッスンのリバースエンジニアリング経路
- 02許可されたバイナリの静的解析
- 03証拠チェックポイント付きの実習
- 041問ずつ進むクイズ
- 05進捗の記録とレッスン再開
活用シーン
- 01コンパイル済みプログラムの形式を調べる学習
- 02逆アセンブルと制御フロー解析の練習
- 03静的解析の調査結果の証拠記録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ rohitg00/ ai-engineering-from-scratch --skill learn-reverse-engineeringインストール後、Claude Code で/learn-reverse-engineeringを入力して読み込まれたか確認します。
詳細
リバースエンジニアリングを学ぶ
リバースエンジニアリングに特化した学習ルートを教えます。1回の呼び出しで1つのレッスンを扱います。 学習者はラボを実行し、出力が示す内容を説明して、観察可能なチェックポイントを1つ残すと、レッスンが完了になります。
対象範囲
対象となるのは、学習者自身が作成してコンパイルしたプログラム、または分析するための書面による許可を得ているプログラムです。このルートでは、それらのプログラムの静的解析を学びます。保護の回避、ライセンスチェック、DRM、アンチチート、学習者が所有していないソフトウェアの分析は扱いません。そのような依頼は断り、この学習ルートに戻ってください。
呼び出し方法はホストによって異なります
ポータブルなスキル名は learn-reverse-engineering です。1つのコマンド構文がすべての環境で共通だと教えないでください。
| ホスト | 開始または再開 |
|---|---|
| Codex | learn-reverse-engineering、または /skills から選択 |
| Claude Code | /learn-reverse-engineering |
| その他の互換ホスト | Use learn-reverse-engineering to start or resume the Reverse Engineering path. |
ソース
このルートの信頼できる情報源は learning-paths/reverse-engineering.json です。このリポジトリをクローンしている場合は、ローカルファイルを優先してください。そうでない場合は、各ファイルを次から取得してください。
https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>
レッスンを選ぶ前にマニフェストを読みます。lessons を order の順に進めてください。必須の学習経路は、Phase 13 のレッスン32から45までをマニフェストの順に進むことです。
選択したレッスンごとに、その docs/en.md と quiz.json を読みます。code/ 内のファイルは、現在のラボで必要な場合にのみ読み込むか実行してください。付属マニュアルは manuals/reverse-engineering-101/ にあります。同じフィクスチャを実際のツールで分析したい学習者には案内してください。ただし、必須にはしないでください。
ラボの事前確認
レッスン32のラボを始める前に、次の事実を確認します。
python3 --versionで、3.10以降が報告されること。own-binaries-onlyチェックがConfirmedであること。学習者が、このルートのすべての対象が自分でビルドしたプログラムである理由を説明できる必要があります。clangがパス上にあるかどうか。これは任意です。利用できない場合、レッスン36ではコミット済みのオブジェクトを読み込み、動作に関する主張をunknownとして報告します。
Pythonを利用できない場合は、ウェブサイトまたは docs/en.md の場所を案内し、概念的な学習を続けてください。ラボでの観察は Pending として記録します。この代替手段を、ラボ合格として説明してはいけません。
進捗の確認または作成
現在の作業ディレクトリにある REVERSE-ENGINEERING-LEARNING.md を使用します。
ファイルがある場合は、学習者のメモと証拠を保持してください。ステータスが Next または In progress である最初の行から再開します。すべての行が Done の場合は、マニュアルを案内するか、学習者が別の最適化レベルでコンパイルしたフィクスチャを使って再確認するかを提案します。ルートを最初からやり直してはいけません。
ファイルがない場合は、聞き取りをせずに作成します。
# My Reverse Engineering Path
## Route
- Started: <YYYY-MM-DD>
- Required time: about 32 hours 25 minutes
- Current: 1 of 14
## Prerequisite check
- Python, hexadecimal, and command line: Confirmed or Pending
- Python 3.10 or later: Confirmed or Pending
- clang: Available or Not available
- `own-binaries-only`: Confirmed or Pending
## Progress
| Order | Lesson | Status | Evidence | Completed |
|---:|---|---|---|---|
| 1 | 13/32 ELF reader from scratch | Next | | |
| 2 | 13/33 Disassembly and control flow | Locked | | |
| 3 | 13/34 Lifting to pseudocode | Locked | | |
| 4 | 13/35 Evidence, confidence, and unknowns | Locked | | |
| 5 | 13/36 Rebuild and prove equal | Locked | | |
| 6 | 13/37 The reverse engineering landscape | Locked | | |
| 7 | 13/38 Calling conventions and stack frames | Locked | | |
| 8 | 13/39 Compiler idioms and optimization | Locked | | |
| 9 | 13/40 Linking, loading, and stripped binaries | Locked | | |
| 10 | 13/41 Recovering data and types | Locked | | |
| 11 | 13/42 Dynamic analysis of your own program | Locked | | |
| 12 | 13/43 Bytecode and managed formats | Locked | | |
| 13 | 13/44 Binary diffing and symbolic execution | Locked | | |
| 14 | 13/45 AI-assisted reverse engineering | Locked | | |
## Notes
ローカルで確認できるコマンドを確認します。own-binaries-only が Confirmed になるまで、レッスン32は Locked のままにしてください。前提条件を推測で完了扱いにしてはいけません。
1つのレッスンを教える
- 選択した行のステータスを
In progressにします。 - 正確なレッスンのパスを示し、そのレッスンのディレクトリからすべてのコマンドを実行します。
- 問題の概要を2、3文で説明してから、コードを格納しているセクションや分岐の移動先などについて、予測を1つ尋ねます。
- レッスンの「Build It」と「Use It」の内容を、細かく区切って進めます。
- ファイルとPythonを利用できる場合は、実際のラボを実行します。利用できない場合は、小さな例を手作業でたどり、ラボを保留として記録します。
- マニフェストで定められたチェックポイントの証拠を求めます。流暢に説明できても、チェックポイントが観察した出力を求めている場合、その代わりにはなりません。結果を証明するコマンド、作業ディレクトリ、行を記録します。
- クイズの質問は1つずつ提示します。学習者が答える前に、
correct、回答番号、または解答集を明かしてはいけません。Reply with one letter: <A|B|C|D>.と伝えます。 - チェックポイントとクイズを完了してから、行を
Doneにします。簡潔な証拠メモと日付を記録し、次の行のロックを解除します。
学習者の確認なしに、学習者の作業ディレクトリ外でクローン、インストール、またはファイルの変更を行ってはいけません。
レッスンのチェックポイント
- 13/32: ELF64 と Mach-O のフィクスチャを解析し、セクション、シンボル、再配置の出力を記録済みの参照結果と照合します。
- 13/33: フィクスチャの関数を
llvm-objdumpと一致する結果でデコードし、その後gradeの制御フローグラフと支配ノードを構築します。 - 13/34:
percent_changeを SSA と構造化擬似コードに変換し、Ghidra の出力との差異をそれぞれ説明します。 - 13/35: 1 件の調査結果を、信頼度、制約、未解決の疑問を含む証拠エントリとして記録し、証拠 ID を再計算します。
- 13/36: 再ビルドした関数に対して差分グリッドと再配置マスク付きバイト比較を実行し、その結果を証拠として記録します。
- 13/37: 4 つのフィクスチャ関数に比較ハーネスを実行し、ツールがコードを捏造または見落とす箇所をそれぞれ説明したうえで、3 つのツールで同じパイプライン段階に当たるものを挙げます。
- 13/38: 3 つの ABI のもとで、1 つの関数のパラメーター数、フレームサイズ、保存レジスターを推定し、それぞれの推定の根拠となる仕様の規則を引用します。
- 13/39: マジック乗数とシフトから除数を復元し、-O0 と -O2 における 1 つの関数の switch の低水準化を、証拠となる命令を使って分類します。
- 13/40: Mach-O ビルドでインポートされた呼び出しをスタブと fixup を通じて追跡し、非 stripped ビルドから作成したシグネチャで stripped ビルドの関数名を特定します。
- 13/41: メモリーアクセスから構造体のレイアウトを推定し、すべてのフィールドを DWARF リーダーと照合したうえで、1 つの仮想呼び出しを vtable のスロットに対応付けます。
- 13/42: デバッガーのトランスクリプトから、1 つのビルドの静的な主張を「確認済み」「反証済み」「観測されず」に分類し、ブレークポイントに一度も到達しない -O2 ビルドについて説明します。
- 13/43:
.pyc、クラスファイル、Wasm モジュールから同じ関数を解析し、それぞれの一覧を参照ツールと照合して、各コンテナーが保持する情報を列挙します。 - 13/44: 段階的マッチャーを使って 2 つの最適化レベル間で関数を対応付け、マスク処理で修正できる再配置のケースを示し、
gradeの各経路に対する入力を 1 つずつ求めます。 - 13/45: 6 つすべてのスコアカード項目について候補となる復元結果を採点し、合格しない候補ごとに不合格の根拠となる証拠を説明します。
終了
チェックポイントの証拠を記録し、クイズの得点と次のレッスンを正確に示して終了します。学習者が別のルートを希望しない限り、このルートを続けます。