PDSCTF的MCU2

关于MCU2怎么搞的我只能说拷打AI就能出结果了
把hex文件直接丢给AI,让他反汇编之后就让AI给你生成用0和1组成的各个字符,之后再让AI把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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
from PIL import Image, ImageDraw
import numpy as np

# 从Intel HEX文件提取的字体数据(30个字符,每个字符8字节)
font_data = [
# 字符0-29的字节数据
[0x7C, 0x62, 0x62, 0x7C, 0x60, 0x60, 0x60, 0x00], # 字符0
[0x78, 0x64, 0x62, 0x62, 0x62, 0x64, 0x78, 0x00], # 字符1
[0x3C, 0x42, 0x40, 0x3C, 0x02, 0x42, 0x3C, 0x00], # 字符2
[0x3C, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3C, 0x00], # 字符3
[0x7E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00], # 字符4
[0x7E, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x40, 0x00], # 字符5
[0x1E, 0x10, 0x10, 0x20, 0x10, 0x10, 0x1E, 0x00], # 字符6
[0x42, 0x42, 0x42, 0x5A, 0x7E, 0x66, 0x42, 0x00], # 字符7
[0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00], # 字符8
[0x00, 0x00, 0x42, 0x42, 0x5A, 0x7E, 0x42, 0x00], # 字符9
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00], # 字符10
[0x42, 0x42, 0x42, 0x3C, 0x18, 0x18, 0x18, 0x00], # 字符11
[0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00], # 字符12
[0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x3E, 0x00], # 字符13
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00], # 字符14
[0x18, 0x24, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00], # 字符15
[0x00, 0x00, 0x5C, 0x62, 0x40, 0x40, 0x40, 0x00], # 字符16
[0x00, 0x00, 0x3C, 0x42, 0x7E, 0x40, 0x3C, 0x00], # 字符17
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00], # 字符18
[0x3C, 0x42, 0x40, 0x4E, 0x42, 0x42, 0x3E, 0x00], # 字符19
[0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00], # 字符20
[0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00], # 字符21
[0x02, 0x02, 0x34, 0x4A, 0x4A, 0x4A, 0x3E, 0x00], # 字符22
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00], # 字符23
[0x18, 0x24, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00], # 字符24
[0x10, 0x10, 0x7E, 0x10, 0x10, 0x10, 0x0E, 0x00], # 字符25
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00], # 字符26
[0x3E, 0x20, 0x20, 0x3C, 0x02, 0x02, 0x3C, 0x00], # 字符27
[0x10, 0x30, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00], # 字符28
[0x78, 0x10, 0x10, 0x08, 0x10, 0x10, 0x78, 0x00] # 字符29
]


def create_led_display(font_data, scale=10, spacing=2, bg_color=(0, 0, 0), led_on=(255, 0, 0), led_off=(50, 0, 0)):
"""
创建LED点阵显示图像

参数:
- font_data: 字体数据列表
- scale: 每个LED点的缩放倍数
- spacing: LED点之间的间距
- bg_color: 背景颜色
- led_on: LED点亮颜色
- led_off: LED熄灭颜色
"""

chars_per_row = 6 # 每行显示的字符数
char_width = 8 # 每个字符宽度(像素)
char_height = 8 # 每个字符高度(像素)

num_chars = len(font_data)
rows = (num_chars + chars_per_row - 1) // chars_per_row # 计算行数

# 计算图像尺寸
img_width = chars_per_row * (char_width * scale + spacing) + spacing
img_height = rows * (char_height * scale + spacing) + spacing

# 创建图像
img = Image.new('RGB', (img_width, img_height), bg_color)
draw = ImageDraw.Draw(img)

for char_idx, char_data in enumerate(font_data):
# 计算字符位置
row = char_idx // chars_per_row
col = char_idx % chars_per_row

# 计算字符左上角坐标
x_start = spacing + col * (char_width * scale + spacing)
y_start = spacing + row * (char_height * scale + spacing)

# 绘制字符的每个像素
for y in range(char_height):
byte_val = char_data[y]
for x in range(char_width):
# 检查每一位(从高位到低位)
pixel_on = (byte_val >> (7 - x)) & 1

# 计算LED点位置
led_x = x_start + x * scale
led_y = y_start + y * scale

# 绘制LED点
color = led_on if pixel_on else led_off
draw.rectangle([led_x, led_y, led_x + scale - 1, led_y + scale - 1], fill=color)

# 添加LED效果(圆角)
if pixel_on and scale > 3:
# 点亮LED的高光效果
highlight_size = max(1, scale // 4)
draw.ellipse([led_x, led_y, led_x + highlight_size, led_y + highlight_size],
fill=(255, 200, 200))

return img


def create_binary_display(font_data, scale=10, spacing=2):
"""
创建二进制显示图像(黑白版本)
"""
chars_per_row = 6
char_width = 8
char_height = 8

num_chars = len(font_data)
rows = (num_chars + chars_per_row - 1) // chars_per_row

# 计算图像尺寸
img_width = chars_per_row * (char_width * scale + spacing) + spacing
img_height = rows * (char_height * scale + spacing) + spacing

# 创建图像
img = Image.new('RGB', (img_width, img_height), (255, 255, 255))
draw = ImageDraw.Draw(img)

for char_idx, char_data in enumerate(font_data):
# 计算字符位置
row = char_idx // chars_per_row
col = char_idx % chars_per_row

# 计算字符左上角坐标
x_start = spacing + col * (char_width * scale + spacing)
y_start = spacing + row * (char_height * scale + spacing)

# 绘制字符的每个像素
for y in range(char_height):
byte_val = char_data[y]
for x in range(char_width):
# 检查每一位(从高位到低位)
pixel_on = (byte_val >> (7 - x)) & 1

# 计算像素位置
pixel_x = x_start + x * scale
pixel_y = y_start + y * scale

# 绘制像素
color = (0, 0, 0) if pixel_on else (255, 255, 255)
draw.rectangle([pixel_x, pixel_y, pixel_x + scale - 1, pixel_y + scale - 1], fill=color)

return img


# 创建LED风格图像(红色LED效果)
led_img = create_led_display(font_data, scale=10)
led_img.save("led_display.png")

# 创建黑白图像(更易识别字符)
binary_img = create_binary_display(font_data, scale=10)
binary_img.save("binary_display.png")

print("图像已生成:led_display.png 和 binary_display.png")

这样在当前目录下会生成两个png图片打开就是flag.
PDSCTF{Wow_You_Are_Good_At_51}


PDSCTF的MCU2
https://boke-git-main-huang-chaos-projects.vercel.app/2025/10/26/PDSCTF的MCU2/
作者
Ined
发布于
2025年10月26日
许可协议