Bugku 杂项 - 1和0的故事

1 题目链接

http://ctf.bugku.com/challenges/detail/id/216.html?page=2

2 题目分析

一个 txt 文件,里面一堆 0 和 1,应该是要画出一个二维码。

直接对二维码不太了解,正好借机学习一下。

3 解题过程

3.1 Excel 绘制

直接把 txt 内容复制到 Excel,分别替换 0(白) 和 1(黑),按照经验,行高 15.1,列宽 2 正合适,然后扫码得到 flag。flag{QR_c0de_1s_1nterest1n9}

注意要自己添加三个定位符。
image

3.2 代码绘制

利用 Python 的 Pillow 库绘制二维码[1]

from PIL import Image

with open("1和0的故事.txt", "r") as f:
    data = [list(i.strip()) for i in f.readlines()]

# 7*7的定位标志
flag = [
    [1, 1, 1, 1, 1, 1, 1],
    [1, 0, 0, 0, 0, 0, 1],
    [1, 0, 1, 1, 1, 0, 1],
    [1, 0, 1, 1, 1, 0, 1],
    [1, 0, 1, 1, 1, 0, 1],
    [1, 0, 0, 0, 0, 0, 1],
    [1, 1, 1, 1, 1, 1, 1]
]

img = Image.new("1", (25, 25))
for i in range(len(data)):
    for j in range(len(data[1])):
        # 左上角定位标志
        if i < 7 and j < 7:
            # img.putpixel 0 是黑色,1 是白色,需要转换一下
            img.putpixel((i, j), flag[i][j] ^ 1)
        # 左下角定位标志
        elif i > 17 and j < 7:
            img.putpixel((i, j), flag[i-18][j] ^ 1)
        # 右上角定位标志
        elif i < 7 and j > 17:
            img.putpixel((i, j), flag[i][j-18] ^ 1)
        else:
            img.putpixel((i, j), int(data[i][j]) ^ 1)

img.resize((500, 500)).show()

Over。


  1. https://blog.csdn.net/qq_43528553/article/details/119084941 ↩︎

posted @ 2022-01-08 23:04  Ainsliaea  阅读(757)  评论(0编辑  收藏  举报