質問

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

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

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

役に立ちましたか?

解決

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

  1. データの逆シリアル化:実行ファイルがどのようにコンパイルされたかを分析してください(試してください) ファイルアナライザー)。検出された言語でバイナリ データを逆シリアル化してみます。次に、すべてのプログラミング言語が理解できる XML 形式 (言語に依存しない) でシリアル化します。
  2. バイナリデータを解析する:ほとんど変化のないさまざまなバージョンのファイルを保存し、diff プログラムを使用して 16 進エディタで各ビットの意味を分析してみてください。バイナリ ハッキング手法と組み合わせて使用​​します (例: バイナリ ファイル形式をクラックする方法 by Frans Faase)
  3. アプリケーションのリバースエンジニアリング:アプリの構築に使用されるプログラミング言語のリバース エンジニアリング ツールを使用してコードを取得してみてください ( ファイルアナライザー)。それ以外の場合は、次のような逆アセンブラ分析ツールを使用します。 IDA Pro逆アセンブラ

他のヒント

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

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

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

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

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

" strings" GNU binutilsのプログラムは非常に便利です。ファイル内の印刷可能な文字の文字列を印刷し、多くの場合、ファイルに含まれている内容やプログラムの手がかりを与えます。

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

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

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

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

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

file myfile.ext

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

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

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

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

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

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

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

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top