Jak interpretować ósemkowy lub szesnastkowy zrzut pliku binarnego?

14

Plik binarny ma ciągi i niektóre liczby. Jeśli to zrobię od -c filenamelub strings filename, mogę poprawnie zobaczyć ciągi. Ale co z liczbami? Są w jakimś dziwnym formacie.

Tekst po wykonaniu od -c filenamewygląda następująco:

0000000 036 \ 0 032 004 SD \ 0 \ 0 \ 0 \ 0 sek. 1
0000020 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ t \ 0 ó 002 3 001
0000040 i \ 0 032 \ f O 2 006 \ 0 \ 0 \ 0 osfus 1
0000060 ó 002 3 001 ÿ \ r \ 0 \ 0 \ t \ 0 \ 0 @ 3 ×
0000100 233 º 004 \ 0 é 003 \ 0 \ 0 & \ 0 032 \ f O 2 7 \ 0
0000120 \ 0 \ 0 osfeu 1 ó 002 3 001 é 235
0000140 \ 0 \ 0 035 003 \ 0 @ 3 × 233 º 004 \ 0 Ñ \ a \ 0 \ 0
0000160 ä \ 0 032 \ f O r E \ 0 \ 0 \ 0 osfap 1

Jak to rozszyfrować?

Nawet próbowałem hexdump -C filename

Dane wyjściowe są następujące:

00000000 1e 00 1a 04 53 44 00 00 00 00 73 65 71 31 20 20 | .... SD .... seq1 |
00000010 20 20 00 00 00 00 00 00 00 00 09 00 f3 02 33 01 | .......... ó.3. |
00000020 26 00 1a 0c 4f 32 06 00 00 00 6f 73 66 75 73 31 | & ... O2 .... osfus1 |
00000030 20 20 f3 02 33 01 ff 0d 00 00 09 00 00 40 33 d7 | ó.3.ÿ ...... @ 3 × |
00000040 9b ba 04 00 e9 03 00 00 26 00 1a 0c 4f 32 37 00 | .º..é ... & ... O27. |
00000050 00 00 6f 73 66 65 75 31 20 20 f3 02 33 01 e9 9d | ..osfeu1 ó.3.é. |
00000060 00 00 1d 03 00 40 33 d7 9b ba 04 00 d1 07 00 00 | ..... @ 3 × .º..Ñ ... |
00000070 e4 00 1a 0c 4f 72 45 00 00 00 6f 73 66 61 70 31 | ä ... OrE ... osfap1 |

Aby wyjaśnić, główny plik, który jest zwykłym plikiem, miał jeden atrybut, który wyświetlał, jest jakimś dziwnym formatem, więc patrzymy na plik raw / binary.

Wykonanie ósemkowego zrzutu zwykłego pliku rozwiązało problem z wyświetlaniem.

Dzięki grep 'id=123' regular_file | head -1 | od -c, mogłem zobaczyć, jaki jest tam numer. Spodziewałem się 1, pokazało nam to jako 001.

Gilles „SO- przestań być zły”
źródło
4
Aby go „zinterpretować”, musisz wiedzieć, w jakim formacie jest przechowywany.
Kevin
Powiedziano mi, że liczby są w formacie binarnym, w szczególności binarne liczby całkowite. Czy to pomaga moje pytanie?
Nie, wszystko na komputerze jest binarne, musisz znać układ pliku - gdzie jest każda liczba, co oznacza każda liczba. Skąd masz ten plik?
Kevin,
dla wyjaśnienia, mam również normalny plik. [seq = 132253932] [Major = S] [Minor = D] [src = seq1] [Id = 0] [ref = 0] [Date = 20120307] Jeden ze znaczników w normalnym pliku ma wartość ascii, normalny plik jest zwykle używany do odczytu dzienników, ale aby się upewnić, że miał poprawną wartość, ale w innym formacie patrzymy na ten plik binarny.
Prawa strona „standardowego” zrzutu heksadecymalnego jest zazwyczaj reprezentacją ASCII tych danych. Jeśli zobaczysz ten tekst: not textw tym widoku ASCII nie oznacza to, że jest to ASCII dla programu, który czyta plik. na przykład. Liczba 7957706749327538292, gdy jest zakodowana jako 64-bitowa liczba całkowita bez znaku little-endian. wygląda to w świetle ASCII: not text.
Peter.O

