วิธีการตีความดัมพ์ฐานแปดหรือฐานสิบหกของไฟล์ไบนารี


14

ไฟล์ไบนารีมีสตริงและตัวเลขบางตัวถ้าฉันทำ od -c filenameหรือstrings filenameฉันสามารถดูสตริงได้อย่างถูกต้อง แต่แล้วตัวเลขล่ะ พวกเขาอยู่ในรูปแบบแปลก ๆ

ข้อความหลังจากทำod -c filenameเช่นนี้:

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

วิธีถอดรหัสนี้

ฉันลองแล้ว hexdump -C filename

ผลลัพธ์เป็นดังนี้:

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 00 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 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 |

เพื่อชี้แจงไฟล์หลักซึ่งเป็นไฟล์ปกติมีหนึ่งคุณลักษณะที่แสดงเป็นรูปแบบแปลก ๆ ดังนั้นเรากำลังดูไฟล์ raw / binary

การดัมพ์แบบฐานแปดบนไฟล์ปกติแก้ไขปัญหาการดู

ด้วยgrep 'id=123' regular_file | head -1 | od -cฉันก็สามารถดูว่ามีหมายเลขอยู่ในนั้น ฉันคาดหวังว่า 1 มันแสดงให้เราเห็นว่าเป็น 001


4
ในการ "ตีความ" คุณต้องทราบว่าฟอร์แมตเก็บไว้ในรูปแบบใด
Kevin

ฉันได้รับแจ้งว่าตัวเลขอยู่ในรูปแบบไบนารีโดยเฉพาะจำนวนเต็มไบนารี นั่นช่วยฉันได้ไหม

ไม่ทุกอย่างในคอมพิวเตอร์เป็นเลขฐานสองคุณต้องรู้เลย์เอาต์ของไฟล์ - แต่ละหมายเลขแต่ละตัวหมายถึงหมายเลขใด คุณได้ไฟล์นี้มาจากไหน
Kevin

เพื่อชี้แจงฉันมีไฟล์ปกติเช่นกัน [seq = 132253932] [Major = S] [Minor = D] [src = seq1] [Id = 0] [ref = 0] [วันที่ = 20120307] หนึ่งแท็กในไฟล์ปกติมีค่าเป็น ascii ไฟล์ปกติมักจะใช้เพื่ออ่านบันทึก แต่เพื่อให้แน่ใจว่ามันมีค่าที่ถูกต้อง แต่ในรูปแบบที่แตกต่างกันเรากำลังดูที่ไฟล์ไบนารีนี้

ด้านขวาของดัมพ์เลขฐานสิบหก "มาตรฐาน" โดยทั่วไปแล้วจะเป็นตัวแทน ASCII ของข้อมูลนั้น หากคุณเห็นข้อความนี้: not textในมุมมอง ASCII นั่นไม่ได้หมายความว่ามันเป็น ASCII สำหรับโปรแกรมที่อ่านไฟล์ เช่น. หมายเลข7957706749327538292เมื่อเข้ารหัสเป็นจำนวนเต็ม 64 บิตที่ไม่ได้ลงนาม ลักษณะเช่นนี้ในมุมมอง ASCII not textนี้:
Peter.O

คำตอบ:


4

มีหลายวิธีในการเก็บตัวเลข - ASCII (ซึ่งสามารถมีตัวแปรเฉพาะโลแคลเช่นใช้ ',' เพื่อแยกส่วนที่เป็นเศษส่วนหรือเป็นการจัดกลุ่มเป็นพัน), เลขจำนวนเต็มไบนารี (จำนวนตัวแปรบิต) / float / double (ทั้งหมด ซึ่งอาจแตกต่างกันไปขึ้นอยู่กับสถาปัตยกรรม endian และไม่ว่าจะเป็นซอฟต์แวร์ที่ผลิตไฟล์เป็นตัวแทนการแสดงออก), BCD (ไม่มีการบีบอัด, บรรจุ, จุดคงที่และตัวแปรอื่น ๆ ), ทศนิยมทศนิยมไบรหัสสอง ...

ไม่มีมาตรฐาน


19

หนึ่งในสิ่งแรกที่ผมต้องจดจำสำหรับวิทยาการคอมพิวเตอร์เป็น+ ข้อมูลการตีความ = ข้อมูลที่เป็นประโยชน์ ข้อสรุปของเรื่องนี้คือถ้าคุณไม่มีข้อมูลหรือการตีความคุณไม่มีอะไรเลย ข้อมูลไม่สามารถบอกวิธีตีความได้ (คุณสามารถมีเมทาดาทาที่บอกคุณได้ แต่จากนั้นคุณต้องรู้วิธีตีความเมทาดาทาด้วย)

