该项目是一个 Docker 镜像,适用于解决 CTF 平台(如 hackthebox.eu)上的隐写挑战。该镜像预装了许多流行工具(见下方工具列表),以及一些可用于检查简单事物的筛选脚本(例如,运行 check_jpg.sh image.jpg 可获取 JPG 文件的报告)。
首先确保您已安装 Docker(安装指南)。然后您可以使用此仓库中的 shell 脚本 bin/build.sh 和 bin/run.sh 来构建镜像并运行容器。您将进入容器内的 bash shell。容器将挂载 data 文件夹,您可以将待分析的文件放入其中。
如果您不使用脚本,请按以下步骤操作:
docker build -t <镜像名称> .)或从 Docker Hub 拉取(docker pull dominicbreuker/stego-toolkit)/data 文件夹启动容器(docker run -it <镜像名称> -v /本地/包含/data的文件夹:/data /bin/bash)check_jpg.sh image.jpg 生成快速报告,或运行 brute_jpg.sh image.jpg wordlist.txt 尝试使用各种工具和密码提取隐藏数据start_ssh.sh 并通过 X11 转发连接到容器start_vnc.sh 并通过浏览器连接到容器的桌面更多信息请参考以下部分:
运行 docker run -it --rm -v $(pwd)/data:/data dominicbreuker/stego-toolkit /bin/bash。您将进入容器的工作目录 /data 的 shell。您的主机文件夹 $(pwd)/data 将被挂载,其中的图像将可访问。

安装了多种 Linux 和 Windows 工具。Windows 工具通过 Wine 支持。部分工具可通过命令行使用,另一些需要 GUI 支持。
这些工具可通过命令行使用。您只需启动容器并挂载要检查的隐写文件即可。
初始阶段使用的工具。帮助您初步了解所处理文件的概况。
设计用于检测文件中隐写内容的工具。主要执行统计测试。仅能在简单情况下揭示隐藏信息。但如果发现有趣的异常,可能提示要寻找什么。
可用于隐藏消息并在之后恢复的工具。有些工具会在隐藏前对消息进行加密。如果需要密码,可尝试这些工具。此 Docker 镜像中提供了支持这些工具的暴力破解脚本。
以下所有工具都有图形用户界面,不能通过命令行使用。要运行它们,您必须在容器内提供 X11 服务器。有两种支持的方式:
start_ssh.sh 启动 SSH 服务器。之后通过 X11 转发连接。需要主机上有 X11 服务器!start_vnc.sh 启动 VNC 服务器 + 客户端。之后通过浏览器连接到端口 6901,即可获得 Xfce 桌面。不需要主机依赖项!或者,寻找其他方式在容器内提供 X11。有许多不同的方法(例如,挂载 UNIX 套接字)。
上述许多工具无需 GUI 交互。因此,您可以轻松自动化一些工作流程,对可能包含隐藏消息的文件进行基本筛选。由于适用的工具因文件类型而异,每种文件类型都有不同的脚本。
对于每种文件类型,有两种脚本:
XXX_check.sh <隐写文件>:运行基本筛选工具并创建报告(+ 可能创建包含报告文件的目录)XXX_brute.sh <隐写文件> <字典>:尝试使用字典(已安装 cewl、john 和 crunch 用于生成列表——请保持列表较小)通过多种工具从隐写文件中提取隐藏消息。支持以下文件类型:
check_jpg.h 和 brute_jpg.sh(暴力破解运行 steghide、outguess、outguess-0.13、stegbreak、stegoveritas.py -bruteLSB)check_png.h 和 brute_png.sh(暴力破解运行 openstego 和 stegoveritas.py -bruteLSB)上述暴力破解脚本需要字典。我个人认为使用像 rockyou 这样的大型标准字典很可能无济于事。脚本运行速度太慢,而且隐写挑战似乎并不是为此设计的。更可能的情况是,您对密码有预感,但不能确定。
针对这些情况,镜像中包含了几个用于生成字典的工具:
john 创建它们的许多变体。使用 john -wordlist:/path/to/your/wordlist -rules:Single -stdout > /path/to/expanded/wordlist 应用广泛规则(约 x1000 倍),使用 john -wordlist:/path/to/your/wordlist -rules:Wordlist -stdout > /path/to/expanded/wordlist 应用缩减规则集(约 x50 倍)。crunch 6 6 abcdefghijklmnopqrstuvwxyz -t @@1984 将生成 26 * 26 = 676 个密码:aa1984, ab1984, ... 直到 zz1984。格式为 crunch <最小长度> <最大长度> <字符集> <选项>,这里我们使用了模板选项。查看 less /usr/share/crunch/charset.lst 了解 crunch 自带的字符集。cewl -d 0 -m 8 https://en.wikipedia.org/wiki/Donald_Trump。该命令会抓取网站并提取至少 8 个字符的字符串。镜像中包含每种不同格式的示例图像和音频文件:
/examples/ORIGINAL.jpg/examples/ORIGINAL.png/examples/ORIGINAL.mp3/examples/ORIGINAL.wav还包含一个脚本 /examples/create_examples.sh,您可以运行它以多种不同方法将隐藏消息("This is a very secret message!")嵌入这些文件中。运行此脚本后,您可以在 /examples/stego-files 目录中找到这些文件,其名称指示了用于嵌入消息的工具。您可以运行筛选脚本查看它们是否能发现什么,或尝试以其他方式破解它们。
默认情况下,Docker 容器中无法运行 GUI 工具,因为没有 X11 服务器。要运行它们,您必须改变这一点。具体操作取决于您的主机。如果您:
brew install Xquartz)如果您想走这条路,可以通过 SSH 使用 X11 转发。在容器内运行 start_ssh 启动服务器,确保在启动容器时暴露端口 22:docker run -p 127.0.0.1:22:22 ...,然后使用 ssh -X ... 连接(脚本会打印密码)。
为了不依赖 X11,镜像自带 TigerVNC 服务器和 noVNC 客户端。您可以使用它通过浏览器打开一个 HTML5 VNC 会话来连接容器的 Xfce 桌面。为此,在容器内运行 start_vnc.sh 启动服务器和客户端,确保在启动容器时暴露端口 6901:docker run -p 127.0.0.1:6901:6901 ...,然后访问 localhost:6901/?password=<密码>(脚本会打印密码)。

