Tomato 50 pts 19 solves 附件: 取证与安全杂项 番茄真的很好吃,可是,我的番...

創建於:2026年8月9日

使用 GPT-5.6 Thinking 回答 Chat01

問題

mmexport1786262075808.jpg

Tomato
50 pts
19 solves
附件:
取证与安全杂项
番茄真的很好吃,可是,我的番茄怎么怪怪的,这是一道CTF

Python

python
from PIL import Image import numpy as np, os, math, statistics path="/mnt/data/mmexport1786262075808.jpg" im=np.array(Image.open(path).convert("RGB")).astype(np.float32) im.shape, im.mean(axis=(0,1)), im.std(axis=(0,1)) ((1553, 1170, 3), array([184.93161 , 68.84242 , 54.938263], dtype=float32), array([62.94121 , 45.43267 , 40.166775], dtype=float32))

思考

Analyzed WeChat JPEG forensic metadata

Worked for 13m 16s

回答

能做。我已经对你发来的这张图做了一轮取证,目前最关键的结论是:这很可能不是题目的原始附件,而是经过微信保存/转发后的 JPEG

我看到几个很有用的特征:

  • 文件名是 mmexport1786262075808.jpgmmexport...jpg 是微信保存图片时常见的命名形式。(Cnblogs)

  • 图是 1170×1553 的普通 JPEG,没有 EXIF、Comment、额外压缩包、PNG/ZIP/RAR 等明显附加文件

  • JPEG 的 EOI 后面只有 24 字节: 1b7298bc0000000057db824f9a4933d34607af98d66a0ebf

    其中最后 16 字节恰好就是前面 JPEG 主体的 MD557db824f9a4933d34607af98d66a0ebf

    所以这段更像保存/传输产生的校验尾巴,不像 flag。

  • RGB 分离、各 bit-plane、通道差分、简单 LSB、ELA 我都扫过了,没有直接出现 flag / QR / 文本

  • 但图像本身非常异常:矩形边界基本落在 1/8 → 1/16 → 1/32 → 1/64 这种二次幂分割位置上。也就是说它不像随机马赛克,更像是经过了递归分块 / quadtree(四叉树)一类处理

  • 我也测试了“把 16×16 小块直接打乱后重新拼”的思路,结果原位置的边缘连续性反而远好于随机排列,所以并不是普通的拼图题

  • 红色本身也有意义:画面很像遥感影像的假彩色表达;近红外映射到红色通道时,植被经常会呈鲜红色。(Off-Nadir Delta) 不过这里额外的递归矩形结构显然还有人为处理。

所以现在我最怀疑两条路线:

  1. 原始附件里有 JPEG/元数据/DCT 层面的隐写,但经过微信重编码之后已经被破坏;
  2. 图像本身使用了递归四叉树/多尺度分块变换,需要从原图精确恢复。

你下一步直接把比赛平台下载下来的原始附件上传给我,作为“文件”发,不要截图、不要微信转发、不要另存为。 文件名是什么都不要改也没关系。

拿到原件后我可以继续直接往下拆,目标就是把 flag{...} 找出来。

分享這個問答