77


57

不明なバイナリデータフォーマットのデコードに役立つツールは何ですか?

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

例えば、私は、限られた既知の情報、おそらく魔法の数字から、データブロック内の構造を見つけられるようにしたいと思います。 構造を見つけたら、既知の長さに従って単語をずらして他の構造を見つけます。 それからそれが理にかなっているところでこれを再帰的そして反復的に繰り返しなさい。

私の夢の中では、おそらく私がすでにシステムに言ったことに基づいて、可能なオフセットと長さを自動的に識別さえします!

8 Answer


20


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

私の経験からすると、対話型のスクリプト言語(私はPythonを使用しています)は非常に役に立ちます。 バイナリストリームといくつかの簡単なアルゴリズムを扱うための簡単なフレームワークを書くことができます。 それからあなたはあなたのバイナリを取りそして様々なことをチェックするスクリプトを書くことができます。 例えば:

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

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

がんばろう!


15


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

http://apps.tempel.org/iBored/[iBored]と比較すると、ブロック化されていないファイルに適していると同時に、スクリプト可能性(Luaを含む)などの構造を完全に制御できます。 そしてそれも構造をより良く視覚化します。


9


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

http://research.microsoft.com/apps/pubs/default.aspx?id=101326 [Tupni:入力形式の自動リバースエンジニアリング](http://portal.acm.org/citation.cfm?id=1455820 [ @ ACMデジタルライブラリー])

_ _ 抽象

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


7


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

全体がVisual BASICの方言でプログラム可能で、値をテストしたり、特定のブロックを読んだりすることができます。

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

あなたがそれを試してみたい、そしてフィードバックを与えたいのであれば、私はもっと便利な機能を追加するかもしれません。

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


6


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

その最も興味深い機能、そして私が様々なゲームやグラフィックフォーマットを解読するために私が最も利用したものは、そのグラフィカルビューモードです。 これは基本的に、各バイトが色分けされたピクセルに変換されたファイルを示しているだけです。 そしてそれが簡単であるように、それは私のリバースエンジニアリングの試みを時にはずっと簡単にしました。

私は目で見てそれをすることは自動分析をすることの全く反対であると思います、そして、グラフィカルモードはオフセットを見つけてそれに従うためにあまり役に立ちません…​

後者のバージョンはあなたのニーズに合うように思えるいくつかの機能を持っています(スクリプト、規則性ファインダー、文法ジェネレータ)、しかし私はそれらがどれほど良いかわかりません。


3


https://github.com/vstinner/hachoir3[Hachoir]があります。これは、任意のバイナリ形式をフィールドに解析してからフィールドを参照するためのPythonライブラリです。 それは一般的なフォーマットのためのたくさんのパーサーを持っています、しかしあなたはあなたのファイルのために独自のパーサーを書くこともできます(例えば。 バイナリファイルを読み書きするコードを扱うとき、私は通常デバッグ補助をするために最初にHachoirパーサーを書く。 しかし、プロジェクトは現在のところかなり非アクティブになっているようです。


1


私のプロジェクト icebuddha.comはブラウザでフォーマットを記述するためにpythonを使ってこれをサポートしています。


0


似たような質問に対する私の答えをまとめてみましょう。

1つのツールは WinOLSで、これは車両エンジン管理コンピュータのバイナリイメージ(大部分はルックアップテーブルの数値データ)を解釈および編集するために設計されています。 ) さまざまなエンディアン形式(PDPではない)をサポートし、さまざまな幅とオフセットでデータを表示し、配列領域(マップ)を定義し、それらをあらゆる種類の拡大縮小とオフセットオプションで2Dまたは3Dで視覚化します。 それはまたあなたのために働くかもしれない発見的な/統計的な自動地図検索を持っています。

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