分析与分离隐藏在图片中的文件方法
1. 背景分析
CTF中会遇到给一张图片的情况,其中图片中可能会隐藏一些文件,比如另外的图片或者压缩包文件。
2. 原理分析
以jpg图片为例,一个完整的 jpg 文件由 FF D8 开头,FF D9结尾,图片查看器会忽略 FF D9 以后的内容,因此可以在 jpg 文件中加入其他文件。
3. 图片分析
可以使用binwalk进行分析,判断其中是否存在隐藏文件,kali中自带,也可以下载windows中安装
# 分析图片
binwalk 1.png 在kali中
python -m binwalk 1.png 在windows中
# 发现存在多个文件
"""
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 1536 x 864, 8-bit/color RGB, non-interlaced
140 0x8C Zlib compressed data, best compression
1193560 0x123658 Cisco IOS microcode, for ""
1318977 0x142041 PNG image, 1536 x 864, 8-bit/color RGB, non-interlaced
2949139 0x2D0013 Zip archive data, encrypted at least v2.0 to extract, compressed size: 64, uncompressed size: 52, name: flag.txt
2949331 0x2D00D3 End of Zip archive, footer length: 22
"""
4. 分离图片文件
注意binwalk分离隐藏一个文件没问题,但是多个文件的隐藏还是建议使用foremost分离
4.1 使用binwalk分离-利用dd
dd if=1.jpg of=1.zip skip=48221 bs=1
解释:if 指定输入文件,of 指定输出文件,skip 指定从输入文件开头跳过48221个块后开始复制,bs设
置每次读写块的大小为1字节
4.2 使用binwalk分离-自动分离
# 在当前目录中生成分离的文件
python -m binwalk -e 1.png
4.3 使用foremost工具分离
# 在当前目录中生成分离的文件
foremost 1.png # 在kali中
foremost.exe 1.png # 在windows中
4.4 使用hex编辑器人工分离
hex编辑器有很多,win下有用得较多的010editor、winhex、UltraEdit等,linux下有hexeditor等
搜索hex字符:zip文件的开头16进制为504B0304、png文件的开头为89504E47,找到这些幻数头,进行人工分离另存为新文件,然后根据幻数头修改文件后缀
参考资料:
评论 (0)