Bagaimana cara menginterpretasikan suatu file biner atau hex dump dari file biner?

14

File biner memiliki string dan beberapa angka, Jika saya lakukan od -c filenameatau strings filename, saya dapat melihat string dengan benar. Tapi, bagaimana dengan angka? Mereka berada dalam beberapa format yang aneh.

Teks setelah melakukan od -c filenameadalah seperti ini:

0000000 036 \ 0 032 004 SD \ 0 \ 0 \ 0 \ 0 seq 1
0000020 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ t \ 0 ó 002 3 001
0000040 & \ 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

Bagaimana cara menguraikan ini?

Saya bahkan mencoba hexdump -C filename

Outputnya seperti ini:

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 |

Untuk memperjelas, file utama yang merupakan file biasa memiliki satu atribut yang ditampilkan adalah beberapa format aneh, jadi kami mencari file mentah / biner.

Melakukan dump oktal pada file biasa, menyelesaikan masalah tampilan.

Dengan grep 'id=123' regular_file | head -1 | od -c, saya bisa melihat nomor apa yang ada di sana. Saya mengharapkan 1, itu menunjukkan kepada kami sebagai 001.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
4
Untuk "menafsirkannya", Anda perlu tahu format apa yang disimpan.
Kevin
Saya telah diberitahu bahwa angka dalam format biner, khususnya bilangan bulat biner. Apakah itu membantu pertanyaan saya?
Tidak, semua yang ada di komputer adalah biner, Anda perlu mengetahui tata letak file - di mana setiap angka, apa artinya setiap angka. Di mana Anda mendapatkan file ini?
Kevin
hanya untuk memperjelas, saya punya file normal juga. [seq = 132253932] [Mayor = S] [Kecil = D] [src = seq1] [Id = 0] [ref = 0] [Tanggal = 20120307] Salah satu tag di file normal memiliki nilai dalam ascii, the file normal biasanya digunakan untuk membaca log, tetapi untuk memastikan, itu memiliki nilai yang benar tetapi dalam format yang berbeda, kita melihat file biner ini.
Sisi kanan dari dump hex "standar" biasanya adalah representasi ASCII dari data tersebut. Jika Anda melihat teks ini: not textdalam tampilan ASCII itu, itu tidak berarti itu adalah ASCII untuk program yang membaca file. misalnya. Angka 7957706749327538292 ketika dikodekan sebagai integer unsigned 64-bit little-endian. terlihat seperti ini dalam tampilan ASCII: not text.
Peter.O

Jawaban:

4

Ada banyak cara untuk menyimpan angka - ASCII (yang dapat memiliki varian spesifik lokal, seperti menggunakan ',' untuk memisahkan bagian pecahan ATAU sebagai ribuan pengelompokan), bilangan bulat biner (jumlah variabel bit) / float / double (semua dari yang dapat bervariasi tergantung pada arsitektur endian dan apakah perangkat lunak yang memproduksi file meresmikan representasi), BCD (tidak terkompresi, dikemas, titik tetap, dan varian lainnya), bilangan desimal berkode ...

Tidak ada standar.

symcbean
sumber
19

Salah satu hal pertama yang harus saya hafal untuk ilmu komputer adalah Data + Interpretasi = Informasi Berguna . Akibat dari hal ini adalah bahwa jika Anda kehilangan Data atau Interpretasi, Anda tidak memiliki apa pun. Data itu sendiri tidak bisa memberi tahu Anda bagaimana menafsirkannya. (Anda dapat memiliki metadata yang memberi tahu Anda hal ini, tetapi kemudian Anda perlu tahu bagaimana menafsirkan metadata juga)

Dalam keadaan tersebut, saya sarankan mencoba ini:

file filename

Jika muncul sesuatu seperti:

filename: data

dan Anda benar - benar tidak tahu formatnya, dari mana programnya, apa penggunaannya, atau apa pun tentang isinya filename, maka Anda mungkin harus menyerah.

Output Dump Oktal

od(octal dump) menghasilkan dump teks-dan-oktal hybrid. Non-angka adalah karakter baik dicetak seperti o, s, f, karakter dll, atau non-printable seperti \0(ASCII 0, NUL), atau \a(ASCII 7, BEL), atau angka dalam basis 8, dengan C awalan standar 0(misalnya 032= 26 di desimal). File Anda ditafsirkan sebagai aliran byte 8-bit .

Output Hex Dump

hexdumpmenghasilkan dump hex tradisional, dengan satu kolom mencantumkan 8-bit byte dalam heksadesimal, yang lain menunjukkan karakter ASCII yang sesuai dengan byte ini, jika ada (jika nilai byte adalah karakter ASCII yang tidak dapat dicetak, atau bukan karakter ASCII sama sekali , .ditampilkan pada posisi itu). Sekali lagi, file Anda ditafsirkan sebagai aliran byte 8-bit .

Integer

Jika file Anda terdiri dari bilangan bulat biner 100% (yaitu array tanpa dimensi, seragam, satu dimensi dari semacam representasi bilangan bulat), maka Anda harus menjawab sendiri semua pertanyaan ini:

  • Apakah mereka 'benar' biner, atau binary-coded decimal (BCD) ? (mungkin biner)
  • Berapa lebar mereka dalam bit?
  • Jika lebarnya bukan kelipatan 8, apakah bit-packed seperti pesan SMS atau Base64, atau byte-aligned?
  • Jika lebarnya 8 bit atau lebih, berapa urutan byte ? Apakah Big Endian, Little Endian, atau yang lainnya, jenis yang lebih jarang?
  • Apakah bilangan bulat ditandatangani, atau tidak ditandatangani? ?
  • Jika mereka ditandatangani, apakah mereka diwakili dalam komplemen dua (lebih mungkin), atau komplemen seseorang , atau sesuatu yang langka dan aneh?

Mungkin ada lebih banyak yang saya lupa sekarang.

Dan ini hanya untuk array seragam dimensi tunggal bilangan bulat, yang berasal dari arsitektur komputer modern yang umum. Jika data Anda memiliki kompleksitas, segala sesuatu akan menjadi sangat berbulu sehingga dengan cepat akan lebih mudah untuk memenangkan lotre daripada hanya menebak formatnya. Dan Anda harus menebak (tebakan berpendidikan, tetapi tebakan), kecuali Anda tahu formatnya.

Alexios
sumber