1036 字
5 分钟
MISC——图片隐写之图片修复

1793698885880-ejqc62.jpg

当文件出现损坏时,使用file这种基于文件签名(magic)的命令已经无法识别出这是一个什么文件,而返回值是data文件。(因为只改后缀而不改内容,file依旧会识别真实类型。不过返回data也可能是因为未知格式、加密/压缩数据、文件头前有垃圾)

这种题目则需要我们去依据文件头修复文件,使用010直接补充上文件头即可,这是杂项题中文件识别的基本题。

当然,在MISC题型中,故意损坏文件不仅仅会出现在图片中,还可能出现在压缩包、PDF、磁盘镜像文件中。本质就是出题者故意修改损坏文件头/文件尾/关键字段,使得工具无法识别,我们需要先行把他修改为正常结构,再继续寻找flag。

这里不对其他文件作说明

拿到图片后可以按照这个顺序来试着判断是否是直接附加或修复题 file 文件名 # 返回data或类型不正确 xxd 图片 | head # 看前 16 字节文件头 xxd 图片 | tail # 看文件尾 strings -n 6 图片 | grep -iE ‘flag|ctf|key’ # 扫明文 pngcheck -v 图.png # PNG 专用:块结构/CRC

如果 file 返回 data,但文件大小正常、strings 有可疑内容,大概率是文件头被破坏,不是加密。

更进一步,则是会嵌套写入一个或多个文件,如图片,压缩包等。

从图片修复来说,有四个方面如下:

  1. 文件头修复
  2. 文件尾修复
  3. PNG宽高/CRC校验修复
  4. JPEG/GIF头尾修复
  5. 多文件合并

文件头与文件尾直接查表对应,通过010进行修改即可。 CRC 全称 (Cyclic Redundancy Check),循环冗余校验。它是根据一段数据算出来的固定长度“校验值”,用来检测数据有没有被改动或传输出错。

一旦文件的宽高等数据被修改,CRC一定会错,不过CRC出错,却不一定是宽高被改,也可能是CRC被单独修改,只要注意这点,根据原理两者大可论为一谈。

pngcheck -v 报 CRC 错误,就说明这个块的数据被改过,或者 CRC 本身被改过,大概率就是文件修复题。

不过区分两种情况

  • 只改了 CRC 值:数据是好的,CRC 被故意改坏 → 使用TweakPNG 直接重算 CRC 即可。

  • 改了数据(如宽高)导致 CRC 错误:要先恢复数据,再重算 CRC;只修 CRC 没有作用。

甚至有时候出题者给你一张图片,但是喜欢绕弯,硬是将一份文件砍成三四份再发(还有一个md的值用于计算文件的完整性),那么此时就需要合并文件。在linux下,可以使用cat(查看文件)关键词查看文件,合并成一份。

文件合并方法: 例: cat 文件名 文件名 文件名…… > 合并后文件名 然后使用md5sum 文件名 来查看文件md5值,进行核对,便知成功与否。

windows下则使用copy来进行合并文件,使用dir可以查看文件。 格式:copy /B 文件1+文件2 合并后文件名 windows下计算md5命令:certutil -hashfile 文件名 MD5

工具:

TweakPNG 是一款简易的PNG图像浏览工具,用于查看和编辑 PNG 的 chunk 结构:块类型、长度、CRC,支持删除/修改块和重算 CRC。

适用场景:文件头正常却无法打开的文件,利用tweakPNG修改CRC

例:当png文件正常但无法打开文件,可能是CRC检验出错,用tweakPNG打开png,会弹出CRC校验错误的弹窗。

第一种,通过工具直接修改CRC校验值即可

第二种,需要借助python脚本,爆破宽高进行修复,然后再计算CRC校验值

这种题目再次进阶就不仅仅只是隐写图片了,而是其他的各种文件,如压缩包、pdf、word等

MISC——图片隐写之图片修复
https://imjiazi.top/posts/misc3/
作者
甲子
发布于
2026-11-09
许可协议
CC BY-NC-SA 4.0