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=2k1个符合要求的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压缩包

Copy
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中隐写,通过注释等
  • 隐写分析
    • 隐写工具一般会在隐写的文件加入特定的标识,可以通过标识判断
    • 也可以通过相应统计分析识别
    • 现在还有一些设计深度学习的方法
  • 一些其它的隐藏技术
    • 卡尔达诺栅格码。通信双方会事先有一块栅格,即一块板中按一定规律挖出小窗格。秘密信息藏在一段信息中。用栅格板盖住消息,小窗格中漏出来的信息就组成了隐藏的消息。
    • 隐形墨水
    • 缩影术
    • 打印机跟踪点
  • 信息隐藏入门读物《数据隐藏技术揭秘:破解多媒体、操作系统、移动设备和网络协议中的隐秘数据》
posted @   启林O_o  阅读(2558)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示
CONTENTS