Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/quosecgmbh/grap
静的分析リバースエンジニアリングデバッガマルウェア分析バイナリ解析
GitHubquosecgmbh/grap

grap

Capstoneベースの逆アセンブラを使用して、ユーザー定義のグラフパターンをバイナリの制御フローグラフに対して定義およびマッチングし、CLI、Pythonバインディング、IDAプラグインをサポートします。

リポジトリを見る
155114年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

grap: バイナリ内のグラフパターンを定義およびマッチング

https://github.com/QuoSecGmbH/grap

grapは、パターンとバイナリファイルを受け取り、Capstoneベースの逆アセンブラを使用してバイナリから制御フローグラフを取得し、パターンとのマッチングを行います。

パターンはユーザー定義のグラフで、命令条件(「opcodeがxorでarg1がeax」)や繰り返し条件(3つの同一命令、基本ブロックなど)を持ちます。

grapは、逆アセンブラとPythonバインディングを備えたスタンドアロンツールとして、またIDAとリバースエンジニアが行った逆アセンブリを活用するIDAプラグインとして利用可能です。

サポート:

  • ファイル: PE、ELF、およびrawバイナリの逆アセンブル。IDA内ではさらに多くのファイルが動作可能です。
  • アーキテクチャ: x86およびx86_64

クイックパターンマッチ:

クイックパターンマッチ

完全パターンマッチ:

完全パターンマッチ

複数ファイルでのマッチング:

複数ファイルでのマッチング

IDAから対話的にパターンを作成:

IDAから直接パターンを作成およびマッチング

インストール

このドキュメントでは、Linuxディストリビューション上でgrapをビルドおよびインストールする方法について説明します。

以下の資料も参照してください:

  • WINDOWS.md: Windowsへのgrapのインストール
  • IDA.md: IDAプラグインのインストールと使用手順

要件

コンパイラ(build-essential)に加えて、以下の依存関係をインストールする必要があります:

  • cmake
  • bison
  • flex
  • libboost-regex-dev
  • libboost-system-dev
  • libboost-filesystem-dev
  • libseccomp-dev
  • python3-dev
  • python3-pefile
  • python3-pyelftools
  • python3-capstone
  • swig(バージョン3以降が必要)

したがって、Ubuntu / Debianでは次のコマンドが機能するはずです:

root@kitploit:~
sudo apt-get install build-essential cmake bison flex libboost-regex-dev libboost-system-dev libboost-filesystem-dev libseccomp-dev python3-dev python3-pefile python3-pyelftools python3-capstone swig

これらは最新のUbuntu LTS(18.04.3)でテストされていることに注意してください。 パッケージはディストリビューションによって異なる場合があります。

ビルドとインストール

以下のコマンドでプロジェクトをビルドおよびインストールします:

  • mkdir build; cd build/ 専用ディレクトリにプロジェクトをビルドすることをお勧めします
  • cmake ../src/; make でcmakeとmakeを使用してビルド
  • sudo make install でgrapを/usr/local/bin/にインストール

デフォルトのPythonバージョンがpython2の場合、SWIGがpython3を見つけられないことがあります。これはデフォルトをpython3に切り替えることで解決できます。 例えばUbuntuでは:

root@kitploit:~
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

使い方

ツールは次のコマンドで起動できます:

$ grap [options] pattern test_paths

以下はサポートされているオプションの例です:

  • grap -h: サポートされているオプションの説明

文字列からパターンを推測させることもできます。サポートされるオプションは限られていますが、プロトタイピングに便利です:

  • grap "opcode is xor and arg1 contains '['" (test.exe): メモリ書き込みを伴うxorを検索
  • grap -v "sub->xor->sub" (test.exe): -vで推測されたパターンのパスを出力

バイナリの逆アセンブル方法を選択:

  • grap -od (pattern.grapp) samples/*: マッチングを試みずにsamples/フォルダ内のファイルを逆アセンブル
  • grap -f (pattern.grapp) (test.exe): バイナリを強制的に再逆アセンブルし、pattern.grappとマッチング
  • grap --raw (pattern.grapp) (test.bin): rawファイルの逆アセンブル(64ビットバイナリの場合は--raw-64を使用)

出力の冗長性を制御:

  • grap -q -sa (pattern.grapp) (samples/*.grapcfg): 逆アセンブルされたファイルをマッチングし、マッチしたものとマッチしなかったものを1行ずつ表示
  • grap -m (pattern.grapp) (test.grapcfg): マッチしたすべてのノードを表示

逆アセンブルされたファイル(.grapcfg)の出力先を選択; 複数のファイルを複数のパターンとマッチング:

  • grap patterns/basic_block_loop.grapp -o ls.grapcfg /bin/ls: lsをls.grapcfgに逆アセンブルし、基本ブロックループを検索
  • grap (pattern1.grapp) -p (pattern2.grapp) (test.exe): 複数のパターンファイルとマッチング
  • grap -r -q patterns/ /bin/ -o /tmp/: /bin/のすべてのファイルを/tmp/に逆アセンブルし、patterns/のすべての.grappパターンとマッチング(再帰オプション-rは/bin/に適用され、patterns/には適用されません)

パターン例

次のパターンは、Backspaceサンプルに見られるxorとそれに続くsubからなる復号ループを検出します:

root@kitploit:~
digraph decryption_md5_4ee00c46da143ba70f7e6270960823be {
A [cond=true, repeat=3]
B [cond="opcode is xor and arg2 is 0x11"]
C [cond="opcode is sub and arg2 is 0x25"]
D [cond=true, repeat=3]
E [cond="opcode beginswith j and nchildren == 2"]

A -> B
B -> C
C -> D
D -> E
E -> A [childnumber=2]
}

パターンファイルには複数のパターングラフを含めることができます。

追加のパターン例は2つのディレクトリにあります:

  • patterns/には、ショートループの検出や基本ブロック上のループの検出など、任意のバイナリで有用ないくつかのパターンが含まれています。
  • examples/には、Backspaceマルウェアに対して使用されるパターンが含まれています(バイナリサンプルの入手についてはexamples/backspace_samples.mdを参照)。

チュートリアルとその他の例

マルウェアサンプルについて:

  • マルウェアサンプルのgrapによるナビゲーション(CLI、IDA): https://yaps8.github.io/blog/grap_qakbot_navigation
  • 関数解析と復号の自動化(Pythonバインディング): https://yaps8.github.io/blog/grap_qakbot_strings

Pythonバインディングの使用法:

  • バインディングを使用してBackspaceサンプルを解析するPythonファイル: examples/analyze_backspace.py
  • IDApythonスクリプティングの例はIDAプラグイン内に統合されています。こちらで確認できます: https://yaps8.github.io/grap/html/scripting_css.html

ドキュメント

詳細なドキュメントはdoc/フォルダにあります:

  • doc/COMPILE_OPTIONS.md
  • doc/DEBUG.md
  • doc/TESTS.md
  • doc/syntax_highlighting.md

パターンとテストグラフの構文は、リリースセクション内のファイルgrap_graphs.pdfに詳細が記載されています。

ライセンス

grapはMITライセンスの下でライセンスされています。完全なライセンステキストはLICENSEにあります。

ツールをダウンロード