跳转至

图像隐写技术解析

在CTF竞赛中,当题面线索仅包含一张图片时(社会工程类题目除外),通常暗示图像中存在隐写内容。根据隐写方式的差异,主要可分为以下类别:

关于latex渲染问题

若发现LaTeX公式显示异常(如math error),建议尝试刷新页面解决渲染问题

文件追加式隐写

此类题目具有以下典型特征:

  • 图像可正常预览

  • 文件体积异常偏大(可能不显著)

  • 隐藏内容多为二进制文件

原理基于图像查看器仅读取必要数据,因此可在图像尾部追加任意文件。理论上隐写内容无体积限制(但需注意合理性,如30×50像素图像达200MB则明显异常)。

检测工具foremostbinwalk
应用场景:常见于制作"木马图",将恶意程序附加在正常图片后

有效位隐写技术(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

分析方法

  1. 比对IDAT块大小差异

  2. 定位异常终止块

  3. 使用zlib解压时需剔除校验值等附加信息

图像置乱算法

Abstract

本文仅介绍常见置乱算法,实际应用中可能需要查阅专业文献

Arnold猫变换

原理详解

核心特性

  • 基于混沌系统的像素位置置乱

  • 周期性恢复特性(周期与图像尺寸相关)

  • 主要适用于正方形图片(非正方形需填充)

数学表达

\(n×n\)图像坐标 \(x,y \in S= \{0,1,2,\cdots n-2,n-1\}\)

\[ \begin{bmatrix}x' \\y' \end{bmatrix} = \begin{bmatrix}ab+1 & a\\ b & 1\end{bmatrix} \times \begin{bmatrix}x\\y\end{bmatrix} \bmod n\]

其中a,b是变换的参数

类似的,我们可以通过乘上这样一个矩阵来复原一次变换

\[ \begin{bmatrix}x' \\y' \end{bmatrix} = \begin{bmatrix}1 & -a\\ -b & ab+1\end{bmatrix} \times \begin{bmatrix}x\\y\end{bmatrix} \bmod n \]

不难注意到

\[ \begin{bmatrix}ab+1 & a\\ b & 1\end{bmatrix} = \begin{bmatrix}1 & -a\\ -b & ab+1\end{bmatrix}^{-1}\]

即复原用的矩阵是变换用的矩阵的逆

应用组合:与位平面替换技术结合使用

实现案例

其他置乱算法

  • Fibonacci变换
  • Hilbert曲线变换
  • E-曲线变换
  • Gray变换
  • 仿射变换
  • 幻方变换
  • 正交拉丁方变换

隐写分析工具集

详见:文件隐写技术图谱-图片类