Помогите мне понять этот формат двоичного файла

Я пытаюсь написать небольшую утилиту для создания двоичного файла, который будет имитировать файл, созданный другим закрытым приложением. Я использовал шестнадцатеричные редакторы для расшифровки формата, потому что я застрял, пытаясь понять, что это за формат / кодировка, чтобы я мог создать его с помощью C ++ или C #.

Файл начинается с первых четырех байтов: 01 00, за которым следует FF FE. Насколько я понимаю, файл начинается с SOH, за которым следует отметка порядка байтов для прямого порядка байтов. После этих четырех байтов программа, кажется, записывает BSTR для каждого из строковых полей из графического интерфейса приложения.

Используя C #, я создал файл Unicode, который начинается с FF FE, но я не уверен, как сначала вставить символ SOH.

Я был бы бесконечно благодарен, если бы кто-нибудь мог дать представление о формате или кодировке файла и о том, почему файл начинается с символа SOH.

Заранее спасибо.


person Rob    schedule 22.12.2010    source источник
comment
Не могли бы вы намекнуть, что делает эта закрытая программа? Вы можете хотя бы сказать, с какой отраслью или сферой деятельности он связан?   -  person John Saunders    schedule 23.12.2010
comment
Файл создается с помощью графического интерфейса пользователя, который автоматизирует резервное копирование объектно-ориентированной базы данных и базы данных SQL при создании файла, который используется для восстановления резервной копии. Я хочу создать исполняемый файл, который может создавать тот же файл с использованием аргументов, чтобы я мог автоматизировать резервное копирование и создать файл, который мог бы использоваться графическим интерфейсом для восстановления моей резервной копии по сценарию. Я не пытаюсь обойти лицензирование или производить что-то для продажи. Это просто для приложения, которое избавит меня от ручного резервного копирования. Размер файла всего 1 КБ.   -  person Rob    schedule 23.12.2010


Ответы (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.

Изменить: добавлено предложение Марка Х о написании строки.

person Darryl Braaten    schedule 22.12.2010
comment
Вау! Спасибо! Хотел бы я попросить о помощи раньше. А знаете ли вы, как можно записать тип данных BSTR с помощью одного и того же модуля записи? - person Rob; 23.12.2010
comment
Спасибо всем за помощь. С вашей помощью мне удалось создать приложение всего за пару часов. Искренне ценю! - person Rob; 23.12.2010

Обратный инжиниринг двоичного формата файла может быть сложной задачей. На первый взгляд, я не признаю это очевидным, хорошо известным форматом файла ... но их тысячи, так что кто знает.

Помимо юридических вопросов, я бы посоветовал вам ознакомиться с некоторыми из следующих ресурсов, в которых говорится о подходы к такому начинанию:

person LBushkin    schedule 22.12.2010