【CTF技战法】Misc中的拼图题目

admin 2025年4月6日20:03:31评论0 views字数 2732阅读9分6秒阅读模式

开个玩笑

遇到拼图不要慌,PS打开慢慢贴。

典型题目1 - 仓鼠的窝

以“青少年CTF平台”中仓鼠的窝题目为例:

【CTF技战法】Misc中的拼图题目
【CTF技战法】Misc中的拼图题目

下载附件后,得到一张原图.jpg和一个png.zip

png.zip中,包含了被分割的图片。

【CTF技战法】Misc中的拼图题目

分析题目

解压后发现5184个项目,也就是分割出了5184个文件。

【CTF技战法】Misc中的拼图题目
【CTF技战法】Misc中的拼图题目

每一个图片为35x11像素,宽度35,高度11。

原图为1920*1080

【CTF技战法】Misc中的拼图题目

那么1920*1080,计算有多少图片应该就是:

sage: width = 1920
sage: height = 1080
sage: w = 35
sage: h = 11
# 宽度应该有几张图片? width / w = 384/7 大约54
# 高度应该有几张图片? height / 11 = 1080/11 大约98

所以高度、宽度不全等,目前得出结论是:这个图片有混淆!

得到这种情况可能有两种原因:

1.出题人故意而为

2.出题人分割脚本有误

3.排序方法不精确或排序方法的根本问题

但是不管哪种情况,你用正常的拼图脚本得到的结果应该是像下面这样的:

from PIL import Image
import os

defauto_puzzle(original_path, png_dir, output_name):
# 读取原图尺寸
    original = Image.open(original_path)
    orig_width, orig_height = original.size

# 获取碎片文件并按时间排序
    files = [os.path.join(png_dir, f) for f in os.listdir(png_dir) if f.endswith(".png")]
    files.sort(key=lambda x: os.path.getmtime(x))
    images = [Image.open(f) for f in files]

# 校验碎片尺寸一致性
    first_img = images[0]
    tile_width, tile_height = first_img.size
if any(img.size != (tile_width, tile_height) for img in images):
raise ValueError("碎片图片尺寸不统一")

# 计算行列数(两种模式)
    cols_horizontal = orig_width // tile_width  # 横向优先的列数
    rows_vertical = orig_height // tile_height  # 纵向优先的行数

# 自动选择最优布局(优先横向填充)
if len(images) % cols_horizontal == 0:
        rows = len(images) // cols_horizontal
        cols = cols_horizontal
else:
        cols = int((orig_width / tile_width) + 0.5)
        rows = len(images) // cols + 1

# 创建画布
    canvas = Image.new("RGB", (orig_width, orig_height))

# 网格填充
for index, img in enumerate(images):
        x = (index % cols) * tile_width
        y = (index // cols) * tile_height
        canvas.paste(img, (x, y))

    canvas.save(output_name)
return canvas

# 执行拼图
auto_puzzle("../原图.jpg""../png""auto_puzzle.jpg")
【CTF技战法】Misc中的拼图题目

解决题目(方法1)

因为已经可以看到图片中有明显的字符串的痕迹,挑选出包含字符串的图片,然后拼接成新的图片。

【CTF技战法】Misc中的拼图题目

解决题目(方法2)

因为图片数量较多,截止文章编写时,仍未解出正常的图片,故不推荐。

安装前置工具

【CTF技战法】Misc中的拼图题目我的Kali中是已经安装过的,如果没有安装的话可以参考命令去安装一下。

但是没gaps的话就很鸡肋了

所以还需要安装一下gaps(注意一下Python版本,3.12以上可能无法正常使用)

git clone https://github.com/nemanja-m/gaps.git
cd gaps
sudo apt update
sudo apt install python3-poetry
poetry install
pip install .
附(Python3.11安装)
sudo apt update
sudo apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev curl tk-dev
wget https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tgz
tar -xzf Python-3.11.5.tgz
cd Python-3.11.5
./configure --enable-optimizations
make -j4
sudo make altinstall
python3.11 --version
python3.11 -m pip install . # 继续上面的执行
【CTF技战法】Misc中的拼图题目
【CTF技战法】Misc中的拼图题目

注意:如果不跳出上面这个目录,就会进入gaps目录里。

这里我们已经安装成功了。

使用montage和gaps解题
montage ./png/*.png -geometry +0+0 flag.png  
gaps run ./flag.png newflag.png --population=5184 --size=35
【CTF技战法】Misc中的拼图题目
【CTF技战法】Misc中的拼图题目

解密时间巨长

【CTF技战法】Misc中的拼图题目

但是听说没办法按照这个方式拼图成功...

我先试试看,如果不行明天就不更新文章了(逃...)

典型题目2 - 西安加油

以“青少年CTF平台”中西安加油题目为例:

【CTF技战法】Misc中的拼图题目
【CTF技战法】Misc中的拼图题目

下载附件后,得到secret.pcap文件

分析题目

【CTF技战法】Misc中的拼图题目

使用Wireshark导出HTTP对象列表到文件,之后按照文件大小倒序排序。

【CTF技战法】Misc中的拼图题目

将secret.txt中的base64提取,转为文件

【CTF技战法】Misc中的拼图题目
【CTF技战法】Misc中的拼图题目

发现是ZIP文件,将ZIP文件保存,得到:

【CTF技战法】Misc中的拼图题目

解决题目

因为图片数量比较少,真正使用拼图的人也比较多,也比较简单,这里着重说明使用montage和gaps解题。

montage ./chips/*.png -geometry +0+0 flag.png

将图片拼合成新的图片

【CTF技战法】Misc中的拼图题目
gaps run ./flag.png newflag.png --population=48 --size=100

使用gaps进行识别拼图

【CTF技战法】Misc中的拼图题目

这样就已经能得到正确的FLAG了。

原文始发于微信公众号(中学生CTF):【CTF技战法】Misc中的拼图题目

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月6日20:03:31
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【CTF技战法】Misc中的拼图题目https://cn-sec.com/archives/3919753.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息