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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
obfuscation_detection — 難読化されたコードやその他の興味深いコード構造を識別するBinary Ninjaプラグイン | Kitploit
ツール/GitHubGitHub/mrphrazer/obfuscation_detection
静的分析リバースエンジニアリングマルウェア分析バイナリ解析ファームウェア解析
GitHubmrphrazer/obfuscation_detection

obfuscation_detection

難読化されたコードやその他の興味深いコード構造を識別するBinary Ninjaプラグイン

リポジトリを見る
672743ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

難読化検出 (v2.4)

著者: Tim Blazytko

難読化されたコードやその他の興味深いコード構造を自動的に検出します

説明:

_難読化検出_は、バイナリ内の難読化されたコードや興味深いコード構造(例:ステートマシン)を検出するBinary Ninjaプラグインです。このプラグインは、リバースエンジニアリング中に詳細な調査に値するコード位置を特定することで、解析を容易にします。

さまざまなヒューリスティックに基づいて、プラグインは複雑または一般的でないコード構造を含む関数を特定します。そのようなコード構造は、以下のようなものを実装している可能性があります。

  • 難読化されたコード
  • ステートマシンとプロトコル
  • C&Cサーバー通信
  • 文字列復号ルーチン
  • 暗号アルゴリズム

以下のブログ記事では、基礎となるヒューリスティックの詳細とそのユースケースを説明しています。

  • 制御フロー平坦化の自動検出
  • 難読化コードの自動検出
  • 一般的でないコードを検出するための統計分析
  • バイナリ内のAPI関数の識別

いくつかのユースケース例は例にあります。さらに、REconトーク「Unveiling Secrets in Binaries using Code Detection Strategies」でいくつかのユースケースを紹介しています。スライドはこちらから、録画はこちらからご覧いただけます。

コア機能

  • 大規模なバイナリ内の興味深いコード構造を識別
  • Binary Ninjaのグラフビューで位置ずれした命令を強調表示
  • 効率的でアーキテクチャに依存しない実装
  • バックグラウンドタスクとして実行
  • 識別された関数に対応するヒューリスティックまたはユーティリティを自動的にタグ付け
  • UIおよびヘッドレスモードで使用可能

インストール

このツールはBinary Ninjaのプラグインマネージャーを使用してインストールできます。

ヘッドレスバージョンでは、以下の手順に従ってください。

root@kitploit:~
git clone https://github.com/mrphrazer/obfuscation_detection.git
cd obfuscation_detection

# obfuscation_detectionをインストール
pip install .

使用方法

プラグインはユーザーインターフェースおよびヘッドレスモードで使用できます。

ユーザーインターフェース

個別のヒューリスティックを実行するにはPlugins -> Obfuscation Detectionを、個別のユーティリティ検出を実行するにはPlugins -> Obfuscation Detection -> Utilsを選択します。Plugins -> Obfuscation Detection -> Allコマンドは、すべてのヒューリスティックとすべてのユーティリティを同時に実行します。

プラグインメニュー

結果はログウィンドウに表示されます。

Binary Ninjaログ

識別された関数アドレスをクリックすると、Binary Ninjaが選択した関数に移動します。

ヘッドレス

ヘッドレスモードでプラグインを使用するには、scripts/detect_obfuscation.pyを実行します。

root@kitploit:~
$ python3 scripts/detect_obfuscation.py <binary>

これにより、すべてのヒューリスティックとすべてのユーティリティが実行されます。機械可読な出力を得るには、--jsonを指定します。

root@kitploit:~
$ python3 scripts/detect_obfuscation.py --json <binary>

JSONペイロードには、すべての結果がdetectionsキーの下に含まれています。各検出には自動化用の安定したidと、人間が読めるnameがあります。タグ付けされた各関数の発見項目には、Binary Ninjaプラグインで使用されるタグタイプと説明が含まれています。

ヘッドレスモードでステートマシンヒューリスティックのみを実行するには、scripts/detect_state_machine.pyを使用します。

root@kitploit:~
$ python3 scripts/detect_state_machine.py [--json] <binary>

検出ヒューリスティック

プラグインはさまざまなコード構造を検出するための複数の検出ヒューリスティックを実装しています。以下では、個々のヒューリスティックについて簡単に説明し、その使用方法を解説します。

大きな基本ブロック

大きな基本ブロックヒューリスティックは、基本ブロックあたりの平均命令数が最も多い関数の上位10%を識別します。これにより、以下のようなものを検出できます。

  • アンロールされたコード
  • 暗号実装
  • 初期化ルーチン
  • 算術難読化 / Mixed Boolean-Arithmetic

複雑な関数

複雑な関数ヒューリスティックは、制御フローグラフが最も複雑な関数(サイクロマティック複雑度に基づく)の上位10%を識別します。これにより、以下のようなものを識別できます。

  • 複雑なディスパッチルーチンとプロトコル
  • ステートマシン
  • 不透明述語で難読化された関数

ステートマシン

ステートマシンヒューリスティックは、グラフ理論の特性を使用してステートマシンを実装する関数を識別します。通常、そのようなステートマシンはループ内でディスパッチされるswitch文として表現できます。このヒューリスティックにより、以下のものを識別できます。

  • ネットワークプロトコルのディスパッチ
  • ファイル解析ロジック
  • C&Cサーバー通信 / コマンドディスパッチ
  • 制御フロー平坦化

