2010-12-22 30 views
5

Estoy intentando escribir una pequeña utilidad para producir un archivo binario que imitará el producido por otra aplicación cerrada. He usado editores hexadecimales para descifrar el formato porque estoy atrapado tratando de entender cuál es el formato/codificación para poder producirlo usando C++ o C#.Ayuda para entender este formato de archivo binario

El archivo comienza con los primeros cuatro bytes: 01 00 seguido de FF FE. Según entiendo, el archivo comienza con SOH seguido de la marca de orden de bytes para little endian. Después de estos cuatro bytes, el programa parece escribir BSTR para cada uno de los campos de cadena desde la GUI de la aplicación.

Usando C#, he producido un archivo Unicode que comienza con FF FE, pero no estoy seguro de cómo insertar el carácter SOH primero.

Estaría siempre agradecido si alguien pudiera ofrecer una visión del formato de archivo o codificación y por qué el archivo comienza con el carácter SOH.

Gracias de antemano.

+0

¿Puede darnos una pista sobre lo que hace este software cerrado? ¿Puedes decir al menos qué industria o área de actividad está asociada? –

+0

El archivo es producido por una GUI que automatiza la copia de seguridad de un objeto orientado y una base de datos SQL mientras crea un archivo que se utiliza para restaurar la copia de seguridad. Quiero crear un ejecutable que pueda producir el mismo archivo usando argumentos para poder automatizar la copia de seguridad y producir un archivo que pueda ser utilizado por la GUI para restaurar mi copia de seguridad con guiones. No estoy intentando eludir ninguna licencia ni producir algo para vender. Es solo para una aplicación que me salvará de ejecutar las copias de seguridad manualmente. El archivo tiene solo 1k de tamaño. – Rob

Respuesta

3

Si eres simplemente teniendo problemas para escribir los primeros cuatro bytes, esto lo hará por usted.

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

Esta es la salida del siguiente archivo

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

Editar: Agregado sugerencia de Mark H para escribir una cadena.

+0

¡Guau! ¡Gracias! Ojalá hubiera pedido ayuda antes. ¿Sabría por casualidad cómo se podría escribir un tipo de datos BSTR utilizando el mismo escritor? – Rob

+1

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

+0

Gracias a todos por la ayuda. Con su ayuda, pude crear la aplicación en solo un par de horas. ¡Lo aprecio sinceramente! – Rob

3

La ingeniería inversa de un formato de archivo binario puede ser una tarea desafiante. En la superficie, no reconozco esto como un formato de archivo obvio, conocido ... pero hay miles por ahí, así que quién sabe.

Legal issues lado, sugeriría nos fijamos en algunos de los siguientes recursos que hablan de enfoques para tal esfuerzo:

Cuestiones relacionadas