BugKu-MISC-1和0的故事

BugKu-MISC-1和0的故事

Mel0ny Lv5

BugKu-MISC-1和0的故事

题目

Question
Question

思路

这一眼就知道是二进制转二维码,把0转成白色,1转成黑色
拿ai跑个脚本(注:这是不被允许的,但是这是做题)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
把0/1矩阵转成二维码样式图片:
- 1 = 黑色
- 0 = 白色
- 自动在左上、左下、右上添加 Finder Pattern
"""

import argparse
from PIL import Image, ImageOps


def read_matrix_from_file(path):
with open(path, "r", encoding="utf-8") as f:
lines = [line.strip().replace(" ", "") for line in f if line.strip()]
if not lines:
raise ValueError("输入文件为空!")
width = len(lines[0])
for i, row in enumerate(lines, 1):
if len(row) != width:
raise ValueError(f"第 {i} 行长度 {len(row)} 与首行 {width} 不一致")
if any(c not in "01" for c in row):
raise ValueError(f"第 {i} 行含有非法字符:{row}")
return [[c == "1" for c in row] for row in lines]


def add_finder_patterns(matrix):
"""在左上、左下、右上加上7x7的finder pattern"""
rows, cols = len(matrix), len(matrix[0])

def put_finder(r0, c0):
for r in range(7):
for c in range(7):
rr, cc = r0 + r, c0 + c
if rr >= rows or cc >= cols:
continue
# Finder pattern 规则
if (
r in [0, 6]
or c in [0, 6]
or (2 <= r <= 4 and 2 <= c <= 4)
):
matrix[rr][cc] = True # 黑
else:
matrix[rr][cc] = False # 白

put_finder(0, 0) # 左上
put_finder(rows - 7, 0) # 左下
put_finder(0, cols - 7) # 右上
return matrix


def matrix_to_image(matrix, scale=10, margin=4):
rows, cols = len(matrix), len(matrix[0])
flat_bits = []
for row in matrix:
for v in row:
flat_bits.append(0 if v else 1) # 黑=0 白=1

base = Image.new("1", (cols, rows))
base.putdata(flat_bits)
img = base.resize((cols * scale, rows * scale), resample=Image.NEAREST)

if margin > 0:
border_px = margin * scale
img = ImageOps.expand(img, border=border_px, fill=1)

return img.convert("L")


def main():
parser = argparse.ArgumentParser(description="0/1矩阵转二维码样式PNG")
parser.add_argument("-i", "--input", required=True, help="输入矩阵文件(文本,包含0和1)")
parser.add_argument("-o", "--output", default="qr.png", help="输出PNG文件名")
parser.add_argument("--scale", type=int, default=10, help="每个模块像素大小")
parser.add_argument("--margin", type=int, default=4, help="外边距模块数")
args = parser.parse_args()

matrix = read_matrix_from_file(args.input)
matrix = add_finder_patterns(matrix)
img = matrix_to_image(matrix, scale=args.scale, margin=args.margin)
img.save(args.output)
print(f"✅ 已生成二维码样式图:{args.output}")


if __name__ == "__main__":
main()

输入指令然后扫码就可以得到flag了

1
python bin2qr_with_finder.py -i 1和0的故事.txt -o qr.png --scale 20

Question

Flag

1
flag{QR_c0de_1s_1nterest1n9}
  • 标题: BugKu-MISC-1和0的故事
  • 作者: Mel0ny
  • 创建于 : 2025-08-30 11:25:02
  • 更新于 : 2025-08-30 11:34:41
  • 链接: https://mel0nyrame.github.io/2025/08/30/BugKu-MISC-1和0的故事/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
BugKu-MISC-1和0的故事