web-dev-qa-db-ja.com

バイナリファイル形式のリバースエンジニアリングを支援するツール

不明なバイナリデータ形式のデコードに役立つツールは何ですか?

Hex Workshopと010 Editorの両方が構造をサポートしていることを知っています。これらは、既知の固定形式では限られた範囲で問題ありませんが、特に未知の形式では、より複雑なものでは使用が困難になります。スクリプト言語またはスクリプト可能なGUIツールのモジュールを見ていると思います。

たとえば、限られた既知の情報(おそらくマジックナンバー)からデータブロック内の構造を見つけたいと思います。構造を見つけたら、既知の長さとオフセット語に従って他の構造を見つけます。次に、これを意味のある場所で再帰的および反復的に繰り返します。

私の夢の中で、おそらくシステムに既に伝えたことに基づいて、可能なオフセットと長さを自動的に特定することさえできます!

77
Mat

ここに思い浮かぶいくつかのヒントがあります:

私の経験から、対話型スクリプト言語(私はPythonを使用しています)は大きな助けになります。バイナリストリームといくつかの単純なアルゴリズムを処理する単純なフレームワークを作成できます。その後、バイナリを取得してさまざまなことをチェックするスクリプトを作成できます。例えば:

さまざまな部分で統計分析を行います。たとえば、ランダムデータは、この部分がおそらく圧縮/暗号化されていることを示します。ゼロは、パーツ間のパディングを意味する場合があります。散乱ゼロは、整数値またはUnicode文字列などを意味する場合があります。さまざまなオフセットを見つけてください。バイナリの一部を2バイトまたは4バイトの整数または浮動小数点数に変換し、それらを印刷して、意味があるかどうかを確認してください。データ内の繰り返し部分または非常に類似した部分を検索する関数を作成すると、ヘッダーを簡単に見つけることができます。

できるだけ多くの文字列を見つけて、異なるエンコーディング(c文字列、Pascal文字列、utf8/16など)を試してください。そのための優れたツールがいくつかあります(Hex Workshopにはそのようなツールがあると思います)。文字列はあなたに多くを伝えることができます。

がんばろう!

21
Untrots

Mac OS Xには、iBoredよりも優れた新しい素晴らしいツール、Synaliyze Itがあります! ( http://www.synalysis.net/

iBored と比較して、ブロックされていないファイルに適していますが、スクリプト可能性(Luaを使用)を含む構造を完全に制御できます。また、構造の視覚化も改善されています。

15

Tupni;私の知る限り、Microsoft Researchから直接入手することはできませんが、同様のプログラム(おそらくオープンソース)を作成したい人にとって興味深いこのツールに関する論文があります。

Tupni:入力形式の自動リバースエンジニアリング@ ACMデジタルライブラリ

要約

最近の研究により、プロトコルまたはファイル形式の仕様の自動リバースエンジニアリングの重要性が確立されました。ただし、以前のツールでリバースエンジニアリングされた形式では、セキュリティアプリケーションにとって重要な重要な情報が欠落しています。このペーパーでは、レコードシーケンス、レコードタイプ、入力制約などの豊富な情報を使用して入力形式をリバースエンジニアリングできるTupniを紹介します。 Tupniは、複数の入力にわたって形式仕様を一般化できます。 Tupniのプロトタイプを実装し、5つのファイル形式(WMF、BMP、JPG、PNG、TIF)と5つのネットワークプロトコル(DNS、RPC、TFTP、HTTP、FTP)の10種類の形式で評価しました。 Tupniは、テスト入力のすべてのレコードシーケンスを識別しました。また、複数のWMFファイルを集約することで、TupniがWMFのより完全な形式仕様を導出できることも示しています。さらに、ゼロデイ脆弱性シグネチャ生成に提供する豊富な情報を使用してTupniの有用性を実証しますが、これは以前のリバースエンジニアリングツールでは不可能でした。

10
MaD70

私が最近リリースした自分のツール「iBored」は、この機能の一部を実行できます。ファイルシステムフォーマット(UDF、HFS、ISO9660、FATなど)を視覚化およびデバッグするツールを作成し、検索、コピー、さらには構造とテンプレートのサポートを実装しました。構造のサポートは非​​常に簡単で、テンプレートは構造を動的に識別する方法です。

全体がVisual BASIC方言でプログラム可能であるため、値のテスト、特定のブロックの読み取りなどが可能です。

このツールは無料で、すべてのプラットフォーム(Win、Mac、Linux)で動作しますが、共有するために公開したばかりの個人用ツールであるため、あまり文書化されていません。

ただし、試してみて、フィードバックを送りたい場合は、さらに便利な機能を追加できます。

私もそれをオープンソースにしたいと思いますが、 REALbasic で書かれているので、多くの人々がそのようなプロジェクトに参加することを疑います。

リンク: iBoredホームページ

7

私はまだ、A.X.E。というAdvanced Hex Editorという古い16進エディターを時々使用しています。 Googleがまだあなたのためにそれを見つけることができるはずですが、それは今インターネットからほとんど消えたようです。私が知っている最後のバージョンはバージョン3.4でしたが、実際には個人用の無料バージョン2.1のみを使用しました。

その最も興味深い機能、およびさまざまなゲームおよびグラフィックス形式を解読するために私が最も使用した機能は、そのグラフィカルビューモードです。基本的には、各バイトが色分けされたピクセルに変換されたファイルが表示されます。そして、そのように単純に聞こえますが、それは私のリバースエンジニアリングの試みを非常に簡単にしました。

しかし、目でそれを行うことは自動分析を行うこととは正反対であり、グラフィカルモードはオフセットを見つけて追跡するためにあまり使用されません...

後のバージョンには、ニーズに合った機能(スクリプト、規則性Finder、文法ジェネレーター)がいくつかありますが、それらがどれほど優れているかはわかりません。

6
mercator

Hachoir があります。これはPythonバイナリ形式をフィールドに解析し、フィールドを参照するためのライブラリです。一般的な形式用のパーサーがたくさんありますが、また、ファイル用に独自のパーサーを作成します(たとえば、バイナリファイルの読み取りまたは書き込みを行うコードを操作するときは、通常、最初にHachoirパーサーを作成してデバッグを支援します)。しかし、プロジェクトは今のところほとんどアクティブではありません。

3
oliver

私のプロジェクト icebuddha.com は、python=を使用してブラウザの形式を記述することでこれをサポートします。

1
0xdabbad00

同様の質問に対する私の答えの切り貼り:

1つのツールは WinOLS です。これは、車両エンジン管理コンピューターのバイナリイメージ(ほとんどはルックアップテーブルの数値データ)を解釈および編集するために設計されています。さまざまなエンディアン形式(PDPではないが)をサポートし、さまざまな幅とオフセットでデータを表示し、配列領域(マップ)を定義し、あらゆる種類のスケーリングおよびオフセットオプションで2Dまたは3Dで視覚化します。また、ヒューリスティック/統計的な自動マップファインダーもあり、これが動作する可能性があります。

これは商用ツールですが、無料のデモでは、バイナリへの変更を保存し、必要のないエンジン管理機能を使用する以外はすべて実行できます。

0
blueshift