2010-12-22 2 views
5

Sto tentando di scrivere una piccola utility per produrre un file binario che imitare quello prodotto da un'altra applicazione chiusa. Ho usato editor esadecimali per decifrare il formato perché sono bloccato a cercare di capire quale sia il formato/codifica in modo che io possa produrlo usando C++ o C#.Aiutami a capire questo binario File Format

Il file inizia con i primi quattro byte: 01 00 seguito da FF FE. La mia comprensione è che il file inizia con SOH seguito dal byte order mark per little endian. Dopo questi quattro byte, il programma sembra scrivere BSTR per ciascuno dei campi stringa dalla GUI dell'app.

con C#, ho prodotto un file unicode che inizia con FF FE, ma non sono sicuro come inserire il carattere SOH prima.

sarei sempre grato se qualcuno potesse offrire la comprensione per il formato di file o la codifica e il motivo per cui il file inizia con il carattere SOH.

Grazie in anticipo.

+0

Puoi darci un suggerimento su cosa fa questo software chiuso? Puoi almeno dire in quale settore o area di attività è associato? –

+0

Il file è prodotto da una GUI che automatizza il backup di un oggetto orientato e un database SQL durante la creazione di un file che viene utilizzato per ripristinare il backup. Voglio creare un eseguibile in grado di produrre lo stesso file utilizzando gli argomenti in modo da poter automatizzare il backup e produrre un file che potrebbe essere utilizzato dalla GUI per ripristinare il backup programmato. Non sto tentando di bypassare alcuna licenza o produrre qualcosa da vendere. È solo per un'app che mi eviterà di eseguire i backup manualmente. Il file ha una dimensione di 1k. – Rob

risposta

3

Se sei solo avendo problemi a scrivere i primi quattro byte questo lo farà per voi.

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

Questa emette il seguente file

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

Edit: Aggiunto il suggerimento di Mark H per la scrittura di una stringa.

+0

Wow! Grazie! Vorrei aver chiesto aiuto prima. Sapresti come si può scrivere un tipo di dati BSTR usando lo stesso writer? – Rob

+1

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

+0

Grazie a tutti per l'aiuto. Con il tuo aiuto sono riuscito a creare l'applicazione in un paio d'ore. Lo apprezzo sinceramente! – Rob

3

reverse engineering di un formato di file binario può essere un compito impegnativo. In superficie, non lo riconosco come un formato di file evidente e noto ... ma ce ne sono migliaia là fuori, quindi chi lo sa.

Legal issues a parte, vorrei suggerire si guarda ad alcune delle seguenti risorse che parlano di approcci per un tale sforzo: