2010-12-22 8 views
5

Ich versuche, ein kleines Dienstprogramm zu schreiben, um eine binäre Datei zu erzeugen, die die von einer anderen geschlossenen Anwendung erzeugte nachahmen wird. Ich habe Hex-Editoren verwendet, um das Format zu entschlüsseln, indem ich festhalte, zu versuchen, zu verstehen, was das Format/die Kodierung ist, damit ich es mit C++ oder C# produzieren kann.Helfen Sie mir, dieses binäre Dateiformat zu verstehen

Die Datei beginnt mit den ersten vier Bytes: 01 00 gefolgt von FF FE. Mein Verständnis ist, dass die Datei mit SOH beginnt, gefolgt von der Byte-Reihenfolge-Markierung für Little Endian. Nach diesen vier Bytes scheint das Programm BSTRs für jedes der Zeichenfolgenfelder von der GUI der Anwendung zu schreiben.

Mit C# habe ich eine Unicode-Datei erstellt, die mit FF FE beginnt, aber ich bin mir nicht sicher, wie das SOH-Zeichen zuerst eingefügt wird.

Ich wäre für immer dankbar, wenn jemand Einblick in das Dateiformat oder die Codierung geben könnte und warum die Datei mit dem SOH-Zeichen beginnt.

Vielen Dank im Voraus.

+0

Können Sie uns einen Hinweis geben, was diese geschlossene Software macht? Können Sie zumindest sagen, mit welcher Branche oder welchem ​​Bereich es verbunden ist? –

+0

Die Datei wird von einer GUI erstellt, die die Sicherung einer objektorientierten und einer SQL-Datenbank automatisiert, während eine Datei erstellt wird, die zum Wiederherstellen der Sicherung verwendet wird. Ich möchte eine ausführbare Datei erstellen, die dieselbe Datei mithilfe von Argumenten erstellen kann, sodass ich die Sicherung automatisieren und eine Datei erstellen kann, die von der GUI verwendet werden kann, um meine skriptbasierte Sicherung wiederherzustellen. Ich versuche nicht, irgendwelche Lizenzen zu umgehen oder etwas zu verkaufen. Es ist nur für eine App, die mich davon abhält, die Backups manuell auszuführen. Die Datei ist nur 1k groß. – Rob

Antwort

3

Wenn Sie es sind nur Probleme beim Schreiben der ersten vier Bytes, wird dies für Sie tun.

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")); 
    } 
} 

Dies wird geben die folgende Datei

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

Edit: Added Mark H Vorschlag für einen String auszuschreiben.

+0

Wow! Vielen Dank! Ich wünschte, ich hätte früher um Hilfe gebeten. Würdest du zufällig wissen, wie ein BSTR-Datentyp mit demselben Writer geschrieben werden kann? – Rob

+1

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

+0

Vielen Dank für die Hilfe. Mit Ihrer Hilfe konnte ich die Anwendung in nur wenigen Stunden erstellen. Ich schätze es sehr! – Rob

3

Reverse Engineering eines binären Dateiformats kann eine schwierige Aufgabe sein. An der Oberfläche erkenne ich das nicht als ein offensichtliches, wohlbekanntes Dateiformat ... aber es gibt Tausende da draußen, also wer weiß.

Legal issues beiseite, ich würde vorschlagen, Sie auf einige der folgenden Ressourcen suchen, die über Ansätze für ein solches Unternehmen sprechen:

Verwandte Themen