2010-12-22 12 views
5

Próbuję napisać małe narzędzie, aby utworzyć plik binarny, który będzie naśladować ten wyprodukowany przez inną zamkniętą aplikację. Użyłem edytorów szesnastkowych do odszyfrowania formatu, utknąłem próbując zrozumieć, co to jest formatowanie/kodowanie, tak, że mogę go wyprodukować przy użyciu C++ lub C#.Pomóż mi zrozumieć ten binarny format pliku

Plik rozpoczyna się od pierwszych czterech bajtów: 01 00, a następnie FF FE. Rozumiem, że plik zaczyna się od SOH, a następnie znak kolejności bajtów dla małego endianina. Po tych czterech bajtach program wydaje napisy BSTR dla każdego z pól łańcuchowych z GUI aplikacji.

Używając C#, stworzyłem plik Unicode, który zaczyna się od FF FE, ale nie jestem pewien, jak wstawić znak SOH pierwszy.

Byłbym zawsze wdzięczny, gdyby ktoś mógł zaoferować wgląd w format pliku lub kodowanie i dlaczego plik zaczyna się od znaku SOH.

Z góry dziękuję.

+0

Czy możesz dać nam wskazówkę na temat tego zamkniętego oprogramowania? Czy możesz przynajmniej powiedzieć, z którą branżą lub obszarem przedsięwzięć jest ona związana? –

+0

Plik jest tworzony przez graficzny interfejs użytkownika, który automatyzuje tworzenie kopii zapasowej bazy obiektowej i bazy danych SQL podczas tworzenia pliku, który jest używany do przywracania kopii zapasowej. Chcę utworzyć plik wykonywalny, który może wytworzyć ten sam plik przy użyciu argumentów, dzięki czemu mogę zautomatyzować tworzenie kopii zapasowej i utworzyć plik, który może być użyty przez GUI do przywrócenia mojej skryptowej kopii zapasowej. Nie próbuję ominąć żadnych licencji ani wyprodukować czegoś do sprzedania. To tylko dla aplikacji, która uratuje mnie od ręcznego wykonywania kopii zapasowych. Plik ma tylko 1k. – Rob

Odpowiedz

3

Jeśli jesteś problem z zapisem pierwszych czterech bajtów to zrobi za Ciebie.

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")); 
    } 
} 

ten wyświetli się następujący plik

01 00 FF FE 73 00 74 00 72 00 69 00 6e 00 67 00 ....s.t.r.i.n.g. 

Edit: propozycja dodawany znacznik H za wypisywanie ciąg.

+0

Wow! Dziękuję Ci! Chciałbym prosić o pomoc wcześniej. Czy mógłbyś wiedzieć, w jaki sposób można zapisać dane typu BSTR za pomocą tego samego programu piszącego? – Rob

+1

'binaryWriter.Write (Encoding.Unicode.GetBytes (" string "));' –

+0

Dziękuję wszystkim za pomoc. Z twoją pomocą udało mi się stworzyć aplikację w kilka godzin. Szczerze to doceniam! – Rob

3

Inżynieria wsteczna w formacie binarnym może być trudnym zadaniem. Na pierwszy rzut oka nie rozpoznaję tego jako oczywistego, dobrze znanego formatu plików ... ale są tam tysiące, więc kto wie.

Legal issues bok, proponuję spojrzeć na niektóre z następujących środków, które mówią o podejść do takiego przedsięwzięcia:

Powiązane problemy