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}
注意要自己添加三个定位符。
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。