如果我们在固件分析中使用binwalk看到如下的分析结果
➜ binwalk wdr7660gv1-cn-up_2019-08-30_10.37.02.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
512 0x200 uImage header, header size: 64 bytes, header CRC: 0xDEFB3DA, created: 2018-09-05 07:32:57, image size: 48928 bytes, Data Address: 0x41C00000, Entry Point: 0x41C00000, data CRC: 0x2A36A3AD, OS: Firmware, CPU: ARM, image type: Standalone Program, compression type: lzma, image name: "U-Boot 2014.04-rc1-gdbb6e75-dirt]"
576 0x240 LZMA compressed data, properties: 0x5D, dictionary size: 67108864 bytes, uncompressed size: -1 bytes
66560 0x10400 LZMA compressed data, properties: 0x6E, dictionary size: 8388608 bytes, uncompressed size: 3869672 bytes
1422400 0x15B440 LZMA compressed data, properties: 0x5A, dictionary size: 8388608 bytes, uncompressed size: 7170 bytes
1423926 0x15BA36 LZMA compressed data, properties: 0x5A, dictionary size: 8388608 bytes, uncompressed size: 200 bytes
...
然后我们像提取0x10400位置的文件就需要用到DD工具,用dd命令提取,下面是它的命令解析:
bashbs=字节数 一次读写的比特数(默认:512);
count=块数 只将复制指定数量的输入块
ibs=字节数 一次读取的字节数(默认:512)
if=文件 从指定文件而非标准输入来进行读取
obs=字节数 一次写入指定字节数(默认:512)
of=文件 写入到指定文件而非标准输出
skip=块数 在输入开始处跳过指定的 ibs 大小的块数
对于这个情况下count的计算:1422400-66560=1355840
➜ dd if=wdr7660gv1-cn-up_2019-08-30_10.37.02.bin of=ac7660.lzma bs=1 skip=66560 count=1355840
记录了1355840+0 的读入
记录了1355840+0 的写出
1355840字节(1.4 MB,1.3 MiB)已复制,3.98426 s,340 kB/s
参考:https://tttang.com/archive/1418/