BugKu:0和1的故事(writeup)
Posted 哇哈爱吃糖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BugKu:0和1的故事(writeup)相关的知识,希望对你有一定的参考价值。
题目附件包含一个文本文件,内容是一个25x25的01矩阵,在文末给出。从评论区的信息得知如果用0表示一个黑色方块1表示一个白色方块的话该01矩阵实际上是一个缺少定位标志的二维码,如图左。然后通过查询wiki词条可以知道25x25为版本2的二维码尺寸,找一个已有的版本2二维码对比即可得到定位标志的实际图样,将其加到三个角上即可得到一个有效的二维码,如图右。
缺少定位标志 | 添加定位标志 |
---|---|
扫描添加定位标志后的二维码即可得到flag为flag{QR_c0de_1s_1nterest1n9}
,也可以使用一些在线识别二维码的网站,如草料二维码。原始附件转二维码的Python脚本如下:
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((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()
附件内容:
0000000001110010000000000
0000000000011110100000000
0000000001110001000000000
0000000010111100000000000
0000000010101010000000000
0000000001100010100000000
0000000010101010100000000
0000000001000001100000000
1100011101110110100011000
0001000010110010010010100
0100111101000011101110011
0011110100101011001001001
1000001001100001001101000
1111000111111011100101000
1011011111001101111110111
1000110110010010101101100
1000111100111111111110111
0000000010110001100010100
0000000010010100101010001
0000000010101010100011001
0000000000100111111110010
0000000000011001011110111
0000000001001100100100001
0000000011000011011011001
0000000011010000101110101
以上是关于BugKu:0和1的故事(writeup)的主要内容,如果未能解决你的问题,请参考以下文章