Cha nào rảnh đi cướp acc umamusume trong ctf v =))))
Ok nay cùng nhau giải bài CTF này nhé !

Coi File pref.pcap :

Giao diện chính của wireshark
“W” chat , chúng ta có 9888 hàng dữ liệu ở đây . Protocol là USB ⇒ có khả năng là các thiết bị ngoại vi như chuột hoặc bàn phím ,…

Ở cột Info chúng ta có dữ liệu là URB_INTERRUPT in ⇒ search gg trên mạng có tấm ảnh dưới , nó là transfer-type , URB_INTERRUPT IN = yêu cầu host đọc dữ liệu interrupt từ thiết bị USB ( có lẽ là chuột hoặc là bàn phím =))) này tôi phải ngồi mò )


Đây là phần data của 1 cái dữ liệu tôi bắt được ,thường là nó sẽ hiện URB id: keyboard/mouse ,nhưng ở đây nó ko hiện gì cả nhưng chúng ta có 1 cách nữa là đọc Leftover Capture Data
Ví dụ ảnh trên ta có là : 01 00 00 00 00 00 00

dựa vào bảng này mà tui lụm được ở tài liệu này (https://www.usb.org/sites/default/files/documents/hid1_11.pdf ) thì mình sẽ đọc được là
2 số đầu là phím chuột , 2 số tiếp theo là vị trí của X , 2 số tiếp theo là vị trí của Y , từ 2 số tiếp theo đến hết là đặc trưng thiết bị kiểu như firmware , setting lưu trong chip nhớ , bla bla ( có gì anh em google có hết nhé <(”) )
Bây giờ câu hỏi là làm thế nào để tìm được flag ?
ok bây giờ mình đi xuất hết dữ liệu của 9888 dòng này nhé :
Dùng lệnh :
tshark -r pref.pcap -T fields -e usb.capdata
và chúng ta có 1 đống data ở dưới :

Lúc tôi giải thì chưa biết xử lý thế nào với đống này , nên là tui đã dùng tạm con Claudie , và chúng ta có cái này :

Cha admin viết xấu vc , Flag là : ECSC{wh4t_c0l0ur_15_th3_fl4g}
Tham khảo thêm vibing code của Cha Admin :
import matplotlib.pyplot as plt
import struct
x, y = 0, 0
strokes, current = [], []
scale, spacing = 1.5, 150
with open("data.txt", "r") as f:
for line in f:
line = line.strip()
if len(line) < 14:
continue
data = bytes.fromhex(line)
dx = struct.unpack('<h', data[2:4])[0]
dy = struct.unpack('<h', data[4:6])[0]
new_x, new_y = x + dx, y + dy
dist = (dx**2 + dy**2)**0.5
if dist < 50:
current.append((new_x * scale, -new_y))
else:
if current:
strokes.append(current)
x += spacing
current = [(new_x * scale, -new_y)]
x, y = new_x, new_y
if current:
strokes.append(current)
plt.figure(figsize=(20, 10))
for stroke in strokes:
if len(stroke) > 2:
xs, ys = zip(*stroke)
plt.plot(xs, ys, linewidth=2, color='blue')
plt.axis('equal')
plt.grid(True, linestyle='--', alpha=0.5)
plt.title("Khôi phục Flag - CTF Challenge", fontsize=16, fontweight='bold')
plt.show()
kết luận đây là đây là mouse movement CTF ( vẽ hình r capture = wireshark )
tham khảo thêm tại đây:
https://github.com/WangYihang/USB-Mouse-Pcap-Visualizer/tree/main?tab=readme-ov-file
và thế là bạn đã giải thành công mật mã Extra #1
written by s3n_ch4n
