バイナリファイル形式のリバースエンジニアリングに役立つツール


81

未知のバイナリデータ形式のデコードを支援するために利用できるツールは何ですか?

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

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

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


1
あなたの質問に対する直接の答えではありません:未知のフォーマットのこれらのバイナリファイルで動作する実行可能ファイルがありませんか?OllyDbgなどのring3デバッガーを使用してリバースエンジニアリングを行うと、ファイル形式を総当たり攻撃するよりもはるかに簡単になります。
Daniel Sloof 2009年

そうそう、「どのプログラムを書きたいと思ったが、それを実行する時間が見つからなかった」という質問に追加すべきアプリの1つ;)
devio 2009年

場合によっては、ある程度それらを処理する実行可能ファイルがあります。ファイルが実行可能コード(標準形式ではない)であり、独自のデコードルーチンが含まれている場合があります。出発点として、部分的なドキュメントの断片が限られている場合があります。他の場合、私は何も持っていません。
マット

回答:


22

頭に浮かぶヒントは次のとおりです。

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

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

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

幸運を!


以下の答えのHachoirは、まさにこの種のフレームワークです。さまざまな種類の文字列、日付、ビット、浮動小数点数、パディングなど、事前定義されたフィールドのセットが付属しています。組み込みのパーサーは、ドキュメントとともに例として使用できます。
roolebo

15

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

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


10

トゥプニ; 私の知る限り、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の有用性を示します。



8

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

全体がVisualBASIC方言でプログラム可能であり、値のテスト、特定のブロックの読み取りなどを行うことができます。

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

ただし、試してみたい場合やフィードバックを提供したい場合は、さらに便利な機能を追加することもできます。

オープンソースでもいいのですが、REALbasicで書かれているので、そんなプロジェクトに多くの人が参加するのではないかと思います。

リンク:iBoredホームページ


2
参加するのに素晴らしいプロジェクトの地獄のように聞こえます...私がウイルス対策研究者として働いていたとき、これは本当に便利だったでしょう。代わりに、私はすべて手作業で私のものをしました...私はそれをダウンロードしてチェックするつもりです。これをありがとう、私はそれを使用しています。:)
LarryF 2009

素晴らしいバイナリファイル分析ツールの始まりのように見えますが、それでも非常にディスク中心です(512バイトのブロックはちょっとしたプレゼントです...)
Steve Bennett

@SteveBennett:ファイルを同じサイズのブロックにクラスター化するのが好きです。それは本当ですが、メニューからブロックサイズを簡単に変更できます。また、iBoredはファイル全体を1つのブロックとして処理することもできます。唯一の欠点は、すべてのデータを1つのスクロール可能なブロックビューに1つのブロックとして表示しようとするため、大きなファイルで問題が発生することです。これにより、パフォーマンスの問題が発生する可能性があります。
トーマステンペルマン2011年

6

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

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

ただし、目で行うのは自動分析を行うのとは正反対だと思います。グラフィカルモードは、オフセットを見つけて追跡するのにあまり役立ちません...

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


URLが死んでいる、多分今ここにある:advanced-hex-editor-axe.en.softonic.com
Steve Bennett

@Steveヘッズアップをありがとう。それだ。そこにはすべてのウイルスフリーの約束があるにもかかわらず、私のウイルススキャナーはそれをダウンロードしようとしてウイルス警告を私に与えたので、私は気にしませんでした。私は自分の答えを言い換えました。
メルカトル2011年

5

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


(リンクが壊れている)
jacobq

1

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


0

同様の質問に対する私の答えのカットアンドペースト:

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.