我正在尝试编写一个小实用程序来生成一个二进制文件,该文件将模仿另一个已关闭的应用程序生成的文件。我已经使用十六进制编辑器来解密格式,因为我试图理解格式/编码是什么,以便我可以使用C ++或C#生成它。
文件以前四个字节开头:01 00后跟FF FE。我的理解是该文件以SOH开头,后跟小端的字节顺序标记。在这四个字节之后,程序似乎为应用程序GUI中的每个字符串字段写入BSTR。
使用C#,我生成了一个以FF FE开头的unicode文件,但我不知道如何首先插入SOH字符。
如果有人能够提供对文件格式或编码的深入了解以及文件以SOH字符开头的原因,我将永远感激。
提前谢谢。
答案 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关于写出字符串的建议。