帮助我理解这种二进制文件格式

时间:2010-12-22 23:30:10

标签: binary reverse-engineering file-format

我正在尝试编写一个小实用程序来生成一个二进制文件,该文件将模仿另一个已关闭的应用程序生成的文件。我已经使用十六进制编辑器来解密格式,因为我试图理解格式/编码是什么,以便我可以使用C ++或C#生成它。

文件以前四个字节开头:01 00后跟FF FE。我的理解是该文件以SOH开头,后跟小端的字节顺序标记。在这四个字节之后,程序似乎为应用程序GUI中的每个字符串字段写入BSTR。

使用C#,我生成了一个以FF FE开头的unicode文件,但我不知道如何首先插入SOH字符。

如果有人能够提供对文件格式或编码的深入了解以及文件以SOH字符开头的原因,我将永远感激。

提前谢谢。

2 个答案:

答案 0 :(得分:4)

逆向工程二进制文件格式可能是一项具有挑战性的任务。从表面上看,我不认为这是一种明显的,众所周知的文件格式......但是有成千上万的文件格式,谁知道呢。

除了Legal issues之外,我建议你看一下下面的一些资源,讨论这种努力的方法:

答案 1 :(得分:3)

如果您在写出前四个字节时遇到问题,这将为您完成。

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关于写出字符串的建议。