Divide and Conquer - Writeup by AI
📋 题目信息
- 题目来源:BugKu CTF
- 题目类别:Crypto(密码学)/ Steganography(隐写术)
- 题目名称:Divide and Conquer(分治)
🎯 考点分析
核心知识点
| 知识点 | 权重 | 说明 |
|---|---|---|
| 图片隐写术 | 40% | LSB 隐写、XOR 隐藏技术 |
| PIL/Pillow 库 | 30% | 图像处理与差异计算 |
| 分治思想 | 20% | 将问题分解后合并解决 |
| 二值图像编码 | 10% | 布尔矩阵与信息提取 |
题目特点
- 典型隐写题:信息隐藏在两张看似相同的图片中
- 视觉不可见:单独查看每张图片无法发现异常
- 需要对比:必须通过特定操作才能显现隐藏内容
💡 解题思路
1. 题目分析
**"Divide and Conquer"(分治法)**的含义:
- Divide(分) :Flag 被分成两部分,分别隐藏在
img1.png和img2.png中 - Conquer(治):通过对比两张图片,提取出隐藏的 Flag
2. 技术路线
img1.png
Difference/XOR
img2.png
final.png
可视化 Flag
3. 突破口
- 两张图片尺寸相同(1366×768)
- 两张图片模式相同('1' - 二值图像)
- 97.56% 的像素完全相同
- 关键:2.44% 的差异区域隐藏了 Flag
🔧 详细解题步骤
步骤 1:检查文件结构
发现文件:
img1.png- 第一张图片(二值图像)img2.png- 第二张图片(二值图像)
步骤 2:初步分析图片
使用 Python 查看图片基本信息:
python
from PIL import Image
im1 = Image.open("img1.png")
im2 = Image.open("img2.png")
print(f"Image 1: 模式={im1.mode}, 尺寸={im1.size}")
print(f"Image 2: 模式={im2.mode}, 尺寸={im2.size}")
输出结果:
Image 1: 模式=1, 尺寸=(1366, 768)
Image 2: 模式=1, 尺寸=(1366, 768)
分析:
- 模式
'1'表示二值图像(只有黑白两色) - 尺寸完全相同,可以进行像素级对比
步骤 3:计算图片差异(核心步骤)
使用 ImageChops.difference() 方法:
python
from PIL import Image, ImageChops
# 打开图片
im1 = Image.open("img1.png")
im2 = Image.open("img2.png")
# 计算差异
im3 = ImageChops.difference(im1, im2)
# 保存并查看
im3.save("final.png")
im3.show()
步骤 4:查看结果
打开生成的 final.png,可以看到清晰的 Flag 文字!