ภายใต้สถานการณ์ฉันขอแนะนำให้ลองทำสิ่งนี้:

file filename

ถ้ามันเกิดขึ้นกับสิ่งที่ชอบ:

filename: data

และคุณมีอย่างความคิดว่ารูปแบบคือไม่มีสิ่งที่โปรแกรมมันมาจากสิ่งที่ใช้เป็นหรืออะไรเกี่ยวกับเนื้อหาของfilenameแล้วคุณอาจจะให้ขึ้น

การถ่ายโอนข้อมูล Octal

od(ดัมพ์แบบฐานแปด) สร้างดัมพ์แบบข้อความและเลขฐานแปดแบบไฮบริด ที่ไม่ใช่ตัวเลขเป็นตัวอักษรพิมพ์อย่างใดอย่างหนึ่งเช่นo, s, fตัวละคร ฯลฯ หรือไม่พิมพ์เช่น\0(ASCII 0, NUL) หรือ\a(ASCII 7 BEL) หรือตัวเลขในฐานที่ 8 ที่มีคำนำหน้ามาตรฐาน C 0(เช่น032= 26 ทศนิยม). ไฟล์ของคุณถูกตีความว่าเป็นกระแสของไบต์ 8 บิต

เอาท์พุทการถ่ายโอนข้อมูล Hex

hexdumpสร้างดัมพ์เลขฐานสิบหกแบบดั้งเดิมโดยมีหนึ่งคอลัมน์ที่แสดงรายการ 8 บิตเป็นเลขฐานสิบหกส่วนอีกรายการหนึ่งที่แสดงว่าอักขระ ASCII ใดที่ไบต์เหล่านี้สอดคล้องกับ ot หากมี (ถ้าค่าไบต์เป็นอักขระ ASCII ที่ไม่สามารถพิมพ์ได้หรือไม่ใช่อักขระ ASCII เลย , .มีการแสดงที่ตำแหน่งนั้น) อีกครั้งไฟล์ของคุณถูกตีความว่าเป็นกระแสของไบต์ 8 บิต

จำนวนเต็ม

หากไฟล์ของคุณประกอบด้วยเลขจำนวนเต็มไบนารี่ 100% (เช่นเป็นส่วนหัว, ชุด, หนึ่งมิติของการแทนจำนวนเต็มบางส่วน) คุณต้องตอบคำถามเหล่านี้ด้วยตัวคุณเอง:

  • พวกเขา 'ถูกต้อง' ไบนารีหรือทศนิยมทศนิยม (BCD) ? (อาจเป็นเลขฐานสอง)
  • ความกว้างเป็นบิต
  • หากความกว้างของมันไม่ใช่หลายคูณ 8 พวกเขาจะเต็มไปด้วยบิตเช่นข้อความ SMS หรือ Base64 หรือจัดแนวไบต์?
  • หากความกว้างของพวกเขาคือ 8 บิตหรือมากกว่าลำดับไบต์คืออะไร? มันเป็น Big Endian, Little Endian หรืออย่างใดอย่างหนึ่งที่แปลกกว่า
  • เป็นจำนวนเต็มลงชื่อหรือไม่ได้ลงชื่อ ?
  • หากพวกเขาลงนามพวกเขาจะแสดงในส่วนเสริมของสอง (มีแนวโน้ม) หรือส่วนประกอบของคนหรือสิ่งที่หายากและแปลก?

อาจจะมีมากขึ้นฉันลืมตอนนี้

และนี่เป็นเพียงชุดอาร์เรย์จำนวนเต็มมิติเดียวซึ่งมาจากสถาปัตยกรรมคอมพิวเตอร์ทั่วไปที่ทันสมัย หากข้อมูลของคุณมีความซับซ้อนใด ๆ สิ่งต่าง ๆ จะมีขนดกมันจะกลายเป็นเรื่องง่ายที่จะชนะลอตเตอรีได้อย่างรวดเร็วกว่าการคาดเดารูปแบบ และคุณต้องเดา (การศึกษาเดา แต่เดา) เว้นแต่ว่าคุณจะรู้ว่ารูปแบบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.