바이너리 파일의 8진수 또는 16진수 덤프를 해석하는 방법은 무엇입니까?

바이너리 파일의 8진수 또는 16진수 덤프를 해석하는 방법은 무엇입니까?

바이너리 파일에는 문자열과 일부 숫자가 있습니다. 이렇게 하면 od -c filename문자열 strings filename을 올바르게 볼 수 있습니다. 하지만 숫자는 어떻습니까? 그들의 형식은 이상합니다.

완성된 텍스트는 od -c filename다음과 같습니다.

0000000 036 \0 032 004 SD \0 \0 \0 \0 시퀀스 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 또는 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 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 |ä...또는E...osfap1|

명확히 하기 위해 일반 파일인 기본 파일에는 이상한 형식의 표시된 속성이 있으므로 원시/바이너리 파일을 보고 있습니다.

일반 파일의 8진수 덤프를 수행하여 보기 문제를 해결했습니다.

그걸로 grep 'id=123' regular_file | head -1 | od -c거기에 어떤 숫자가 있는지 알 수 있어요. 원래는 1인줄 알았는데 001이 나오더군요.

답변1

컴퓨터 과학에 관해 제가 가장 먼저 기억해야 할 것 중 하나는데이터 + 설명 = 유용한 정보. 데이터나 설명이 부족하면 아무 것도 없다는 결론이 나옵니다. 데이터 자체는 이를 해석하는 방법을 알려주지 않습니다. (이를 알려주는 메타데이터가 있을 수 있지만 이를 해석하는 방법을 알아야 합니다.메타데이터또한)

이 경우 다음을 시도해 보는 것이 좋습니다.

file filename

이런 일이 발생하면:

filename: data

당신은전적으로형식이 무엇인지, 어떤 프로그램에서 왔는지, 목적이 무엇인지, 내용이 무엇인지 알지 못한 채 filename포기해야 할 것입니다.

8진 덤프 출력

od(8진 덤프) 혼합된 텍스트와 8진 덤프를 생성합니다. 숫자가 아닌 문자는 , 등의 인쇄 가능한 문자이거나 o( sASCII 0, ) 또는 (ASCII 7, ) f과 같은 인쇄할 수 없는 문자 또는 표준 C 접두사가 있는 기본 8 숫자 (예: 10진수 = 26)입니다. 파일이 스트림으로 해석됩니다.\0NUL\aBEL00328비트 바이트.

16진수 덤프 출력

hexdump16진수로 8비트 바이트를 나열하는 하나의 열과 해당 바이트가 해당하는 ASCII 문자(있는 경우)를 표시하는 다른 열(바이트 값이 인쇄할 수 없는 ASCII 문자이거나 ASCII가 아닌 경우)을 사용하여 기존 16진수 덤프를 생성합니다. 문자), .해당 위치에 표시됨). 다시 말하지만, 파일은 스트림으로 해석됩니다.8비트 바이트.

정수

파일에 100% 이진 정수(예: 일부 정수 표현의 헤드리스, 균일, 1차원 배열)가 포함된 경우 다음 질문에 모두 답해야 합니다.

  • "올바른" 바이너리입니까, 아니면이진 코드 십진수(BCD)? (아마도 바이너리)
  • 너비는 얼마입니까?
  • 너비가 8의 배수가 아닌 경우 SMS 메시지나 Base64처럼 비트 패킹되어 있습니까, 아니면 바이트 정렬되어 있습니까?
  • 8비트 이상인 경우 너비는 얼마입니까?바이트 순서? Big Endian, Little Endian 또는 다른 희귀 유형 중 하나입니까?
  • 정수이다서명됨 또는 서명되지 않음?
  • 그들이 서명했다면, 그들이 대표했습니까?2의 보수(가능성이 더 높음) 또는사람의 보완, 아니면 희귀하고 이상한 것인가요?

지금은 더 많은 것을 잊고 있을지도 모릅니다.

이는 일반적인 최신 컴퓨터 아키텍처의 1차원 균일 정수 배열에만 작동합니다. 데이터가 복잡하면 상황이 너무 까다로워져서 형식을 추측하는 것보다 복권에 당첨되는 것이 더 쉬워집니다. 당신은요가지다형식을 모르는 경우 추측(교육받은 추측이지만 추측에 불과함)입니다.

답변2

숫자를 저장하는 방법에는 여러 가지가 있습니다. ASCII(소수 부분을 구분하거나 천 단위 그룹으로 ","를 사용하는 등 로케일별 변형이 있을 수 있음), 이진 정수(가변 자릿수)/부동 소수점/더블( 이 모든 것은 엔디안 아키텍처와 파일을 생성하는 소프트웨어가 표현을 형식화하는지 여부, BCD(비압축, 팩, 고정 소수점 및 기타 변형), 이중 quinimal 코드 십진수 등에 따라 달라질 수 있습니다.

표준이 없습니다.

관련 정보