一般的でない命令シーケンス

一般的でない命令シーケンスヒューリスティックは、統計分析を実行して、コードパターンが事前に計算されたベースラインから逸脱している関数の上位10%を識別します。これにより、以下のようなものを識別できます。

  • 暗号実装
  • 浮動小数点演算の多用
  • 算術難読化 / Mixed Boolean-Arithmetic
  • 一般的な難読化パターン

重複命令

重複命令ヒューリスティックは、位置ずれした命令(命令バイトが2つの異なる命令で共有されている)を持つ関数を識別します。このヒューリスティックは以下のものを識別します。

  • 破損した逆アセンブル(例:コードとしてマークされたデータ)
  • 他の命令にジャンプする不透明述語

このヒューリスティックをBinary Ninjaのユーザーインターフェースで使用すると、重複命令がグラフビューで強調表示されます。

最も呼び出される関数

最も呼び出される関数ヒューリスティックは、異なる関数からの呼び出し数が最も多い関数の上位10%を識別します。これにより、以下のようなものを識別できます。

  • 文字列復号ルーチン
  • 静的リンクされたバイナリ内のライブラリ関数

ループ頻度

このヒューリスティックは、ループ数が多い関数を識別します。このような関数は以下のようなものを実装している可能性があります。

  • 構造化データ形式の複雑な解析ロジック
  • 集中的なアルゴリズム計算

このヒューリスティックは、潜在的なパフォーマンスのボトルネックを特定するのにも役立ちます。

既約ループ

このヒューリスティックは、まれで複雑なループ構造を持つ関数を識別します。これは通常、以下のようなものを示唆します。

  • 積極的なコンパイラ最適化
  • 手書きのアセンブリ
  • goto文の使用
  • 難読化されたコード

XOR復号ループ

このヒューリスティックは、ループ内で定数によるXOR演算を実行する関数を識別します。これにより、以下のようなものを識別できます。

  • 文字列復号ルーチン
  • コード復号スタブ
  • 暗号実装

複雑な算術式

このヒューリスティックは、式に複数の算術演算と1つのブール演算が同時に含まれている関数を識別します。これにより、以下のようなものを識別できます。

  • Mixed Boolean-Arithmetic難読化
  • 初期化ルーチン
  • 暗号実装

重複サブグラフ

このヒューリスティックは、反復的なコンテキストハッシュ手法を使用して、各関数の制御フローグラフ内で繰り返されるマルチブロック構造を検出します。各ブロックのオペコードシグネチャとその後続ブロックのシグネチャを比較することで、単一関数内で複製またはほぼ複製されたサブグラフを識別します。これにより、以下のようなものを特定できます。

  • 小規模なステートマシンやディスパッチャブロックなど、複数回複製された難読化スタブ
  • コンパイラ最適化によって導入されたアンロールまたはインライン化されたループ
  • 範囲分割や決定木などのマルチウェイ分岐ロジック
  • 繰り返される暗号化またはチェックサムのスタブ

ユーティリティ

プラグインには、興味深い関数やコード領域を特定するための、より限定されたユーティリティも含まれています。これらはUtilsサブメニューから利用できます。Allコマンドは、これらをより広範なヒューリスティックと一緒に実行します。

エントリ関数

このヘルパーは、既知の呼び出し元がない関数を識別します。これらの関数は以下のようなものである可能性があります。

  • バイナリ内のエントリポイント
  • ディスアセンブラが呼び出し階層を復元できなかった間接ジャンプ先

リーフ関数

このヘルパーは、他の関数を呼び出さない関数を識別します。この種の関数は、例えば以下のようなものである可能性があります。

  • コンパイラによってアウトライン化され、さまざまなコード位置で利用される機能を実装する関数
  • 他の関数へのトランポリン
  • コード難読化スキームの一部(例:制御フロー難読化のためのアウトライン化された計算)

再帰関数

このヘルパーは、再帰関数(直接的または間接的に自身を呼び出す関数)を識別します。再帰関数は以下のようなものを示している可能性があります。

  • 木やグラフの走査などのアルゴリズム実装
  • 静的解析を複雑にするために設計された難読化コード
  • 数学的アルゴリズムや複雑な解析ルーチンの実装
  • 深い再帰によるスタックオーバーフローの脆弱性の可能性

セクションエントロピー

このヘルパーは、各セクションのエントロピーを評価します。エントロピーは0から8の範囲の値を持つ統計的なランダム性の尺度です。エントロピーが8に近いセクションは、ランダム性の高さを示し、以下のようなものを示唆します。

  • パックまたは圧縮されたコード
  • 暗号化されたデータまたはコード
  • ランダムデータ

RC4

このヘルパーは、RC4の鍵スケジューリングアルゴリズム(KSA)および疑似乱数生成アルゴリズム(PRGA)に一般的に関連するヒューリスティックマーカーを使用して、潜在的なRC4アルゴリズムの実装を検出します。RC4はマルウェアで以下のような目的で広く使用されています。

  • 文字列やその他のデータペイロードの復号
  • コマンド&コントロール(C&C)通信の難読化

お問い合わせ

詳細については、@mr_phrazerまでお問い合わせください。

ツールをダウンロード