zoukankan      html  css  js  c++  java
  • 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:UsersGuoyangDesktopmy.rar', 'wb')
    f.write(result)
    

    发现有密码

    确认不是伪加密后,试图先从视频中寻找密码
    用工具potplayer打开,一帧一帧播放,发现
    四张二维码,扫描,将得到的信息拼接为iwantplayctf,解开数据包得flag




    • 图片中的exif信息也可能隐藏信息,并且图片中的这个信息也可能泄露个人隐私。通过查看图片属性中的详细信息可以简单查看,也有专门的工具辅助查看。
    • 在pdf文件中隐写。使用webstego4open工具,这个程序利用pdf文件头添加信息。
    • 可以在可执行文件中隐写
    • 在html中隐写,通过注释等
    • 隐写分析
      • 隐写工具一般会在隐写的文件加入特定的标识,可以通过标识判断
      • 也可以通过相应统计分析识别
      • 现在还有一些设计深度学习的方法
    • 一些其它的隐藏技术
      • 卡尔达诺栅格码。通信双方会事先有一块栅格,即一块板中按一定规律挖出小窗格。秘密信息藏在一段信息中。用栅格板盖住消息,小窗格中漏出来的信息就组成了隐藏的消息。
      • 隐形墨水
      • 缩影术
      • 打印机跟踪点
    • 信息隐藏入门读物《数据隐藏技术揭秘:破解多媒体、操作系统、移动设备和网络协议中的隐秘数据》
  • 相关阅读:
    ueditor集成ckplayer
    PHP结合Ueditor并修改图片上传路径
    dedecms5.7安装百度(ueditor)编辑器的方法
    织梦实现截取标题时当大于截取的长度时加省略号的功能
    织梦DEDECMS首页、列表页面动态调用点击次数的方法
    织梦dedecms列表页面如何调用文章作者
    dedecms织梦nginx下伪静态规则设置
    DedeCMS编辑文章不更新时间的方法
    dedecms栏目页开启伪静态的方法
    如何开启Apache Rewrite功能
  • 原文地址:https://www.cnblogs.com/Qi-Lin/p/12345933.html
Copyright © 2011-2022 走看看