使用 binwalk 自动提取已知文件类型(例如 zip)

逆向工程 二元分析 文件格式
2021-07-06 23:47:40

这应该很容易使用,binwalk但是我无法理解以下语法做错了什么:

$ wget --content-disposition https://github.com/devttys0/binwalk/archive/v2.1.1.zip
$ wget --content-disposition https://github.com/devttys0/binwalk/archive/v2.0.1.zip
$ cat binwalk-2.0.1.zip binwalk-2.1.1.zip > full
$ binwalk -r -C output -e full

导致以下情况:

$ ls output/_full.extracted
binwalk-2.1.1/

显然它缺少binwalk-2.0.1扩展目录。binwalk-2.0.1哪儿了

我需要使用-r标志(提取后删除雕刻文件),因为它会生成巨大的 zip 并填满我的磁盘(请参阅雕刻文件的大小通常与原始文件相同

1个回答

UnZip实施是你的问题的原因。binwalk提取时full,第一个 ZIP 实际上包含两个 ZIP,但UnZip只提取最后一个(它也独立存储在binwalk提取的第二个 ZIP中)。

binwalk期望p7zip,所以安装p7zip来解决这个问题。

$ wget https://github.com/devttys0/binwalk/archive/v2.0.1.zip
$ wget https://github.com/devttys0/binwalk/archive/v2.1.1.zip
$ mv v2.0.1.zip binwalk-2.0.1.zip
$ mv v2.1.1.zip binwalk-2.1.1.zip
$ cat binwalk-2.0.1.zip binwalk-2.1.1.zip > full
$ ls -l
2255007 binwalk-2.0.1.zip
 288920 binwalk-2.1.1.zip
2543927 full
$ binwalk -r -C output -e full
$ ls -l output/_full.extracted/
2543927 0.zip      # both ZIPs
 288920 22689F.zip # last ZIP
$ mkdir final && unzip output/_full.extracted/'*.zip' -d final/
$ ls -l final/
binwalk-2.1.1                                   # bad
$ rm -r output/ final/                          # cleanup
                                                # install p7zip                                                          
$ binwalk -r -C output -e full
$ ls -l output/_full.extracted/
binwalk-2.0.1
binwalk-2.1.1                                   # good