如何使用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。

相关内容