隐写术检测与提取
SkillDev tools隐写术检测与提取:文件尾附加、图片 LSB、音频与其他载体、提取验证。 触发词:隐写、stego、LSB、文件尾附加、隐写提取、图片隐写。
Available today. Use it from your connected AI after setup.
No other account needed.
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 -h或gem list zsteg - 覆盖范围:PNG/BMP 支持好,GIF 支持有限——GIF 载体换 python 脚本路径
steghide(图片/音频隐写)
- Linux:
apt install steghide/dnf install steghide;macOS:brew install steghide - 验证:
steghide --version;steghide info file.jpg(查看是否嵌入数据,无需密码)
binwalk(尾部扫描)
- 安装与验证见 [[re-fw-extract]] 工具准备
其他检测/提取工具
- exiftool(EXIF/元数据):Linux
apt install libimage-exiftool-perl/dnf install perl-Image-ExifTool;macOSbrew install exiftool;验证exiftool -ver - pngcheck(PNG 结构校验/异常):Linux
apt install pngcheck;macOSbrew install pngcheck;验证pngcheck -v - sox(音频处理/频谱图):Linux
apt install sox;macOSbrew 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]])。
-
文件尾附加检测:
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 查看)、文件头保留区、压缩文件未用空间
-
图片 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 图像隐写常见)
-
其他载体:
- 音频:频谱隐写(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]] 元数据初勘)
- 音频:频谱隐写(sox 频谱图:
-
提取验证:
- magic 检查(提取物头部特征)
- 可读性验证(strings/file)
- 提取物再检测:提取出的文件本身可能再藏(嵌套)——提取物走一遍完整流程;为脚本/压缩包时按对应域继续([[re-script-deob]] / [[re-python]] 等)
- 验证产物:提取物
file类型与预期一致才定「确认嵌入」(分级表见 [[decision-tree]]) - 隐写前压缩:先提取再解压(提取物查压缩头——zlib
78 9C/ gzip1F 8B/ bzip242 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