GIF 中的命令(供复制粘贴):
# 在第一个主机 shell 中
docker run -it --rm -p 127.0.0.1:22:22 dominicbreuker/stego-toolkit /bin/bash
# 在容器 shell 中
start_ssh.sh
# 在第二个主机 shell 中(之后用于启动 GUI 应用)
ssh -X -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@localhost

GIF 中的命令(供复制粘贴):
# 在第一个主机 shell 中
docker run -it --rm -p 127.0.0.1:6901:6901 dominicbreuker/stego-toolkit /bin/bash
# 在容器 shell 中
start_vnc.sh
# 在浏览器中,连接:http://localhost:6901/?password=<start_vnc 输出的密码>
以下是一些有用的隐写相关链接:
本仓库包含以下示例媒体文件:
| 工具 | 描述 | 使用方法 |
|---|
| file | 检查文件类型 | file stego.jpg |
| exiftool | 检查媒体文件的元数据 | exiftool stego.jpg |
| binwalk | 检查是否有其他文件嵌入或附加 | binwalk stego.jpg |
| strings | 检查文件中是否有可读的有趣字符 | strings stego.jpg |
| foremost | 提取嵌入/附加的文件 | foremost stego.jpg |
| pngcheck | 获取 PNG 文件详细信息(或发现其实际上是否为其他格式) | pngcheck stego.png |
| identify | GraphicMagick 工具,检查文件类型及图像是否损坏 | identify -verbose stego.jpg |
| ffmpeg | ffmpeg 可用于检查音频文件的完整性,并报告信息和错误 | ffmpeg -v info -i stego.mp3 -f null - 重新编码文件并丢弃结果 |
| 工具 | 文件类型 | 描述 | 使用方法 |
|---|
| stegoVeritas | 图像(JPG, PNG, GIF, TIFF, BMP) | 多种简单和高级检查。查看 stegoveritas.py -h。检查元数据,创建许多变换后的图像并保存到目录,暴力破解 LSB 等。 | stegoveritas.py stego.jpg 运行所有检查 |
| zsteg | 图像(PNG, BMP) | 检测各种 LSB 隐写,以及 openstego 和 Camouflage 工具 | zsteg -a stego.jpg 运行所有检查 |
| stegdetect | 图像(JPG) | 执行统计测试以判断是否使用了隐写工具(jsteg, outguess, jphide 等)。详细信息查看 man stegdetect。 | stegdetect stego.jpg |
| stegbreak | 图像(JPG) | 针对 JPG 图像的暴力破解工具。声称能破解 outguess、jphide 和 jsteg。 | stegbreak -t o -f wordlist.txt stego.jpg,使用 -t o 针对 outguess,-t p 针对 jphide,-t j 针对 jsteg |
| 工具 | 文件类型 | 描述 | 隐藏方法 | 恢复方法 |
|---|
| AudioStego | 音频(MP3 / WAV) | 工作原理详见此博客文章 | hideme cover.mp3 secret.txt && mv ./output.mp3 stego.mp3 | hideme stego.mp3 -f && cat output.txt |
| jphide/jpseek | 图像(JPG) | 来自此处的较老工具。这里安装了来自此处的版本,因为原始版本经常崩溃。它会交互式地提示输入口令! | jphide cover.jpg stego.jpg secret.txt | jpseek stego.jpg output.txt |
| jsteg | 图像(JPG) | LSB 隐写工具。不加密消息。 | jsteg hide cover.jpg secret.txt stego.jpg | jsteg reveal cover.jpg output.txt |
| mp3stego | 音频(MP3) | 旧程序。加密并隐藏消息(3DES 加密!)。运行于 Wine 的 Windows 工具。需要 WAV 输入(某些 WAV 文件可能报错,对我有效的方法如:ffmpeg -i audio.mp3 -flags bitexact audio.wav)。重要:务必使用绝对路径! | mp3stego-encode -E secret.txt -P password /path/to/cover.wav /path/to/stego.mp3 | mp3stego-decode -X -P password /path/to/stego.mp3 /path/to/out.pcm /path/to/out.txt |
| openstego | 图像(PNG) | 多种 LSB 隐写算法(参考此博客)。仍在维护。 | openstego embed -mf secret.txt -cf cover.png -p password -sf stego.png | openstego extract -sf openstego.png -p abcd -xf output.txt (省略 -xf 可使用原始名称创建文件!) |
| outguess | 图像(JPG) | 使用“冗余位”隐藏数据。有两个版本:旧的 outguess-0.13 取自此处,新的 outguess 来自包仓库。恢复时必须使用与隐藏时相同的版本。 | outguess -k password -d secret.txt cover.jpg stego.jpg | outguess -r -k password stego.jpg output.txt |
| spectrology | 音频(WAV) | 将图像编码为音频文件的频谱图。 | TODO | 使用 GUI 工具 sonic-visualiser |
| stegano | 图像(PNG) | 使用多种(基于 LSB 的)方法隐藏数据。还提供一些筛选工具。 | stegano-lsb hide --input cover.jpg -f secret.txt -e UTF-8 --output stego.png 或 stegano-red hide --input cover.png -m "secret msg" --output stego.png 或 stegano-lsb-set hide --input cover.png -f secret.txt -e UTF-8 -g $GENERATOR --output stego.png(使用不同的生成器,stegano-lsb-set list-generators) | stegano-lsb reveal -i stego.png -e UTF-8 -o output.txt 或 stegano-red reveal -i stego.png 或 stegano-lsb-set reveal -i stego.png -e UTF-8 -g $GENERATOR -o output.txt |
| Steghide | 图像(JPG, BMP)和音频(WAV, AU) | 功能丰富且成熟的数据加密和隐藏工具。 | steghide embed -f -ef secret.txt -cf cover.jpg -p password -sf stego.jpg | steghide extract -sf stego.jpg -p password -xf output.txt |
| cloackedpixel | 图像(PNG) | LSB 图像隐写工具 | cloackedpixel hide cover.jpg secret.txt password 创建 cover.jpg-stego.png | cloackedpixel extract cover.jpg-stego.png output.txt password |
| LSBSteg | 未压缩格式的图像(PNG, BMP, ...) | 简单的 LSB 工具,带有非常清晰可读的 Python 代码 | LSBSteg encode -i cover.png -o stego.png -f secret.txt | LSBSteg decode -i stego.png -o output.txt |
| f5 | 图像(JPG) | F5 隐写算法,包含过程的详细信息 | f5 -t e -i cover.jpg -o stego.jpg -d 'secret message' | f5 -t x -i stego.jpg 1> output.txt |
| stegpy | 图像(PNG, GIF, BMP, WebP)和音频(WAV) | 基于 LSB 方法的简单隐写程序 | stegpy secret.jpg cover.png | stegpy _cover.png |
| 工具 | 文件类型 | 描述 | 启动方法 |
|---|
| Steg | 图像(JPG, TIFF, PNG, BMP) | 处理多种文件类型并实现不同的方法 | steg |
| Steganabara(原始链接已失效) | 图像(???) | 交互式变换图像直到发现内容 | steganabara |
| Stegsolve | 图像(???) | 交互式变换图像,单独查看颜色方案等。 | stegsolve |
| SonicVisualiser | 音频(???) | 可视化音频文件的波形,显示频谱图等。 | sonic-visualiser |
| Stegosuite | 图像(JPG, GIF, BMP) | 可加密数据并将其隐藏在图像中。积极开发中。 | stegosuite |
| OpenPuff | 图像、音频、视频(多种格式) | 功能复杂的工具,历史悠久。仍在维护。运行于 Wine 的 Windows 工具。 | openpuff |
| DeepSound | 音频(MP3, WAV) | Mr. Robot 本人信赖的音频隐写工具。运行于 Wine 的 Windows 工具(非常 hacky,需要 VNC 并在虚拟桌面中运行,MP3 因缺少 DLL 而损坏!) | deepsound 仅在 VNC 会话中 |
| cloackedpixel-analyse | 图像(PNG) | LSB 隐写可视化工具——用于检测图像中可疑的随机 LSB 值(接近 0.5 的值可能表示嵌入加密数据) | cloackedpixel-analyse image.png |