IoT x 数字逻辑实验 √
Barcode
我不理解这道题为什么会突然出现在 IoT 赛道(
运行代码得到 flag THUCTF
,但是这个 “let’s there be” 是什么鬼(
from PIL import Image
im = Image.open("output.png")
data = im.load()
b = ""
for i in range(12, im.size[0], 24):
b += "1" if data[i, 0] == (0, 0, 0) else "0"
print("".join([chr(int(b[i : i + 7], 2)) for i in range(0, len(b), 7)]))
STM32
首先你要明白这题不需要你给 STM32 编程(,虽然后来想起来感觉很蠢,但我一上来先装了个 STM32 IDE,装完感觉不对(
然后需要把线连对,而把线连对最主要的是把 pin 看对,芯片把圆圈放在左上角,晶振多出来一个直角的那个角是一号脚,编号是逆时针转圈依次编。
UART
把 USB to TTL 输出的 3V3 和 GND 接到板子和晶振,把晶振的输出接到 OSCIN,把 UART TX (PA9) 接到 USB to TTL 的 RX,然后就可以通过串口读到 flag。
USB
按照电路图,把 PA11 接到 USB 转 5pin 的 D-,把 PA12 以及 5V 串上电阻接到 D+,根据代码中的判断条件还需要把 PB6 和 PB7 接地。然后插到电脑上,会周期性把 flag1 THUCTF
以键盘的方式输入到电脑上,而设备的名称是 flag2。
SWD
把板子的 RST, SWCLK, SWDIO 连到 ST-LINK 上,然后插到电脑上。
参考 stlink/doc/tutorial.md,通过 st-util
启动 GDB server,然后启动 arm
,输入 layout asm
和 target
,设置断点 b *0x800069c
,然后 kill
再 run
,在断点观察到汇编如下:
此时 jump *0x800069e
即可在串口接收到 flag1。
查看 sp
的值,然后打印栈上的字符串,即可看到 flag2。
这是你的电路板吗?这就不是!
使用搜索引擎找到 httpsHi3861.zip
,可以看到 flag 的后半部分。再在 layers 中设置只查看 top / bottom overlay 就可以看到整个 flag。
Harmony - Turn up the light!
查看电路图得到答案是 GPIO02。