图像隐写技术解析¶
在CTF竞赛中,当题面线索仅包含一张图片时(社会工程类题目除外),通常暗示图像中存在隐写内容。根据隐写方式的差异,主要可分为以下类别:
关于latex渲染问题
若发现LaTeX公式显示异常(如math error),建议尝试刷新页面解决渲染问题
文件追加式隐写¶
此类题目具有以下典型特征:
-
图像可正常预览
-
文件体积异常偏大(可能不显著)
-
隐藏内容多为二进制文件
原理基于图像查看器仅读取必要数据,因此可在图像尾部追加任意文件。理论上隐写内容无体积限制(但需注意合理性,如30×50像素图像达200MB则明显异常)。
检测工具:foremost或binwalk
应用场景:常见于制作"木马图",将恶意程序附加在正常图片后
有效位隐写技术(LSB/MSB)¶
实现原理¶
通过修改像素的:
-
LSB(最低有效位)
-
MSB(最高有效位)
实现图像/文本隐藏。相较于文件追加方式,具有更好的隐蔽性。
检测工具:Stegsolve(通过切换视图模式分析)
文本提取:支持灵活提取,需注意编码格式的特殊处理
需要注意,此类题目的加解密实现不固定,需结合题目实际分析
- 自定义块编码:将字符转换为固定长度块
PNG文件结构篡改¶
IHDR篡改¶
通过修改PNG的IHDR块尺寸参数,使图片显示异常:
-
Windows原生查看器可正常显示
-
kali查看器报IHDR错误
解决方案:使用CRC校验码爆破真实尺寸
import os
import binascii
import struct
misc = open("Image.png","rb").read()
for i in range(1024):
data = misc[12:16] + struct.pack('>i',i)+ misc[20:29]
crc32 = binascii.crc32(data) & 0xffffffff
if crc32 == 0x932f8a6b:
print i
From ctf-wiki
文件头损坏¶
需根据文件格式规范进行修复,推荐优先处理PNG格式(JPEG因有损压缩易破坏隐写信息)
IDAT块异常¶
检测工具:pngcheck
分析方法:
-
比对IDAT块大小差异
-
定位异常终止块
-
使用
zlib解压时需剔除校验值等附加信息
图像置乱算法¶
Abstract
本文仅介绍常见置乱算法,实际应用中可能需要查阅专业文献
Arnold猫变换¶
核心特性:
-
基于混沌系统的像素位置置乱
-
周期性恢复特性(周期与图像尺寸相关)
-
主要适用于正方形图片(非正方形需填充)
数学表达:
设\(n×n\)图像坐标 \(x,y \in S= \{0,1,2,\cdots n-2,n-1\}\)
其中a,b是变换的参数
类似的,我们可以通过乘上这样一个矩阵来复原一次变换
不难注意到
即复原用的矩阵是变换用的矩阵的逆
应用组合:与位平面替换技术结合使用
其他置乱算法¶
- Fibonacci变换
- Hilbert曲线变换
- E-曲线变换
- Gray变换
- 仿射变换
- 幻方变换
- 正交拉丁方变换
隐写分析工具集¶
详见:文件隐写技术图谱-图片类