コンテンツにスキップ

Relyze - インタラクティブなバイナリディスアセンブラー & Diff チートシート

Relyze - インタラクティブなバイナリディスアセンブラー & Diff チートシート

Relyze は商用のインタラクティブなディスアセンブラー、デコンパイラー、バイナリ比較プラットフォーム — ネイティブソフトウェア向け、x86、x64、ARM32、ARM64 をサポート。PE/ELF バイナリを関数と制御フロー図に分析し、高レベルの疑似コードを復旧するデコンパイラーを提供、2つのバイナリバージョンを比較するための強力なバイナリ diff エンジンを含む — パッチ分析およびマルウェアバリアントの追跡に貴重。Ruby プラグイン/スクリプティングフレームワークで拡張可能。無料の非商用版が利用可能。

インストール

ステップ注釈
ダウンロード公式サイトからインストーラーを取得(Windows)
エディション無料(非商用)および Professional
最初の実行デコンパイラーおよび分析オプションを設定
プラグインRuby スクリプトがすぐに利用可能

分析ワークフロー

アクション説明
ファイルを開くPE または ELF バイナリを関数/CFG に分析
Functions ビュー検出された関数を参照
グラフビュー選択された関数の制御フローグラフ
デコンパイラー関数の C に似た疑似コードを復旧
文字列参照された文字列とそれらの xrefs をリスト
Imports/Exportsimport/export テーブルを検査
相互参照関数/データが使用される場所にジャンプ

ナビゲーションエッセンシャル

タスク方法
シンボルの名前変更選択して名前変更(xrefs に伝播)
コメント命令/関数に注釈を付ける
呼び出しをフォロー呼び出しターゲットをダブルクリック
アドレスに移動アドレスナビゲーションボックス
ビューを切り替えディスアセンブリ / グラフ / デコンパイラーを切り替え

バイナリ比較

Relyze の diff エンジンは2つのバイナリ間で関数をマッチングし、同一、変更、追加、削除として分類 — セキュリティパッチまたはマルウェアサンプルの比較分析の中核ワークフロー。

タスク方法
diff を開始バイナリ A を開く、次にバイナリ B に対して比較
マッチングされた関数2つのビルド全体でペアリングされた関数を確認
変更された関数コードが異なる関数に焦点を当てる
追加/削除パッチが導入または削除したものを参照
注釈をポート名前/コメントをあるビルドから次へキャリー

パッチ分析パターン:パッチ前後のバイナリを diff、関数が変更された小さなセットに焦点、ベンダーが何を修正したかを研究して基礎にある脆弱性を理解。

Ruby スクリプティング

Relyze はその分析モデルを Ruby に公開して自動化。

# 概念:関数を反復して大きなものにフラグを付ける
model = Relyze::Engine.instance.active_model
model.functions.each do |func|
  if func.instructions.length > 500
    puts "Large function at #{func.address.to_s(16)}"
  end
end
使用
一括名前変更関数全体に命名ヒューリスティックを適用
カスタム分析パターンを検出(暗号定数、ガジェット)
データをエクスポート関数/文字列をファイルにダンプ
Diff を自動化多くのサンプル全体で比較をスクリプト化

一般的なワークフロー

ゴールアプローチ
セキュリティパッチを理解パッチ前後のバイナリを diff → 変更された関数を研究
ネイティブサンプルを分類文字列 + imports → 疑わしい関数をデコンパイル
マルウェアバリアントを追跡新しいサンプルを既知のファミリーメンバーに対して diff
ロジックを復旧デコンパイラーを使用 + 名前変更/コメントして意図を再構築

Relyze vs その他のディスアセンブラー

側面RelyzeIDA ProGhidraBinary Ninja
デコンパイラーはいはい(Hex-Rays)はいはい
バイナリ diff組み込みアドオン(BinDiff)プラグインプラグイン
スクリプティングRubyPython/IDCJava/PythonPython
コスト無料 + Pro商用無料商用

リソース