图像与设计
怀疑文件藏有隐写数据时,按文件类型系统化检测与提取隐藏信息
面对图片、音频、文本或任意文件怀疑存在隐写内容时,按文件类型选择对应工具与流程进行检测和提取。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 46/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 44/100 ×0.15
适用场景
怀疑文件藏有隐写数据时,按文件类型系统化通用
解决思路
- 先做关联路由:若隐藏数据来自网络流量或内存转储,先加载 traffic-analysis-pcap 或 memory-forensics-volatility 提取文件;若提取出的数据还需解密/解码,加载 classical-cipher-analysis;需要工具安装与命令参考时加载 STEGO_TOOLS_GUIDE.md。
- 图片 LSB 分析:用 zsteg image.png 自动检测、zsteg image.png -a 尝试所有已知方法、zsteg image.png -b 1 提取第 1 位平面、zsteg image.png -E "b1,rgb,lsb,xy" 指定提取模式;用 java -jar StegSolve.jar 切换颜色平面(Red 0、Green 0、Blue 0)查找隐藏图像/文本,并用 Data Extractor 指定位平面与字节序;用 stegoveritas image.png 运行 exiftool、binwalk、zsteg、foremost 与颜色平面提取等自动化分析。
- PNG 专项:用 pngcheck -v image.png 校验结构并查找隐藏 chunk(tEXt、zTXt、iTXt 及自定义私有 chunk);若 CRC 与声明尺寸不匹配说明图片被裁剪,用 Python 脚本暴力枚举宽高(遍历 1–2000)匹配 IHDR CRC 以恢复隐藏行列;用 apngdis image.png 提取 APNG 所有帧。
- JPEG 专项:用 steghide extract -sf image.jpg 无口令提取、steghide extract -sf image.jpg -p PASSWORD 带口令提取、steghide info image.jpg 检查是否嵌入数据;用 stegcracker image.jpg wordlist.txt 暴力破解 steghide 口令;用 jsteg reveal image.jpg output.txt 提取 JPEG LSB;用 exiftool -v3 image.jpg 查看详细元数据与结构,用 jpegdump image.jpg 分析原始 JPEG marker。
- EXIF 元数据:用 exiftool image.jpg 全面提取元数据,用 exiftool -b -ThumbnailImage image.jpg > thumb.jpg 提取缩略图,用 exiftool -all= image.jpg 清除全部元数据;检查 Comment、UserComment、Artist、Copyright 等字段,并用 strings image.jpg | grep -i "flag\|key\|secret" 搜索隐藏字符串。
- GIF 调色板:用 gifsicle -I image.gif 查看信息、gifsicle --color-info image.gif 查看调色板细节,检查颜色表顺序中是否藏数据;用 convert -coalesce image.gif frame_%d.png 提取所有动画帧。
- 音频频谱分析:用 Sonic Visualiser 的 Layer → Add Spectrogram 查看频谱中的可视图案(文字/图像);用 Audacity 的 Analyze → Plot Spectrum 或切换 Spectrogram 视图;用 sox audio.wav -n spectrogram -o spectro.png 命令行生成频谱图。
- 音频 LSB:用 DeepSound(Windows GUI)打开音频文件提取隐藏文件;用 python3 WavSteg.py -r -i audio.wav -o output.txt -n 1 提取 1 个 LSB、-n 2 提取 2 个 LSB。
- DTMF/Morse/SSTV:用 multimon-ng -t wav -a DTMF audio.wav 解码电话按键音;用 Audacity 目视 on/off 模式或在线解码器解 Morse 码;用 qsstv 或 RX-SSTV 解码 SSTV 音频图像。
- WAV 头部检查:用 Python wave 模块读取帧数、声道数、采样宽度,计算期望大小(帧数×声道×采样宽度+44 字节头),与 os.path.getsize 实际大小比较,若实际更大则说明音频数据后附加了额外数据。
- 多格式 polyglot 检测:用 file suspicious_file 判断类型、xxd suspicious_file | head 检查 magic bytes、binwalk suspicious_file 查找嵌入文件;对图片尝试 unzip image.jpg -d extracted/ 或 7z x image.jpg -oextracted/(常见 PDF+ZIP、JPEG+ZIP、JPEG+RAR、PNG+ZIP)。
- 附加/嵌入数据提取:用 binwalk image.png 扫描、binwalk -e image.png 提取嵌入文件、binwalk --dd='.*' image.png 提取全部;用 foremost -i suspicious_file -o output_dir/ 进行文件雕刻;若 binwalk 显示嵌入 ZIP 在偏移 0x1234,用 dd if=suspicious_file bs=1 skip=$((0x1234)) of=extracted.zip 手动提取。
- NTFS 备用数据流(ADS):用 dir /r file.txt 或 Get-Item file.txt -Stream * 列出 ADS;用 more < file.txt:hidden_stream 或 Get-Content file.txt -Stream hidden_stream 读取隐藏流;用 echo "hidden data" > file.txt:secret 创建 ADS 用于测试。
- steghide 口令暴力破解:用 stegcracker image.jpg /usr/share/wordlists/rockyou.txt 进行字典攻击;用 stegseek image.jpg /usr/share/wordlists/rockyou.txt 作为更快替代(约快 10000 倍)。
- 文本空白编码:用 stegsnow -C message.txt 提取隐藏消息、stegsnow -C -p PASSWORD message.txt 带密码提取;用 cat -A file.txt | head 显示制表符(^I)与行尾($),用 xxd file.txt | grep "09 20\|20 09" 查找 tab/空格模式(tab=1、space=0 或相反)。
- 零宽字符检测:识别 U+200B(零宽空格)、U+200C(ZWNJ)、U+200D(ZWJ)、U+FEFF(BOM);用 Python 脚本统计这些字符数量,将 U+200B 映射为 0、其他映射为 1 组成二进制并转 ASCII;也可用 holloway.nz/steg 等在线解码器。
- 同形字替换检测:用 Python 脚本遍历文本,对 ord(c) > 127 的字符打印位置、字符、码点与 unicodedata.name,识别拉丁字母与西里尔字母等同形字符混用。
- 按决策树逐类排查:图片(PNG/BMP/JPEG/GIF)依次检查元数据、结构、LSB、尺寸与 CRC、附加数据、polyglot;音频依次检查频谱、LSB、DTMF、Morse、SSTV、文件大小与头部;文本依次检查空白、零宽字符、同形字、多重编码;任意文件用 strings -n 8 file | grep -i "flag\|key\|pass"、binwalk -e、file、xxd 检查 magic bytes,NTFS 检查 ADS;需要口令时用 stegseek/stegcracker 并参考题目提示或尝试常见口令(password、文件名、题目名)。
适用边界 · 注意事项
- 文件并非来自可疑来源或没有隐写迹象时,不必运行全套工具链,避免浪费时间。
- 数据实际来自网络流量或内存转储时,应先做流量分析或内存取证,而不是直接对单个文件做隐写分析。
- 提取出的隐藏数据若已加密或编码,应转入古典密码/编码分析流程,而非继续用隐写工具处理。