隐写术检测与提取

SkillDev tools

隐写术检测与提取:文件尾附加、图片 LSB、音频与其他载体、提取验证。 触发词:隐写、stego、LSB、文件尾附加、隐写提取、图片隐写。

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the 隐写术检测与提取 skill

What this skill tells your AI

The instructions your AI receives, as published by dslsdzc/rev-skills in .claude/skills/re-stego/SKILL.md and read by ahel’s review.

何时使用 / 何时不用

  • 用:隐写怀疑(CTF 题/取证对象)、文件尾异常、图片/音频异常(尺寸/噪声/文件结构不匹配)
  • 用:文件结构异常(IEND 后仍有数据/EXIF 段超长/像素数与文件大小不匹配)
  • 用:多载体组合(题目/取证场景常见——多文件各藏一部分)
  • 用:取证场景未分配空间/文件系统残留扫描(与 [[re-disk-forensics]] 配合)
  • 不用:正常文件分析(各归各域技能);加密数据解密(密文 ≠ 隐写,载荷解密转 [[re-crypto-decrypt]]);未知文件类型识别([[re-triage]] 先行)
  • 不用:无载体线索的漫无目的扫描(先有怀疑特征再动手,见 [[decision-tree]])

工具准备

zsteg(图片 LSB 扫描)

  • 多平台: gem install zsteg 或源码(GitHub)
  • 验证: zsteg -hgem list zsteg
  • 覆盖范围:PNG/BMP 支持好,GIF 支持有限——GIF 载体换 python 脚本路径

steghide(图片/音频隐写)

  • Linux: apt install steghide / dnf install steghide;macOS: brew install steghide
  • 验证: steghide --versionsteghide info file.jpg(查看是否嵌入数据,无需密码)

binwalk(尾部扫描)

  • 安装与验证见 [[re-fw-extract]] 工具准备

