web-dev-qa-db-ja.com

バイナリファイルを分析するには?

バイナリファイルがあります。それがどのようにフォーマットされているのかはわかりません。デルファイコードに由来しているだけです。

バイナリファイルを分析する方法はありますか?

不明な形式のファイルのバイナリコンテンツを分析して逆シリアル化する「パターン」は存在しますか?

26
Ricibald

これらを試してください:

  1. データの非直列化:exeのコンパイル方法を分析します(試してみてください File Analyzer )。発見された言語でバイナリデータをデシリアライズしてみてください。次に、すべてのプログラミング言語が理解できるxml形式(言語に依存しない)でシリアル化します
  2. バイナリデータの分析:わずかなバリエーションでさまざまなバージョンのファイルを保存し、差分プログラムを使用して、16進エディターですべてのビットの意味を分析します。バイナリハッキングテクニックと組み合わせて使用​​します(例 Frans Faaseによってバイナリファイル形式をクラックする方法
  3. アプリケーションのリバースエンジニアリング:アプリのビルドに使用するプログラミング言語のリバースエンジニアリングツールを使用してコードを取得してみてください( File Analyzer で見つかります) =)。それ以外の場合は、 IDA Pro Disassembler のような逆アセンブラ分析ツールを使用します
22
Ricibald

趣味のプロジェクトでは、古いゲームファイルをリバースエンジニアリングする必要がありました。私のアプローチは:

  • 優れた16進エディタを用意してください。
  • バイナリファイルで読み取り可能な単語を探します。それらの分布がどのようになっているかに注意してください。それらの間の距離が一定であれば、それはリストであることがわかります。
  • 2〜3個の結果として生じるゼロを探します。 int32値を示す場合があります。
  • 一部のdwordは、ファイルへのポインタである場合があります。
  • ファイル内で繰り返し発生するパターンを特定してください。
  • C0-CFがたくさん表示される場合は、RLE圧縮データを示している可能性があります。
11
akarnokd

バイナリファイルが何を表しているかを理解している場合、バイナリファイルのリバースエンジニアリングは非常に時間がかかるプロセスです。それが何かわからない場合は、さらに難しくなります。

それは可能ですが、そうすることにはかなりの理由が必要です。

最初のステップは、選択した16進エディタでそれを開き、ファイルが表すものの方向を示す英語のテキストを見つけることができるかどうかを確認することです。そこから、Googleの「リバースエンジニアリングバイナリファイル」には、ガイドよりも知識のある人が私よりずっと多くいます。

8
colithium

GNU binutilsの "strings"プログラムは非常に便利です。ファイル内の印刷可能な文字の文字列を印刷し、ファイルに含まれるものやプログラムの手がかりとなることがよくあります。

5
Andreas Fugl

データがシリアル化されたDelphiオブジェクトを表す場合は、Delphiシリアル化プロセスについて読む必要があります。その場合は、Delphiを使用してロードし、IDEから分析を続けるのが最善の策だと思います。 Delphiのシリアル化に関するいくつかの情報が見つかります here

編集:ファイルにシリアル化されたdelphiオブジェクトが含まれている場合は、それをロードする小さなdelphiプログラムを記述して、データをxmlのような中立的なものに「変換」する必要があります。これを行うことができた場合は、delphiがxmlへのシリアル化をサポートしているかどうかを確認してください。次に、これらのオブジェクトに任意の言語からアクセスできます。

5
Geo

私は Hexinator (Window&Linux)と Synalyze It! (macOS)をまさにこの目的のために開発しました。これらのアプリケーションを使用すると、他の16進エディターと同様にバイナリファイルを表示できますが、さらに、バイナリファイル形式の詳細を含む「文法」を作成できます。文法にはすべての構成要素が含まれており、ファイルを自動的に解析するために使用されます。

したがって、分析で得た知識を保持し、それを複数のファイルに同時に適用できます。また、16進エディタで簡単に概要を確認するために、ファイル形式のビットと断片を色分けすることもできます。 Screen Shot of Synalyze It! Pro 解析結果はツリービューに表示され、ファイルを簡単に変更することもできます(エンディアンネスなどを適用)。

5
pi3

Unixの「file」コマンドは本当に便利です。Windowsにそのようなものがあるかどうかはわかりません。次のように実行します。

file myfile.ext

そして、そこに含まれるマジックナンバーとデータに基づいてテキストの説明を吐き出します。

おそらく cygwin 内に含まれています。

3

ファイルを作成するアプリケーションにアクセスできる場合は、アプリケーションに変更を適用し、ファイルを保存して結果を確認できます(数値はおそらく リトルエンディアン に格納されることに注意してください)。

  • 最初にファイルを繰り返し作成します。ファイルがバイナリで等しくない場合、現在の日付/時刻はおそらく差異が発生する領域に格納されています。
  • OSのバージョンなどが保存されているかどうかを確認するために、ソフトウェアを異なる環境で実行して同じことを繰り返したいと思うかもしれませんが、これはかなり珍しいことです。
  • 次に、単一の変数を変更して、この変数の値のみが異なる複数のファイルを作成してみます。これは、この変数が格納されている場所を特定するのに役立ちます。
  • このようにして、ファイルに保存されていない変数を除外することもできます。変数を変更しても、作成されたファイルが同じ場合、それらは保存されません。

上記の手順で作成した仮説をテストするには、ファイルの1つを編集して、アプリケーションに読み取らせます。

アプリケーション自体にアクセスできない場合は、それを忘れて問題を解決する別の方法を見つけることをお勧めします。より速くなる可能性は非常に高いです...

3
Treb

fileで意味のある答えが得られない場合は、Marco Pontelloによる TRiD を試して、データが既知の形式で保存されているかどうかを確認してください。

3
hillu

それを使うプログラムを知っていますか?もしそうなら、あなたはそのプログラムがファイルに書き込む関数をフックして、どのようなデータを書き込んでいるか、データのサイズと場所を知ることができます。

詳細: http://www.codeproject.com/KB/DLL/Win32APIHooking_Trouble.aspx

2
Lodle

Delphiアプリケーションを取得して IDA Proフリーウェアバージョン で開き、ファイルの書き込み場所を見つけて、ファイルの書き込み方法をデコードします。

計画書でない限り。

2
Simeon Pilgrim

ファイルの生の16進バイトのみを表示する従来の16進エディターとは異なり、010エディターはバイナリテンプレートを使用してファイルを階層構造に解析することもできます。バイナリテンプレートの実行結果は、生の16進バイトだけを使用するよりも、理解と編集がはるかに簡単です。

http://www.sweetscape.com/010editor/

1
Ray Hulha

それを16進エディタで開いて分析してみてください。

0