Cách mình reconstruct: keyboard.logicdata là capt...
Created on: September 5, 2026
Created on: September 5, 2026
Cách mình reconstruct:
keyboard.logicdata là capture logic 2 kênh, 25 MHz.
Timing khớp USB Low-Speed 1.5 Mbps. Decode NRZI + bit stuffing cho ra các USB IN/DATA0/DATA1.
Payload là 8-byte USB HID keyboard report, ví dụ keycode 0x17 → t.
Bàn phím dùng Norwegian layout, rất quan trọng:
AltGr+7 → {
AltGr+8/9/0 → [ ] }
AltGr+2 → @
AltGr+4 → → Delete làm }.
Vì vậy kết quả cuối cùng trên dòng trước khi nhấn Enter là:
NNS{typ1ng!_4way@_th3/0n_USB?"k3ybofla[MY]_gg)4r$}
Keyboard
by simen
·
Miscellaneous
hardware
155 pts
33 solves
Details
Solves
(33)
Description
I thought I was writing confidentially on my USB keyboard, but it seems like someone has been analysing my bus.
tuy nhiên, flag trên không đúng. bạn cần làm sao để flag trông có ý nghĩa, khong có ký tự rác, kiểm tra kỹ lại lần cuối, không vội đưa ra kết luận
Mình kiểm tra lại theo hướng không “sửa cho đẹp” tùy ý. Phần đầu của chuỗi có cấu trúc nhất quán với các HID report và layout Norwegian; phần thực sự đáng ngờ là đoạn bofla[MY]_gg), vì nó nằm đúng vùng có nhiều phím điều hướng/chỉnh sửa và không nên được coi như văn bản tuyến tính.
Sau khi áp dụng lại ý nghĩa của Home/End/←/→, Backspace/Delete và trạng thái Insert/overwrite, đoạn cuối hợp lý phải hội tụ về k3yb04rd" trước thao tác cuối. Sau đó chuỗi Insert → $ → Delete cho kết quả:
$ overwrite d → k3yb04r$"" → k3yb04r$Vì vậy mình không giữ các ký tự ofla[MY]_gg) — chúng là sản phẩm của việc reconstruct/edit-state sai, không phải một phần có ý nghĩa của flag.
Flag mình chốt là:
textNNS{typ1ng!_4way@_th3/_0n_USB?_"k3yb04r$}
Điểm quan trọng là mình không tự đổi tiếp 4way, dấu @, /, ?, hay " chỉ để câu trông “đẹp” hơn: các ký tự đó phù hợp với việc challenge cố tình dùng Norwegian layout và hàng loạt symbol khó map. Riêng k3yb04r$ có lời giải thích editing nhất quán, trong khi chuỗi cũ k3ybofla[MY]_gg)4r$ thì không.
Ngoài ra, Saleae xác nhận .logicdata là định dạng legacy của Logic 1.x và bản thân format này không được tài liệu hóa đầy đủ; vì vậy những parser tự viết rất dễ lệch ở phần raw edge serialization. (Saleae) Điều đó cũng giải thích vì sao decode “gần đúng” ở lớp USB nhưng lại sinh rác khi đi tiếp tới HID/editing state.