dd를 사용하여 지정된 두 지점을 사용하여 단일 파일에서 콘텐츠를 추출하는 방법은 무엇입니까?

dd를 사용하여 지정된 두 지점을 사용하여 단일 파일에서 콘텐츠를 추출하는 방법은 무엇입니까?

에서 가져옴여기, Moon.png라는 이미지 파일에 스테가노그래피 섹션이 있습니다. 이로 인해 dd와 같은 것을 사용하여 944와 411781 사이의 Zlib을 추출하는 방법을 생각하게 되었습니다.

$> binwalk moon.png 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 600 x 593, 8-bit/color RGB, non-interlaced
290           0x122           Unix path: /www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef=
944           0x3B0           Zlib compressed data, best compression
411781        0x64885         Zip archive data, encrypted at least v1.0 to extract, compressed size: 35, uncompressed size: 23, name: flag.txt
411976        0x64948         End of Zip archive

작성자가 이 작업을 수행했지만 dd if=./moon.png of=./moon.zip skip=411781 bs=1이는 시작점 0에서 411781까지만 작동합니다.

답변1

작성자는 실제로 파일에서 ZIP 부분을 추출했습니다. 411781부터 시작합니다. 기본적으로 파일의 나머지 부분은 여기에서 복사됩니다.

skipbs=1복사하기 전에 지정된 수의 블록을 처음부터 이동합니다(1블록은 1바이트이므로). 따라서 "zlib" 부분을 얻으려면 다음이 필요합니다.

dd if=./moon.png of=./moon.zlib skip=944 count=410837 bs=1

count이 지점에서 복사된 블록의 수입니다. 따라서 여기서의 수는 끝 위치에서 건너뛴 블록/바이트 수를 뺀 값입니다(411781-944 = 410837).

관련 정보