【问题标题】:Help Me Understand This Binary File Format帮助我理解这种二进制文件格式
【发布时间】:2011-05-29 17:12:59
【问题描述】:

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

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

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

如果有人能提供有关文件格式或编码以及文件以 SOH 字符开头的原因的见解,我将永远感激不尽。

提前谢谢你。

【问题讨论】:

  • 您能告诉我们这个封闭软件的作用吗?您至少能说出它与哪个行业或领域相关吗?
  • 该文件由 GUI 生成,该 GUI 在创建用于恢复备份的文件时自动备份面向对象和 SQL 数据库。我想创建一个可执行文件,它可以使用参数生成相同的文件,以便我可以自动备份并生成一个可由 GUI 使用的文件来恢复我的脚本备份。我并没有试图绕过任何许可或生产要出售的东西。这只是一个应用程序,可以让我免于手动运行备份。该文件只有 1k 大小。

标签: binary reverse-engineering file-format


【解决方案1】:

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

除了Legal issues,我建议您查看以下一些资源,这些资源讨论了这种努力的方法:

【讨论】:

    【解决方案2】:

    如果您只是在写出前四个字节时遇到问题,这将为您解决。

    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 数据类型?
    • 谢谢大家的帮助。在您的帮助下,我能够在几个小时内创建应用程序。我真诚地感谢它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2010-10-04
    • 2018-08-18
    • 2012-04-02
    • 2016-11-15
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多