文件头
JPEG (jpg) 文件头:FF D8 FF 文件尾:FF D9 PNG (png),文件头:89 50 4E 47 Windows Bitmap (bmp), 文件头:42 4D 文件尾: GIF (gif),文件头:47 49 46 38 XML (xml),文件头:3C 3F 78 6D 6C HTML (html),文件头:68 74 6D 6C 3E MS Word/Excel (xls.or.doc),文件头:D0 CF 11 E0 MS Access (mdb),文件头:53 74 61 6E 64 61 72 64 20 4A Adobe Acrobat (pdf),文件头:25 50 44 46 2D 31 2E Windows Password (pwl),文件头:E3 82 85 96 ZIP Archive (zip),文件头:50 4B 03 04 RAR Archive (rar),文件头:52 61 72 21 Wave (wav),文件头:57 41 56 45 AVI (avi),文件头:41 56 49 20 TIFF (tif), 文件头:49 49 2A 00 文件尾:
三板斧工具组合
以下是针对文件(尤其是GIF等图像)分析的 三板斧工具组合 及其应用场景解析,结合逆向工程、隐写分析和数据提取的需求:
第一板斧:基础结构分析
工具组合:010 Editor + strings
目标
快速解析文件头、元数据、隐藏文本,定位可疑内容。
应用场景
-
010 Editor
-
功能:查看文件十六进制结构,解析GIF格式的逻辑块(如头部、图像描述块、注释块等)。
-
操作示例:
-
使用
GIF.bt
模板自动解析GIF结构。 -
检查是否存在非常规块(如注释块中的隐藏文本)。
-
-
优势:可视化分析,支持自定义脚本批量解析。
-
-
strings
-
功能:提取文件中的可打印字符串(如URL、密钥、调试信息)。
-
操作示例:
strings -n 8 -t x suspicious.gif | grep "http\|key"
-
典型输出:
0x1A3: http://malicious.site 0x2F0: FLAG{He1lo_Steg0}
-
适用场景
初步筛查可疑文件中的明文信息。
逆向分析二进制文件中的关键字符串。
第二板斧:隐写分析
工具组合:StegSolve + zsteg
目标
检测图像隐写术(如LSB隐写、通道隐藏、颜色平面异常)。
应用场景
-
StegSolve
-
功能:逐帧/逐通道分析GIF,查看各颜色通道(RGB/Alpha)和位平面的异常。
-
操作示例:
-
切换至 Frame Browser 查看GIF各帧差异。
-
使用 Image Combiner 对比不同位平面(如仅显示最低有效位)。
-
-
典型发现:某帧的LSB位中隐藏二维码。
-
-
zsteg
-
功能:自动化检测PNG/BMP中的LSB隐写(对GIF支持有限,但可尝试提取)。
-
操作示例:
zsteg -a suspicious.gif
-
输出示例:
[?] 123 bytes of extra data after image end (IEND), offset = 0x1234
-
注意事项
GIF隐写可能需要结合逐帧分析(如使用StegSolve)。
zsteg对GIF支持较弱,可改用 GifSteg 或手动提取帧后分析。
第三板斧:数据分离与深度提取
工具组合:binwalk + foremost
目标
分离文件中嵌入的其他文件(如压缩包、文本、加密数据)。
应用场景
binwalk
功能:扫描文件签名,识别潜在嵌入文件(如ZIP、PNG、Base64)。
操作示例:
binwalk -Me suspicious.gif
输出示例:
DECIMAL HEXADECIMAL DESCRIPTION 0 0x0 GIF image data 12345 0x3039 Zip archive data
foremost
功能:按文件头自动提取嵌入内容(如从GIF中分离出隐藏的ZIP)。
操作示例:
foremost -i suspicious.gif -o output_dir
典型结果:
output_dir/zip/00012345.zip
适用场景
提取GIF尾部附加的加密压缩包。
分离被拼接的多文件组合(如图片+文本拼接)。
综合实战流程
案例:CTF题目中的GIF隐写
第一板斧:
用
strings
发现GIF末尾有PK
头(ZIP文件标志)。用 010 Editor 确认尾部附加数据偏移量。
第二板斧:
用 StegSolve 检查各帧未发现异常,排除LSB隐写。
第三板斧:
运行
binwalk -e suspicious.gif
提取尾部ZIP文件。解压ZIP后获得加密文本,进一步破解获得Flag。
工具链总结
阶段 | 工具 | 核心用途 |
---|---|---|
初步分析 | 010 Editor、strings | 结构解析、明文提取 |
隐写检测 | StegSolve、zsteg | 通道分析、LSB隐写破解 |
数据提取 | binwalk、foremost | 文件分离、嵌入内容恢复 |
四个Linux命令
1.
strings
命令功能
从二进制文件中提取所有可打印的字符串(ASCII 或 Unicode),常用于逆向工程、文件分析或调试。
基本用法
strings [选项] <文件名>
常用选项:
-n <长度>
:仅显示长度 ≥ 指定值的字符串(默认4字符)。
-t {d,o,x}
:显示字符串在文件中的偏移量(十进制/八进制/十六进制)。
-e {s,S,b,l}
:指定字符编码(如s
为 ASCII,l
为 16 位 Unicode)。示例
# 提取文件中的长度≥8的字符串,并显示十六进制偏移量 strings -n 8 -t x suspicious.bin # 提取 Unicode 字符串 strings -e l malware.exe典型场景
逆向工程:查找二进制文件中的密钥、URL 或调试信息。
CTF 隐写分析:从图片或文档中提取隐藏的文本 Flag。
恶意软件分析:定位可疑字符串(如
http://
或key=
)。
2.
zsteg
命令功能
自动化检测 PNG/BMP 图像中的隐写数据,支持 LSB(最低有效位)隐写、通道分析及数据提取。
基本用法
zsteg [选项] <图片文件>
常用选项:
-a
:全面检测所有可能的隐写方式。
-E <模式>
:指定隐写层并提取数据(如b1,rgb,lsb
)。
-v
:显示详细分析过程。示例
# 全面检测 PNG 图像中的隐写数据 zsteg -a flag.png # 提取 RGB 通道 LSB 隐藏的数据并保存到文件 zsteg -E "b1,rgb,lsb" flag.png -o hidden.zip典型场景
CTF 隐写题:从图片中提取 LSB 隐藏的 Flag 或加密数据。
安全分析:检测图片中是否携带恶意代码。
限制:对 GIF 支持较弱,需结合
StegSolve
逐帧分析。
3.
binwalk
命令功能
扫描文件以识别嵌入的其他文件(如 ZIP、PNG、ELF 等),支持签名匹配与数据提取。
基本用法
binwalk [选项] <文件名>
常用选项:
-e
:自动提取已知文件类型。
-M
:递归提取嵌套文件(需配合-e
)。
-D "文件类型"
:仅提取指定类型的文件(如-D "zip"
)。示例
# 扫描文件并显示嵌入的签名 binwalk firmware.bin # 提取所有可识别的文件到 output 目录 binwalk -e -M firmware.bin # 仅提取 JPEG 文件 binwalk -D "jpeg" image.jpg典型场景
固件分析:提取固件中的内核、配置文件。
CTF 文件分离:从复合文件中分离出隐藏的 Flag 图片或压缩包。
数据恢复:从损坏文件中恢复部分内容。
4.
foremost
命令功能
基于文件头/尾签名从原始数据中恢复文件,支持自定义规则,适合深度数据提取。
基本用法
foremost [选项] -i <输入文件> -o <输出目录>
常用选项:
-c <配置文件>
:指定自定义配置文件(定义文件签名)。
-t <文件类型>
:仅恢复指定类型(如jpg,pdf
)。
-v
:显示详细提取过程。示例
# 从磁盘镜像中恢复所有支持的文件类型 foremost -i disk.img -o recovery/ # 仅恢复 JPEG 和 ZIP 文件 foremost -t jpg,zip -i data.bin -o output/典型场景
数字取证:从硬盘镜像中恢复已删除文件。
CTF 数据恢复:从二进制文件中提取隐藏的图片或文档。
文件碎片重组:通过签名匹配拼接碎片化文件。
工具对比与组合使用
工具 | 核心功能 | 适用场景 | 优势 |
---|---|---|---|
strings | 提取可打印字符串 | 逆向工程、文本线索提取 | 快速筛查明文信息 |
zsteg | 图像隐写分析(LSB/通道) | PNG/BMP 隐写检测 | 自动化分析隐藏数据 |
binwalk | 文件签名识别与提取 | 固件分析、复合文件分离 | 支持递归提取和多种文件类型 |
foremost | 基于签名的深度文件恢复 | 数据恢复、数字取证 | 灵活支持自定义签名 |
组合使用示例
CTF 题目:分离图片中的隐藏压缩包并提取 Flag
初步分析:
strings image.png | grep "flag" # 查找明文字符串 zsteg -a image.png # 检查隐写数据文件分离:
binwalk -e image.png # 提取嵌入的 ZIP 文件深度恢复:
foremost -i extracted.zip -o flag_output # 确保完整提取
常见问题
zsteg
无法检测到隐藏数据
尝试逐通道分析(如
zsteg -E "r,g,b"
)或检查其他位平面。
binwalk
提取不完整
使用
foremost
补充提取,或手动通过dd
命令切割数据。
strings
输出过多干扰信息
结合
grep
过滤关键字(如strings file | grep "KEY"
)。
5.Exiftool命令
在 Kali Linux 中使用 ExifTool 处理图像或文件的元数据(EXIF、IPTC、XMP 等)非常方便。以下是详细的用法指南,涵盖安装、基础操作和进阶场景
基础用法
1. 查看元数据
# 查看文件所有元数据(显示全部标签)
exiftool image.jpg # 查看特定信息(如拍摄时间、GPS坐标、相机型号) exiftool -DateTimeOriginal -GPSPosition -Model image.jpg # 查看所有支持的元数据标签(列表) exiftool -list
隐写分析(CTF 场景)
# 检查隐藏的注释或异常标签 exiftool image.jpg | grep -iE "flag|comment|warning"
实战案例
CTF 题目:从图片元数据中提取 Flag
查看所有元数据:
exiftool suspicious.jpg发现异常注释字段:
Comment: FLAG{Ex1f_1s_P0w3rfu11}直接提取:
exiftool -Comment suspicious.jpg | grep "FLAG"
杂列
不同帧之间的间隔时间
来隐写的。这里利用linux下的工具identify
identify -format "%T " misc39.gif > 1.txt s="11000111110100110011011100111101000110111111101111111011011010101100100111000011000101100101100110110011001110010111001011010111001101100010011011111000101100101011001001101100111000110010001110010110110011001111000010111001110010111000101100011110000101100000110100011010101110011111101" flag="" for i in range(41): #287//7 flag += chr(int(s[7*i:7*(i+1)],2)) print(flag)
参考
《CTF那些事儿》