隐写提取与编码链还原
隐写的核心是载体看起来正常,信息藏在细节里:图片的 alpha 通道、附加数据,或一层套一层的压缩与编码。实战里更多是流程题——按工具覆盖面逐个排除,把剥出的中间产物继续往下剥,直到还原出明文凭据或线索。
仅限授权环境
隐写分析仅用于授权评估或题目环境,处理素材前确认来源合法。
steghide 提取
支持 jpg/png/bmp/wav 载体:
steghide extract -sf img.jpg -p '<密码>'
- 空密码用
-p '',配合-f覆盖已有输出。 - 密码线索常在页面文案、源码注释、前后谜题的文本里,先收集线索再试,不要盲目穷举。
- 多层嵌套常见:jpg 里剥出 zip,zip 里又是一张 jpg,最后才是 txt,逐层剥即可。
盲水印
双图对比场景(原图 + 载密图)用 BlindWaterMark:
python3 bwmforpy3.py decode 原图.png 载图.png wm.png
前端与 CSS 载体
style.css 内嵌 data URI 图片时,用 grep 抠出 base64 再落盘:
grep -oP "data:image/png;base64,\K[^')"]+" style.css | base64 -d > out.png
提取出的 PNG 还要检查 alpha 通道隐写(stegsolve):把透明度通道单独渲染,提示文字可能只在那里可见。
二维码与辅助判断
zbarimg qr.png
二维码识别失败时转隐写方向——图片可能不是完整二维码,或缺定位角,信息另有藏处。
辅助判断工具:
| 工具 | 用途 |
|---|---|
| binwalk | 查附加数据、嵌入文件 |
| strings | 过滤可读字符串 |
| exiftool | 看元数据与注释字段 |
编码链还原
剥出的字符串往往还要再解一层编码:
# base58:字符集不含 0、O、I、l,可据此识别
echo <串> | base58 -d
base64、hex 等多层编码逐层解码还原,每剥一层重新用 file 判断下一层类型。密码类线索也可以先转成候选词,配合 CeWL 主题词表 的思路从页面文案扩展字典。
复核要点
- 每剥出一层产物先
file确认类型,再决定下一层用什么工具。 - 密码试不出来时回到页面文案与注释找线索,而不是硬跑大字典。
- 图片"看起来没有内容"不等于没有隐写,alpha 通道和附加数据都要看。
防御建议
- 敏感信息不放入图片、音频等可被公开获取的载体。
- 发布前审计静态资源:data URI、注释、元数据都要过一遍。
- 对外发布的图片统一压缩转码,破坏潜在隐写层。
- 部署水印检测与资产扫描工具,发现异常嵌入内容。