Odpowiedzi:

4

Istnieje wiele sposobów przechowywania liczb - ASCII (które mogą mieć warianty specyficzne dla ustawień regionalnych, takie jak użycie „,” do oddzielenia części ułamkowej LUB jako grupowania tysięcy), binarna liczba całkowita (zmienna liczba bitów) / float / double (wszystkie z które mogą się różnić w zależności od architektury Endian i od tego, czy oprogramowanie tworzące plik formalizuje reprezentację), BCD (nieskompresowane, spakowane, stałe punkty i inne warianty), binarny kod dziesiętny ...

Nie ma standardu.

symcbean
źródło
19

Jedną z pierwszych rzeczy, które musiałem zapamiętać dla informatyki, były Dane + Interpretacja = Przydatne informacje . Następstwem tego jest to, że jeśli brakuje Ci Danych lub Interpretacji, nie masz nic. Same dane nie mówią, jak je interpretować. (możesz mieć metadane, które ci to mówią, ale musisz też wiedzieć, jak interpretować metadane )

W tych okolicznościach sugeruję wypróbowanie tego:

file filename

Jeśli pojawi się coś takiego:

filename: data

i absolutnie nie masz pojęcia, jaki jest format, z jakiego programu pochodzi, jakie jest jego użycie ani nic w tej treści filename, to prawdopodobnie powinieneś się poddać.

Wyjście ósemkowego zrzutu

od(ósemkowy zrzut) tworzy hybrydowy zrzut tekstowy i ósemkowy. Nie-liczby są znaki albo druku, takie jak o, s, fznaki itp, lub nie dające się jak \0(ASCII 0, NUL) lub \a(ASCII 7 BEL), lub w przypadku podstawy 8 w standardzie C prefiksu 0(np 032= 26 w dziesiętny). Twój plik jest interpretowany jako strumień 8-bitowych bajtów .

Wyjście zrzutu heksadecymalnego

hexdumptworzy tradycyjny zrzut heksadecymalny, z jedną kolumną zawierającą 8-bitowe bajty w systemie szesnastkowym, druga pokazuje, jakie znaki ASCII odpowiadają tym bajtom, o ile występują (jeśli wartość bajtu jest niedrukowalnym znakiem ASCII lub wcale nie jest znakiem ASCII , .jest pokazane w tej pozycji). Ponownie plik jest interpretowany jako strumień 8-bitowych bajtów .

Liczby całkowite

Jeśli Twój plik zawiera 100% liczb całkowitych binarnych (tzn. Jest bez nagłówka, jednolitą, jednowymiarową tablicą jakiegoś rodzaju reprezentacji liczb całkowitych), musisz odpowiedzieć sobie na wszystkie te pytania:

  • Czy są one „odpowiednimi” liczbami binarnymi, czy dziesiętnymi (BCD) ? (prawdopodobnie binarny)
  • Jak szerokie są w kawałkach?
  • Jeśli ich szerokość nie jest wielokrotnością liczby 8, to czy są zapakowane bitowo, jak wiadomości SMS lub Base64, czy wyrównane bajtowo?
  • Jeśli ich szerokość wynosi 8 bitów lub więcej, jaka jest kolejność bajtów ? Czy to Big Endian, Little Endian, czy jeden z innych rzadszych gatunków?
  • Czy liczby całkowite są podpisane lub niepodpisane ?
  • Jeśli są podpisane, to czy są reprezentowane w dopełnieniu dwóch (bardziej prawdopodobne), czy w dopełnieniu jednego , czy też w czymś rzadkim i dziwnym?

Prawdopodobnie zapominam o tym teraz więcej.

A to tylko dla jednowymiarowej, jednolitej tablicy liczb całkowitych, pochodzących ze wspólnej, nowoczesnej architektury komputera. Jeśli Twoje dane mają jakąkolwiek złożoność, sprawy staną się tak włochate, że wygrana na loterii szybko stanie się łatwiejsza niż odgadnięcie formatu. A ty masz do odgadnięcia (zgaduje, ale sądzę), chyba że wiesz formatu.

Alexios
źródło