ctf与隐写
本文是对简单隐写和ctf中隐写思路的一个小总结
推荐我的另两篇博客
常见文件格式特征
ctf常用隐写工具介绍
隐写的载体
文本、图像、音频、视频
文本隐写
1、利用文档格式:行移、子移、字符颜色、字符字体等,如行移,调整文本数据的垂直行距,比如上移为1下移为0。字移,每一行的字符,左右移动。将字符颜色调整为和背景相同的颜色白色。
2、利用空格回车标点:添加空格,回车,或者使用逗号句号,或者英文版和中文版的标点等
3、利用字符特征:将两个字符缩小间距,使其看起来为一个字符
4、利用自然语言:同义词替换,或者句法变换,如把字句和被字句
5、利用office中自带的隐藏功能:
在word中选中要隐藏的文字,右键,选择字体,选择隐藏,确定后发现这几个字不见了,而word中字数统计也相应减少。
通过文件->选项->显示->勾选隐藏文字,即可显示出隐藏的文字
6、另:
可以对文档设置编辑保护,文档可以打开,无法编辑
设置方法:导航栏上的审阅->限制编辑->勾选编辑限制->启动强制保护->设置密码
在不知密码的情况下,解除编辑保护的方法:
https://jingyan.baidu.com/article/624e74597d9abd34e8ba5a84.html
可以对文档设置保护密码,输入密码才可以查看
有个工具叫AOPR,可以暴力破解
图片隐写
双图隐写
两种情形
- 只有一张图片一张图片藏在另一张图片中
- 有两张或者多张图片,需要这几张图片经过运算
两种隐写方式
1、图像直接拼接
将一张图像的数据附在一张图像数据的后面。因为读到文件结尾处就结束了,所以只会显示一张图片
在windows中可以通过命令实现这一隐藏
copy /b 载体文件 + 隐藏的文件 新文件
用winhex打开生成的3.jpg,发现在jpg的文件结束符FF D9后又附有数据且为89 50 41 47这是png文件的特征。
可以在winhex中,复制后段数据到一个新的文件,即可提取隐藏图片
2、图像运算
涉及对两张或更多图片的像素进行与,或,异或,移位等操作
ctf中题目类型
类型 | 特征 | 方法 |
---|---|---|
直接拼接 | 只有一张图,无任何提示,或直接提示图片中隐藏有一张图 | 直接将插入的数据提取 |
间接拼接 | 图像结尾有大量冗余信息 | 需要先将信息提取出来,再经过解码等操作 |
修改文件格式 | 文件无法正常打开或显示不全 | 需要对文件格式有了解,修改或补全相应特征数据 |
双图叠加 | 缩略图与放大图不一致,或在winhex中出现ps的软件的标记 | 采用stegsolve进行运算 |
双图运算 | 给出的两张图片看起来完全相同或属于同一风格 | 采用stegsolve进行运算 |
一图分多图 | 分离出多张图片 | 如果每张图片都能分析出信息,则信息拼接,不能,则多图运算 |
bugku平台的这道题http://123.206.87.240:8002/misc/1.jpg用winhex打开图片发现结尾有冗余信息key{you are right}
明显是html编码,解码后得flag
bugku平台的这道题https://ctf.bugku.com/challenges#隐写3修改文件的宽度和高度使其显示图片的全部即可
算法隐写
根据提示或工具确定隐写算法,根据算法进行检测,提取隐藏信息
涉及的概念
时域:自变量是时间,即横轴是时间,纵轴是信号的变化
频域:自变量是频率,即横轴是频率,纵轴是该频率信号的幅度
空域:图片上的空域是像素域
空域和时域可以通过傅里叶变换到频域
光学三原色红绿蓝
颜料三原色红黄蓝
LSB算法
最低有效位替换算法
图像中的每一个点都是由rgb(红绿蓝)三原色组成,三种颜色又组合成其它颜色,每种颜色占八位,修改每种颜色值的最低位
一个像素点包含三种颜色,每个颜色修改最后三位,一个像素可以携带三位信息
载体不能经过有损的压缩,一般是png和bmp这种位图的格式
以下基本为针对jpg格式图像的隐写算法
jsteg算法
针对jpg图像,对量化后的DCT系数(不包括系数0和1)进行最低有效位替换
嵌入时可以采用随机嵌入或者顺序嵌入。顺序嵌入容易通过卡方分析监测出来。
卡方分析:因为如2如果嵌入0会变成2,嵌入1会变成3,3嵌入0会变成2,嵌入1会变成3,这样会在量化的DCT直方图中出现对效应,即2和3出现频率相同,4和5出现频率相同。而正常图像却不是这样的
对效应如下图
f3算法
- 如果DCT系数的最低位与要嵌入的信息相同,则不变
- 不同则绝对值减1
- 0系数不嵌
- 如果是绝对值为1的系数嵌入比特0时,嵌入无效,要在下一个系数中重新嵌入
这样导致DCT系数的0增多,且直方图向中央靠拢,也容易被分析
f4算法
- 规定DCT系数中,正奇数和负偶数代表1,正偶数和负奇数代表0
- 如果系数代表的比特位与要嵌入的信息相同,则不改,否则,绝对值减1
- 产生新的0的系数时,视为无效嵌入,在下一个系数中重新嵌入
f5算法
进一步升级,引入了矩阵编码技术。将1比特的信息隐藏在\(n=2^{k}-1\)个符合要求的DCT系数中,其中n为需要使用的比特数,k为嵌入信息的比特数
jphide算法
- 解压jpg图像得到DCT系数
- 根据用户提供的key值进行blowfish生成伪随机序列来寻找DCT系数
- 将对应DCT系数进行最低有效位替换
- 重新压缩
outguess算法
同样对DCT系数进行修改,同样不修改为0和绝对值为1 的系数,只是随机决定嵌入位置,并且进行纠正,即修改未嵌入信息的DCT系数,以消除统计特征的变化
ctf中题目类型
类型 | 特征 | 思路 |
---|---|---|
LSB隐写 | 给出的是bmp或png格式的图像,或者有最低位的提示 | 编程或用工具stegsolve获取各个通道的最低位,得到的信息可能要变为二维码或者是文本字符信息 |
jpg图像隐写 | 可能会有key值的提示 | 通过stegdetect检测隐写方式,如果需要key值则要找到 |
自定义算法隐写 | 包含算法的暗示或工具 | 根据提示找到对应算法 |
音频隐写
两种情况:
1、音频的波形或频谱为某种编码或密码,找到后进行解码解密即得到隐藏信息
2、音频文件中嵌入了数据,需要提取出来,得到隐藏信息
基于波形的隐写
波形图中横坐标是时间,纵坐标是幅值。通过对图像的控制可以模拟为一种编码或密码
可以在波形图中隐藏莫斯电码,隐藏二进制数据
基于频谱图的隐写
频谱是波形经过傅里叶变换得到的,横坐标是频率,纵坐标是幅值,表示各某时间点上各频率正弦波的幅值大小,越亮的地方表示这个频率越响
若波形图无法看出隐藏信息,可以转换成频谱图
使用mp3stego的隐写
在音频文件中嵌入比特流,需要使用密码
写入:encode -E 隐藏的文件 -P 口令密码 载体音频文件 生成的文件
读取:decode -X -P 口令密码 文件名
另:还用有双音多频,双声道等多个ctf隐写问题
压缩包
涉及方面:
爆破、碰撞、伪加密、已知明文分析
文件头特征
压缩包有三种压缩格式rar、7z、zip
zip加密
zip有无加密,真加密,伪加密,三种状态
zip有数据区和目录区,只有两个区的全局方式标志位都为加密位时才是真加密
数据区:50 4B 03 04 数据区标志开头 后2个字节为解压文件所需要的版本 后2个字节数据区加密标记位
目录区:50 4B 01 02 目录去标志开头 后2个字节为压缩文件所使用的版本 后2个字节解压文件所需要的版本 后2个字节目录区加密标志位
加密标志位只要是奇数位就表示加密位 偶数不加密
ctf中题目类型
类型 | 特征 | 思路 |
---|---|---|
压缩包+图片 | 压缩包附在图片后,或者图片隐藏压缩包 | |
压缩包加密 | 密码以注释等其它提示形式给出 | |
压缩包伪加密 | 密码没有给出,加密标志位异常 | 修改对应的标志位 |
压缩包爆破 | 密码没有给出,加密标志位正常 | archpr进行爆破 |
crc32碰撞 | 当压缩包被加密,但文件为纯文本文档,且大小很小时 | 涉及程序编写,一般用Binascii 和string库string.ascii_letters |
压缩包已知明文攻击 | 压缩包为zip格式,给出了其中的一个明文,明文的crc32与压缩包中的密文crc32一致 | archpr进行爆破 |
视频隐写
与其他结合,最多的是信息隐藏在视频的几个帧中
以嘶吼2019ctf的一道题为例
首先得到的是一个mp4文件,叫做黄金6年,观看没有发现异常
之后用winhex,在结尾处发现可能为base64编码
对其解码,发现无法正常显示解码,可能为2进制数据
用Python编写程序解码发现rar标记
所以将其解码并保存为rar压缩包
import base64
str = 'UmFyIRoHAQAzkrXlCgEFBgAFAQGAgADh7ek5VQIDPLAABKEAIEvsUpGAAwAIZmxhZy50eHQwAQADDx43HyOdLMGWfCE9WEsBZprAJQoBSVlWkJNS9TP5du2kyJ275JzsNo29BnSZCgMC3h+UFV9p1QEfJkBPPR6MrYwXmsMCMz67DN/k5u1NYw9ga53a83/B/t2G9FkG/IITuR+9gIvr/LEdd1ZRAwUEAA=='
result = base64.b64decode(str)
print(result)
f = open(r'C:\Users\Guoyang\Desktop\my.rar', 'wb')
f.write(result)
发现有密码
确认不是伪加密后,试图先从视频中寻找密码
用工具potplayer打开,一帧一帧播放,发现
四张二维码,扫描,将得到的信息拼接为iwantplayctf,解开数据包得flag
另
- 图片中的exif信息也可能隐藏信息,并且图片中的这个信息也可能泄露个人隐私。通过查看图片属性中的详细信息可以简单查看,也有专门的工具辅助查看。
- 在pdf文件中隐写。使用webstego4open工具,这个程序利用pdf文件头添加信息。
- 可以在可执行文件中隐写
- 在html中隐写,通过注释等
- 隐写分析
- 隐写工具一般会在隐写的文件加入特定的标识,可以通过标识判断
- 也可以通过相应统计分析识别
- 现在还有一些设计深度学习的方法
- 一些其它的隐藏技术
- 卡尔达诺栅格码。通信双方会事先有一块栅格,即一块板中按一定规律挖出小窗格。秘密信息藏在一段信息中。用栅格板盖住消息,小窗格中漏出来的信息就组成了隐藏的消息。
- 隐形墨水
- 缩影术
- 打印机跟踪点
- 信息隐藏入门读物《数据隐藏技术揭秘:破解多媒体、操作系统、移动设备和网络协议中的隐秘数据》