其他检测/提取工具

  • exiftool(EXIF/元数据):Linux apt install libimage-exiftool-perl / dnf install perl-Image-ExifTool;macOS brew install exiftool;验证 exiftool -ver
  • pngcheck(PNG 结构校验/异常):Linux apt install pngcheck;macOS brew install pngcheck;验证 pngcheck -v
  • sox(音频处理/频谱图):Linux apt install sox;macOS brew install sox;验证 sox --version
  • foremost(数据雕刻,取证场景):apt install foremost / brew install foremost
  • stegsolve(逐位平面查看,Java GUI):GitHub 下载 jar(java -jar stegsolve.jar
  • outguess(JPEG DCT 域,旧工具):Linux apt install outguess
  • ffmpeg(音频格式转换,可选):apt install ffmpeg / brew install ffmpeg
  • python3(位操作/验证脚本 + PIL):安装见 [[re-python]];pip install pillow;验证 python3 -c "from PIL import Image"

操作步骤

按顺序执行,每步产物存档(路径 + sha256,见 [[re-triage]])。

  1. 文件尾附加检测

    binwalk sample.png | tail -20       # 附加数据扫描
    hexdump -C sample.png | tail -10    # 尾部目检
    
    • 尾部附加:文件正常但尾部有多余数据(衔接尾部附加经验([[re-patching]] 补丁制作思路))
    • 结构核对:pngcheck -v sample.png 看 IEND 位置与文件尾差距(差值 ≈ 附加数据量)
    • 弱线索快速扫:strings -a sample.png | grep -iE 'flag|ctf|http'
    • 大小核对:与声称内容明显不符(如 3MB 的「小图」)是弱线索
    • 提取:binwalk 自动分割或 dd 按偏移提取(dd if=sample.png of=tail.bin bs=1 skip=<偏移>)→ magic 检查([[re-triage]])
    • EXIF 查看:exiftool -a sample.jpg(全段列出,异常字段/大块注释可疑)
    • 其他文件冗余区:EXIF 元数据(exiftool 查看)、文件头保留区、压缩文件未用空间
  2. 图片 LSB

    zsteg sample.png                    # 全通道 LSB 扫描
    zsteg -E 'b1,rgb,lsb,xy' sample.png # 指定通道/位平面提取
    
    • 通道:RGB/alpha 各通道最低位;位平面:b1/b2(低 2 位)——alpha 通道也常被用于隐藏
    • zsteg 常用参数:-a 全通道扫描、-v 详细输出、-E 指定提取;输出解读:b1,rgb,lsb,xy 行 = 该平面提取结果,全 failed ≈ 无该平面隐写
    • 顺序:行序/位序影响提取结果(见坑 1;枚举组合见 [[decision-tree]] 提取失败分支)
    • 无工具时的脚本路径:python3 + PIL 按像素遍历提取位序列(getpixel 取通道低 bit → 拼位序列 → 转字节;参考 [[gotchas]] 顺序坑)
    • 脚本枚举模板:行序 × 位序 × 通道三重循环,每种组合输出文件并逐一 file 检查
    • stegsolve 逐位平面查看(GUI):多平面图对比,找视觉图案(LSB 图像隐写常见)
  3. 其他载体

    • 音频:频谱隐写(sox 频谱图:sox in.wav -n spectrogram -o out.png 后目检频域图案)、steghide 提取(steghide extract -sf file.wav)、相位/回声隐写
    • 音频分支:先看波形/频谱(频域图案呈文本/二维码形状 → 频谱隐写),再按时域(LSB 类,steghide)与频域(相位/回声,需专门工具)区分处理
    • 图片 DCT 域(JPEG):outguess 类工具(旧工具,对新格式支持有限,见 [[gotchas]])
    • 文件冗余区:EXIF、文件头保留区、压缩文件未用空间(ZIP 内 CRC/未用空间)
    • 其他载体:文本(空白字符/行距)、网页(注释/隐藏标签)——按场景扩展
    • 多载体组合(题目常用):各文件分片拼接(按顺序/按特征关联,参考 [[re-triage]] 元数据初勘)
  4. 提取验证

    • magic 检查(提取物头部特征)
    • 可读性验证(strings/file)
    • 提取物再检测:提取出的文件本身可能再藏(嵌套)——提取物走一遍完整流程;为脚本/压缩包时按对应域继续([[re-script-deob]] / [[re-python]] 等)
    • 验证产物:提取物 file 类型与预期一致才定「确认嵌入」(分级表见 [[decision-tree]])
    • 隐写前压缩:先提取再解压(提取物查压缩头——zlib 78 9C / gzip 1F 8B / bzip2 42 5A 68,见坑 3)
    • 加密载荷:无密钥时标注不可提取(不硬破解);有密钥线索走 [[re-crypto-decrypt]]

跨域联合

  • [[re-ctf]] 网关:本技能归属
  • [[re-fw-extract]]:binwalk 复用
  • [[re-patching]]:尾部附加经验衔接
  • [[re-triage]]:提取物初勘
  • [[re-crypto-decrypt]]:载荷解密衔接
  • [[re-disk-forensics]]:未分配空间/文件系统侧隐写(取证场景)

常见坑与陷阱

  • LSB 顺序:现象——提取乱码;原因——行序(从上到下/从下到上)/位序(LSB 优先/MSB 优先);对策——工具自动尝试或脚本枚举组合
  • 多载体误判:现象——一个文件中多个隐写层;原因——嵌套隐写;对策——分层提取,每层验证
  • 隐写前压缩:现象——提取物乱码;原因——明文先压缩再嵌入;对策——先查压缩特征(zlib/gzip/bzip2 头)再解压
  • 工具输出噪声:现象——大量候选;原因——扫描输出含误报;对策——按 magic/可读性过滤
  • 载体本身异常:现象——文件损坏;原因——隐写写入破坏结构;对策——先修复/容忍损坏(按位提取不依赖结构)
  • JPEG 有损混淆:现象——LSB 提取出噪声;原因——JPEG 有损压缩覆盖了位平面(LSB 类隐写主要针对 PNG/BMP,JPEG 走 DCT 域);对策——先判格式(pngcheck)再选方法
  • 熵误报:现象——扫描报「有隐写」但无内容;原因——压缩/随机数据天然高熵;对策——熵特征只作怀疑线索,不单独定性(判定分级见 [[decision-tree]])
  • steghide 密码:现象——无密码提取失败;原因——需要口令(CTF 常给提示);对策——先无密码试,再按提示/密钥线索尝试,无则标注
  • 单工具盲区:现象——zsteg 无结果但有隐写;原因——工具覆盖的通道/算法有限;对策——zsteg + steghide + 脚本多路交叉
  • 载体副本差异:现象——同一文件不同来源扫描结果不同;原因——副本被转码/压缩;对策——用原始载体(哈希核对,见 [[re-triage]])
  • 题目/场景提示被忽略:现象——扫了图片半天,载荷其实在配套文件里;原因——多载体提示未看;对策——先看提示,按提示分载体
  • 压缩层与隐写层混淆:现象——把压缩数据的随机性当成隐写线索;原因——压缩内容天然高熵;对策——先解压再分析内容(压缩不是隐写)
  • 乱码三分支判定:现象——提取出内容但像乱码;原因——可能是压缩/加密/顺序错,也可能就是随机填充;对策——按压缩头/可读性/统计分布走 [[decision-tree]] 提取失败分支
  • 检测/提取分支与证据分级见 [[decision-tree]];边界与反例见 [[gotchas]]

Signals

GitHub stars
57
Forks
8
Last commit
Sep 2026

ahel review

  • K1binfo
    installs-packages

Automated review, not a security audit. Ruleset v1+k2.

Advanced
Catalog kind
skill
Gateway key
re-stego
Source
github.com/dslsdzc/rev-skills