2010-12-22 4 views
5

小さなユーティリティを作成して、別の閉じたアプリケーションによって生成されたものを模倣するバイナリファイルを作成しようとしています。私は16進エディタを使ってフォーマットを解読しましたが、フォーマット/エンコーディングがどのようなものなのか理解しようとしていますので、C++やC#を使ってそれを作り出すことができます。このバイナリファイル形式を理解するのに助けてください

ファイルは、最初の4バイトで始まります。01 00に続いてFF FEです。私の理解は、ファイルがSOHで始まり、その後にリトルエンディアンのバイトオーダーマークが続くことです。これらの4バイトの後、プログラムは、アプリのGUIから各文字列フィールドのBSTRを書き込むように見えます。

C#を使用して、FF FEで始まるユニコードファイルを作成しましたが、最初にSOH文字を挿入する方法がわかりません。

誰かがファイルフォーマットやエンコーディングに洞察を与えることができ、なぜファイルがSOH文字で始まるのか、私は永遠に感謝しています。

ありがとうございます。

+0

あなたはこの閉鎖されたソフトウェアが何をしているかについてのヒントを教えてもらえますか?少なくとも、それが関連している業種や分野について言えますか? –

+0

ファイルは、バックアップを復元するために使用されるファイルを作成しながら、オブジェクト指向およびSQLデータベースのバックアップを自動化するGUIによって生成されます。引数を使って同じファイルを生成できる実行可能ファイルを作成して、バックアップを自動化し、GUIがスクリプト化されたバックアップを復元するためのファイルを生成できるようにしたい。私はライセンスをバイパスしたり、売るものを作ったりするつもりはありません。それは私が手動でバックアップを実行するのを救うアプリのためです。このファイルのサイズは1kです。 – Rob

答えて

3

最初の4バイトを書き出すのに問題がある場合、これはあなたのためにそれを行います。

using (var stream = new FileStream("myfile.bin", FileMode.Create)) 
{ 
    using (var binaryWriter = new BinaryWriter(stream)) 
    { 
     binaryWriter.Write((byte)1); 
     binaryWriter.Write((byte)0); 
     binaryWriter.Write((byte)0xFF); 
     binaryWriter.Write((byte)0xFE); 
     binaryWriter.Write(Encoding.Unicode.GetBytes("string")); 
    } 
} 

この意志の出力は、以下のファイル

01 00 FF FE 73 00 74 00 72 00 69 00 6e 00 67 00 ....s.t.r.i.n.g. 

編集:文字列を書き出すための追加のMark Hの提案。

+0

うわー!ありがとうございました!私は早く助けを求めたかったのですが。あなたは同じライターを使ってBSTRのデータ型を書く方法を知っていますか? – Rob

+1

'binaryWriter.Write(Encoding.Unicode.GetBytes(" string ")); ' –

+0

ありがとうございました。あなたの助けを借りて、ほんの数時間でアプリケーションを作成することができました。私は心から感謝しています! – Rob

3

バイナリファイル形式をリバースエンジニアリングすることは難しい作業です。表面上、私はこれを明白な、よく知られたファイル形式として認識しません...しかしそこに何千もあるので、誰が知っています。

Legal issuesさておき、私はあなたがそのような努力へのアプローチについて話次のリソースのいくつかを見てお勧めします

関連する問題