
역방향 hexdump를 수행하는 방법을 검색하던 중 xxd가 언급된 것을 발견했습니다. 그러나 단순히 다음과 같이 작동하지 않는 것 같습니다.
xxd -r hexdumpfile > binaryfile
xxd infile
그런 다음 과 의 출력 간의 차이를 비교하여 hexdump infile
세 가지 차이점을 발견했습니다.
- xxd 출력에는 주소 뒤에 콜론이 있습니다.
- xxd 출력은 반전된 데이터 위치를 갖습니다(예를 들어,
5a42
hexdump 출력은425a
xxd 출력이 됩니다). - 각 줄 뒤에는 추가 문자가 있습니다.
서버에는 특정 파일의 16진수 버전만 있습니다. xxd를 사용하여 바이너리 데이터를 올바르게 되돌리려면 어떻게 해야 합니까?
답변1
내가 아는 한 변환을 수행하는 명령은 없지만 몇 단계로 쉽게 나눌 수 있습니다.
hexdump
다음을 사용하여 출력 에서 주소를 제거합니다.sed
- 다음을 사용하여 바이너리로 변환
xxd
5a42
다음을425a
사용한 엔디안 변환(예: )dd
전체 명령은 다음과 같습니다.
sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile
답변2
이 답변은 다음의 교차 게시물입니다.https://stackoverflow.com/a/52834021/6770384
하나의 명령으로 변환을 수행할 수 있습니다 sed
. :
주소 뒤에 를 추가하고 엔디안을 변경하면 충분합니다 ( ab12
로 전환 12ab
).
sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d' dump | xxd -r
알려진 버그(댓글 섹션 참조)
- 원본 파일의 길이가 홀수인 경우(예: 1, 3, 5, 7, ..., 바이트 길이) 후행 널 바이트가 추가됩니다.
- 원본 파일의 반복 섹션 을
hexdump
.*
답변3
.-p
xxd -r -p hexdumpfile > binaryfile
답변4
아래 사항을 간단히 사용할 수 있습니다.
필요한 형식으로 hexdump 가져오기
hexdump -Cv <binary_file.bin> > 바이너리_파일.txt
-C는 데이터를 바이트 단위로 인쇄합니다.
-v는 반복되는 내용에 *를 사용하지 않습니다.
이제 각 줄의 bin_file.txt에서 처음과 마지막 몇 개의 문자를 제거해야 합니다. 여기서 sed 명령을 사용할 수 있습니다.
이제 xxd 명령을 사용하십시오
xxd -r -p 바이너리_파일.txt > 복구_바이너리_파일.bin
두 파일의 md5sum을 확인할 수 있습니다. 일치해야합니다
md5sum 바이너리_파일.bin
md5sum Recover_binary_file.bin