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

5
我正在尝试编写一个小工具来生成一个二进制文件,该文件将模仿另一个闭源应用程序生成的文件。我已经使用十六进制编辑器解密了格式,但我卡在了尝试理解格式/编码上,以便我可以使用C++或C#生成它。
该文件以前四个字节开始:01 00,后跟FF FE。我的理解是文件以SOH开头,后跟小端字节顺序的字节顺序标记。在这四个字节之后,程序似乎为应用程序GUI中的每个字符串字段编写BSTR。
使用C#,我已经生成了以FF FE开头的Unicode文件,但我不确定如何首先插入SOH字符。
如果有人能提供有关文件格式或编码以及为什么文件以SOH字符开头的见解,我将永远感激。
提前感谢您。

你能给我们透露一下这个闭源软件是做什么的吗?你至少能说一下它所关联的行业或领域吗? - John Saunders
该文件是由一个GUI生成的,它自动备份面向对象和SQL数据库,并创建一个用于恢复备份的文件。我想创建一个可执行文件,可以使用参数来生成相同的文件,以便我可以自动化备份并生成一个可以被GUI用来恢复我的脚本备份的文件。我不打算绕过任何许可证或制作出售的东西。这只是为了一个将节省我手动运行备份的应用程序。该文件大小仅为1k。 - Rob
2个回答

4

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的建议,可以将字符串写出来。


哇!谢谢你!我希望我早点寻求帮助。你知道如何使用相同的编写器编写BSTR数据类型吗? - Rob
感谢大家的帮助。在你们的协助下,我仅用了几个小时就创建了这个应用程序。非常感激! - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接