一、介绍
隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。隐写术来源于特里特米乌斯的一本讲述密码学与隐写术的著作。
二、常用工具
(一)文本分析器
-
Winhex
-
HxD
-
010Editor
-
N0tepad
(二)图片隐写
-
Stegsolve(需要配置 java 环境)
-
QR Research
-
HxD
(三)常用命令
-
Formost(拆分文件)
-
Binwalk(分析文件)
-
strings
三、类型
图片隐写、音频隐写、视频隐写、文本隐写、其他类型隐写
四、图片隐写
1. Exif 信息隐藏
exif 是一种可交换图像文件格式(英语:Exchangeable image file format,官方简称 Exif),
专门为数码相机的照片设定的文件格式,可以记录数码照片的属性信息和拍摄数据。EXIF可以附加于 JPEG 、TIFF 、RIFF 等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息
相关的exif 查看器下载百度很多,这是我在百度上找到的一个网址: EXIF信息查看器无需安装软件,只需上传照片即可查看完整EXIF信息,包括机身、镜头型号、拍摄时间、相机快门次数,支持JPEG、TIFF、CR2、NEF、XMP等多种图片格式。无需下载,比Exif Show, ExifPro更好用的EXIF查看器!
https://exif.tuchong.com/
还有一种情况是直接在图片属性的备注里给出 flag ,这种情况可以用 010editor 或者winhex 等工具打开图片搜索关键字如 flag 、ctf 等查看。
2. Gif 隐写
用Stegsolve可以一帧一帧查看,往往答案就隐藏在其中一帧中
通过cmd打开 stegsolve,命令为 Javaw -jar D:\xia\Stegsolve.jar(修改为自己下载 stegsolve的路径),点击下图所示的小箭头就可以左右查看了

3. LSB 隐写
工具:stegsolve(需要 java 环境)
用该工具打开图片后,点击下图所示的选项

然后按照下图点击

最后点击 preview ,有时候点击 preview 没有用,需要点击最下面的 save text 或者 save bin才能得出结果
另一个方法就是使用 zsteg 工具,需要 kali 里面在线安装:gem install zsteg ,使用命令格式: zsteg filename
题目:buuctf lsb1
4. 图片修复
1 文件头修复
常见的图片格式文件头如下

修复使用工具:010editor 、winhex 等
方法: 以 16 进制的方式打开文件,在文件最开始添加相应的文件头
2 CRC 校验修复
工具:tweakpng ,winhex

这时这个图片的 crc 值没有出错,用这个工具打开该图片,不会报错,如果将 crc 值修改一下,再用tweakpng 打开就会报错,并且会提示该图片现有的宽高应有的 crc 是多少

此时确保宽高是在正确的情况下修改成正确的 crc 值即可
3 宽高修复
对于 png 格式的图片,宽高的数据位置如下图所示

如果题目简单,可以直接尝试修改宽高
建议:一般选择修改高度,一点点的改动即可,如果随意修改宽度一般都会造成图像错误。
一个简单的检测宽高是否有误的方法:在 windows 下能打开的图片在 linux 下不能打开,就表示可能宽高存在问题。
最正确的方法是通过 crc 值爆破宽高,下面是大佬的脚本
#!/usr/bin/env python
#-*- coding:UTF-8 -*-
import binascii
import struct
import os
crcbp = open("flag.png","rb").read() #open 内文件名
for i in range(1024):
for j in range(1024):
data = crcbp12:16 + struct.pack('>i',i) + struct.pack('>i',j) + crcbp24:29 crc32 = binascii.crc32(data) & 0xffffffff
if crc32 == 0x4d614986 :#此处填 CRC 值print (i);
print (j);
print (hex(i),hex(j))爆破出来后修改即可

5. 对于两张相同图片的隐写
1 盲水印
盲水印是一种肉眼不可见的水印方式,对图片资源使用图片盲水印或者文字水印,借此避免数字媒体未经授权的复制和拷贝,可通过对原图进行解码操作,得到水印图来证明版权归属。
两张相同的图片首先考虑盲水印
具体解法:
a. 先安装 opencv,选择一条命令安装
pip install opencv-python
pip3 install opencv-python
b. 安装 matplotlib
c. 使用以下一条命令提取盲水印(取决于运行的是 python2 还是 python3)
d. 生成图片,得到 flag
2 组合进行不同运算(and 、or 、xor 等)
工具:stegsolve
点击下图所示的选项

之后会需要再打开一张图片,此时注意两张图片的打开顺序不同,最终结果也不同,实际操作的时候需要多试几次
6. 文件分离
工具:binwalk 、formost 、dd
binwalk:可快速分辨文件是否由多个文件合并而成,并将文件进行分离。
分析文件:binwalk filename
分离文件:binwalk -e filename
formost 命令:formost filename -o 输出的目录名
formost 简便方法:
2 在 foemost 所在文件夹新建一个文本,里面写:
@echo off
cd D:\OtherApp\CTFTool\foremost -->这行需要你换成你的安装目录,即 foremost.exe 所在目录
set path=%~dp1
start foremost -i %1 -o %path%\outfile echo foremost 解密成功
pause
3 保存,把后缀 txt 改为 bat
4 复制 bat 文件
5 打开 sendto 文件夹,一般在 C:\Users\你的用户名\AppData\Roaming\Microsoft\Windows\SendTo
6 右键,粘贴快捷方式(不是粘贴),改成想要的名字
7 使用时选择"发送到 "即可,会自动生成一个文件夹
dd:当文件自动分离出错或者因为其他原因无法自动分离时使用
格式:
dd if=源文件 of =目标文件名 bs=1 skip=开始分离的字节数参数说明:
if=file 输入文件名,缺省为标准输入
of=file 输入文件名,缺省为标准输入
bs=bytes 同时设置读写块的大小为 bytes ,可代替 ibs 和 obs
skip=blocks 从输入文件开头跳过 blocks 个块后再开始复制补充:如果一个工具分离不出来可以多试几种
题目:buuctf 间谍启示录
7. 二维码
取反色
工具:windows 自带的画图软件
当二维码的三个定位点是白色的时候,就要进行取反

有任何问题都可以随时关注私信!