binary-analysis-patterns
バイナリコードパターンの分析
ソースコードなしでコンパイル済み実行ファイルの動作を理解します。このスキルは、逆アセンブル解析タスクのためのアセンブリ言語パターン、制御フローの認識、そして逆コンパイルのガイダンスを提供します。
スキルZIPをダウンロード
Claudeでアップロード
設定 → 機能 → スキル → スキルをアップロードへ移動
オンにして利用開始
テストする
「binary-analysis-patterns」を使用しています。 このアセンブリパターンは何をしますか? ```asm lea eax, [rax + rax*4] add eax, eax ```
期待される結果:
このパターンは値を 10 倍します。LEA 命令は rax * 5(rax + rax*4)を計算し、その後 ADD でそれを 2 倍して rax * 10 を得ます。コンパイラは、より遅い MUL 命令の代わりに、定数乗算のためにこのシフト・アンド・アッド最適化を使用します。
「binary-analysis-patterns」を使用しています。 逆アセンブルで switch 文を特定するにはどうすればよいですか?
期待される結果:
2 つのパターンを探します:(1) ジャンプテーブル - レジスタがアドレスの配列へのインデックスとして使用される(jmp [table + reg*8])、または (2) 連続比較 - 同じ変数を異なる定数と比較する複数の cmp/je チェーン。ジャンプテーブルパターンは、多くのケースを持つより大きな switch 文でより一般的です。
「binary-analysis-patterns」を使用しています。 これら 2 つのパターンの違いは何ですか? パターン A: mov eax, [rdi] パターン B: movzx eax, byte [rdi]
期待される結果:
パターン A はメモリから 4 バイトの整数(dword)を読み取り、int または uint32 型を示唆します。パターン B は 1 バイトを読み取り、それを 32 ビットにゼロ拡張するので、unsigned char または uint8 型を示唆します。movzx 変換は、演算のために大きなレジスタに昇格する必要があるブールフラグ、ASCII 文字、または小さな符号なし値を扱う場合に一般的に使用されます。
セキュリティ監査
安全All 47 static analysis findings are false positives. The detected patterns are Markdown code fence delimiters and assembly code examples in documentation. No executable code, external commands, or security risks present. This is purely educational content about binary analysis patterns.
品質スコア
作れるもの
マルウェアの逆解析
セキュリティ研究者はアセンブリパターンを使用して、ソースコードにアクセスせずにマルウェアの動作を理解し、悪意のある機能を特定し、プログラムロジックを再構築します。
レガシーコードのメンテナンス
ドキュメントなしでレガシーシステムを保守する開発者は、逆アセンブルパターンを使用してコンパイル済みバイナリを理解し、バグを修正し、古いアプリケーションに機能を追加します。
CTF チャレンジの攻略
CTF 参加者は、バイナリ実行ファイルを分析して隠されたフラグを見つけ、プログラムの流れを理解し、アセンブリパターン認識を使用して脆弱性を悪用します。
これらのプロンプトを試す
このアセンブリコードパターンが高レベルコードで何を表しているかを説明してください: ```asm xor ecx, ecx loop_start: cmp ecx, [n] jge loop_end ; ... body ... inc ecx jmp loop_start loop_end: ``` このパターンはどのようなプログラミング構造を実装していますか?
この関数を逆アセンブルしました。以下の理解を助けてください: 1. 関数シグネチャ(パラメータと戻り値の型)は何ですか? 2. どの呼び出し規約が使用されていますか(System V または Microsoft x64)? 3. この関数の全体的なロジックは何ですか? [ここにアセンブリコードを貼り付け]
このアセンブリコードは複雑なデータ構造にアクセスしています。以下を特定するのを助けてください: 1. これはどのような種類のデータ構造ですか(構造体、配列、リンクリスト)? 2. フィールドオフセットとその考えられる型は何ですか? 3. この構造は元のコードで何を表していますか? ```asm mov rdi, [struct_ptr] mov eax, [rdi] movzx eax, byte [rdi+4] mov rax, [rdi+8] ```
以下を行う Ghidra Python スクリプトが必要です: 1. 'strcpy' を呼び出すすべての関数を見つける 2. 潜在的なバッファ脆弱性を特定する 3. 発見したデータレイアウトの構造体型を作成する 各部分が何をするかの説明を付けてスクリプトを提供してください。
ベストプラクティス
- 文字列解析から始めて興味深い関数を特定する - コード内の文字列参照は、周囲のロジックの目的を明らかにすることが多い
- 興味深い API 呼び出しまたはライブラリ関数からデータフローを遡って、データの準備と検証方法を理解する
- クロス参照(xrefs)を積極的に使用する - 誰が関数を呼び出すかと、何がアクセスされるかを理解することで、文脈と目的が明らかになる
- コメントと名前変更されたシンボルで発見内容をすぐに文書化する - バイナリ解析は反復的であり、文脈を忘れてしまう
回避
- 逆コンパイラの出力が正しいと仮定すること - 逆コンパイルは、最適化、認識されていない型、または間接呼び出しのために誤解を招くコードを生成する可能性がある
- コンパイラ最適化を理解せずに最適化ビルドを解析すること - テールコール最適化(call+ret ではなく jmp)とインライン化は関数境界を不明瞭にする可能性がある
- 「興味深い」関数のみに焦点を当てること - マルウェア作成者は、退屈に見えるユーティリティ関数にロジックを隠したり、難読化技術を使用したりすることがある
- アーキテクチャ固有の呼び出し規約を無視すること - パラメータ渡しの誤識別は、完全に間違った関数シグネチャにつながる
よくある質問
このスキルは実際にバイナリファイルを解析してくれますか?
パターンでカバーされるアーキテクチャは何ですか?
System V と Microsoft x64 の呼び出し規約をどのように選択すればよいですか?
逆コンパイルされたコードが奇妙、または明らかに間違っているように見えるのはなぜですか?
これらのパターンで最も効果的に動作するツールは何ですか?
マルウェア解析にこれらのパターンを使用できますか?
開発者の詳細
作成者
sickn33ライセンス
MIT
リポジトリ
https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/binary-analysis-patterns参照
main
ファイル構成
📄 SKILL.md