使用binwalk提取混合类型文件中的子文件

1. 引入

混合类型文件(polyglot)的检测,目前能找到的工具,都是根据YARA规则来做的。这样的检测方法,没有去解析不同类型文件的结构,势必会产生误报。

如果把混合类型文件,看为一个类似于固件的二进制文件,就能用固件扫描工具来检测并提取其中嵌入的子文件了。

2. binwalk的安装

参考1中有详细的安装方式,也给出了一键安装的脚本。这个脚本笔者在ubuntu上20.04.5上安装失败,折腾老半天,后来无意中发现,在ubuntu上可以直接用apt来安装(apt install binwalk),几秒钟就安装成功了。

3. 检测文件类型

从参考3中拿一个文件(EXE+HTML+PDF-1.pdf)来做测试(注意参考3中的文件需要用 git-lfs clone xxx来获取)。

root@aabbcc:/home/prjs/polyglot/binwalk# binwalk EXE+HTML+PDF-1.pdf

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Microsoft executable, portable (PE)
64            0x40            PDF document, version: "1.3"
386           0x182           PDF document, version: "1.3"
457           0x1C9           HTML document header
740           0x2E4           HTML document footer
827           0x33B           Zlib compressed data, best compression
2496          0x9C0           Zlib compressed data, best compression
15192         0x3B58          Zlib compressed data, best compression
25313         0x62E1          Zlib compressed data, best compression

可见,binwalk能检出其中含有 PE(exe)文件,pdf文件,html文件。
当然,也有一些zlib文件属于错误的检测输出。

4. 提取子文件

使用如下命令,能将检测到的所有文件都提取出来(参考2).

root@aabbcc:/home/prjs/polyglot/binwalk# binwalk --dd='.*' EXE+HTML+PDF-1.pdf

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Microsoft executable, portable (PE)
64            0x40            PDF document, version: "1.3"
386           0x182           PDF document, version: "1.3"
457           0x1C9           HTML document header
740           0x2E4           HTML document footer
827           0x33B           Zlib compressed data, best compression
2496          0x9C0           Zlib compressed data, best compression
15192         0x3B58          Zlib compressed data, best compression
25313         0x62E1          Zlib compressed data, best compression

这个命令运行成功后,输出和上一节一致,并且会生成一个_开头的文件夹,进入这个文件夹,就能看到binwalk提取出来的子文件:

root@aabbcc:/home/prjs/polyglot/binwalk# cd _EXE+HTML+PDF-1.pdf.extracted/
root@aabbcc:/home/prjs/polyglot/binwalk/_EXE+HTML+PDF-1.pdf.extracted# ll
total 340
drwxr-xr-x 2 root root  4096 Sep 22 18:59 ./
drwxr-xr-x 3 root root  4096 Sep 22 18:59 ../
-rw-r--r-- 1 root root 36371 Sep 22 18:59 0
-rw-r--r-- 1 root root 35985 Sep 22 18:59 182
-rw-r--r-- 1 root root 35914 Sep 22 18:59 1C9
-rw-r--r-- 1 root root 35631 Sep 22 18:59 2E4
-rw-r--r-- 1 root root   337 Sep 22 18:59 33B
-rw-r--r-- 1 root root 35544 Sep 22 18:59 33B.zlib
-rw-r--r-- 1 root root 10291 Sep 22 18:59 3B58
-rw-r--r-- 1 root root 21179 Sep 22 18:59 3B58.zlib
-rw-r--r-- 1 root root 36307 Sep 22 18:59 40
-rw-r--r-- 1 root root 10009 Sep 22 18:59 62E1
-rw-r--r-- 1 root root 11058 Sep 22 18:59 62E1.zlib
-rw-r--r-- 1 root root 12893 Sep 22 18:59 9C0
-rw-r--r-- 1 root root 33875 Sep 22 18:59 9C0.zlib

这些文件,可以用file查看类型:

root@aabbcc:/home/prjs/polyglot/binwalk/_EXE+HTML+PDF-1.pdf.extracted# file 0
0: MS-DOS executable PE32 executable (console) Intel 80386, for MS Windows
root@aabbcc:/home/prjs/polyglot/binwalk/_EXE+HTML+PDF-1.pdf.extracted# file 182
182: PDF document, version 1.3
root@aabbcc:/home/prjs/polyglot/binwalk/_EXE+HTML+PDF-1.pdf.extracted# file 1C9
1C9: data
root@aabbcc:/home/prjs/polyglot/binwalk/_EXE+HTML+PDF-1.pdf.extracted# vim 1C9

其中文件名为0的是PE文件,文件名为182的是pdf文件,文件名为1C9的用vim打开就能看到是html文件。

5. 总结

在ubuntu上,可以用apt快速安装binwalk,使用binwalk也能很方便的进行固件内容的分析,转换一下思路也就能把binwalk用来辅助做混合类型文件的检测与子文件的提取。

本文用到的文件和提取出来的内容都已经放到(https://github.com/ybdesire/polydet_binwalk),供参考。

6. 参考

  1. https://github.com/ReFirmLabs/binwalk/
  2. https://stackoverflow.com/questions/36530643/use-binwalk-to-extract-all-files
  3. https://github.com/Polydet/polyglot-database/tree/master/files
  4. https://github.com/ybdesire/polydet_binwalk
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值