33

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

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

未知の形式のファイルのバイナリコンテンツを分析および逆シリアル化するための「パターン」は存在しますか?

4

13 に答える 13

28

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

  1. データの逆シリアル化:exeがどのようにコンパイルされたかを分析します(ファイルアナライザーを試してください)。検出された言語でバイナリデータを逆シリアル化してみてください。次に、すべてのプログラミング言語が理解できるxml形式(言語に依存しない)でシリアル化します。
  2. バイナリデータを分析します。ファイルのさまざまなバージョンをほとんど変化なく保存し、diffプログラムを使用して16進エディタですべてのビットの意味を分析します。バイナリハッキング手法(Frans Faaseによるバイナリファイル形式を解読する方法など)と組み合わせて使用​​します。
  3. アプリケーションのリバースエンジニアリング:アプリのビルドに使用されるプログラミング言語のリバースエンジニアリングツールを使用してコードを取得してみてください(File Analyzerにあります)。それ以外の場合は、 IDAPro逆アセンブラーなどの逆アセンブラー分析ツールを使用してください
于 2009-06-22T14:11:11.750 に答える
15

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

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

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

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

于 2016-11-27T15:58:42.927 に答える
7

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

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

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

于 2009-06-22T08:31:02.547 に答える
5

GNUbinutilsの「strings」プログラムは非常に便利です。印刷可能な文字列をファイルに印刷し、ファイルに含まれている内容やプログラムの機能の手がかりを与えることがよくあります。

于 2009-06-22T08:41:21.683 に答える
5

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

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

于 2009-06-22T08:49:38.187 に答える
3

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

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

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

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

于 2009-06-22T08:59:11.663 に答える
3

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

file myfile.ext

そして、そこに含まれる魔法の数字とデータに基づいてテキストの説明を吐き出します。

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

于 2009-06-22T08:29:32.237 に答える
3

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

于 2009-06-22T14:30:38.450 に答える
2

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

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

于 2009-06-22T08:29:16.230 に答える
2

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

計画テキストでない限り。

于 2009-06-23T04:31:07.803 に答える
2

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

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

于 2014-10-06T20:12:12.897 に答える
0

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

于 2009-06-22T08:30:47.243 に答える