오늘은 USB프로토콜의 프리젠터가 보내는 패킷들을 분석하고, 어떤 형태로 나타내어 지는지 알아보려고 한다.
USB(Universal Serial Bus)는 컴퓨터와 주변 장치 간 통신을 위한 범용 인터페이스이다. USB 프로토콜은 호스트(예: PC)와 디바이스(예: 마우스, 키보드, 프리젠터) 간의 통신 구조를 가지며, 기본적으로 다음과 같은 단계를 거친다.

Source: 2.32.1 — 디바이스 주소 2, 구성 32, 인터페이스 1 (프리젠터로 추정)
Destination: host — 컴퓨터
Protocol: USB
Length: 35 — 총 패킷 길이
Info: URB_INTERRUPT in — 인터럽트 IN 전송. 디바이스 → 호스트 방향 데이터 전송
아래 상세 정보 (하단 패널)
URB Function: URB_FUNCTION_SELECT_CONFIGURATION → 디바이스 구성 선택 (초기 설정 단계)
URB transfer type: URB_CONTROL (0x02) → 제어 전송 타입
Endpoint: 0x00, Direction: OUT → 호스트에서 디바이스로 제어 명령 전송
Packet Data Length: 0
Control transfer stage: Complete (3) → 전송이 정상 완료됨
HID Data : 키보드처럼 보내는(프리젠터가 보내는)데이터
-> 2.31.1 은 USB 프리젠터로서 현재 host에게 데이터를 전송하고 있는 것 이다.
이제 예시 문제를 풀어본다.

프리젠터를 막 눌렀다는 설명과 함께 패킷 파일이 주어진다.

실제 막 누르기 시작한 부분은 31번째 패킷부터 시작된다.
그리고 살펴보며 특징들을 정리하였다. ( 어려움을 느껴 힌트를 참고를 하면서 풀었다 )
HID Data는 4n 번째 마다 반복된다. 또한 프리젠터를 누르는 간격이 0.xxx 인 것도 있고, 1초를 넘어가는 경우도 있다.
먼저 HID DATA 를 해석하는 방법은 아래의 사이트를 참고하였다.
https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2
가장 첫 HID DATA를 분석해본다.

020052000000... 이다.

0x02는 HID DATA에서 Left Shift를 나타낸다.

0x52는 Keyboard Up Arrow를 나타낸다. 즉 위 화살표 방향이다.
두번째 HID DATA를 분석해본다.

0x51은 Keyboard Down Arrow 즉 아래 화살표 방향이다.
차례로 써보면
52 51 52 51 51 51 51 52 51 ... 이렇게 불규칙하게 나타난다. 처음에는 HID DATA 혹은 시간 초의 차이로 아스키 값을 타나태는 줄 알았다. 하지만 아스키 값이면 유의미한 데이터만 있어야 하는데 SP등의 데이터가 나오는 것을 보고, 이는 아님을 판단했다.
( 여기서부터는 헤메기 시작해서 참고를 하였다 )
정답은 모스 부호에 있었다. 정말 생각도 못하였는데, 가장 고전적인 디지털 통신 방식인 모스부호를 나타낼줄은 몰랐다.
아무튼 이 데이터들은 2개의 값으로 모스부호를 나타낸 것이고, 시간 간격이 1초가 넘어가는 부분이 바로 이 모스부호를 끊는 단위였던 것 이다. 앞으로 2개의 값으로 표현되는 어떤 데이터가 있다면, 2진수값 뿐만 아니라 모스부호도 생각 할 수 있는 계기가 된 문제인 것 같다.
해당 초 단위로 51은 Q로 52는 R로 생각하여 끊어서 나타내 보겠다.
RQR
QQQQ
RQR
RQRRQ
QRQQ
RRR
RRR
RQR
QQRRQR
QR
R
QQRRQR
RR
RQRR
QQRRQR
QRRQ
QRRQ
R
RQRRQR
이다.

이제 각 모스 부호로 변환해본다.
R은 - 이고, Q는 .이다.
KHK{LOOK UK AT UK MY UK PPT}
매치 되는 부분이 마땅이 없는 것들이 있었다.
그래도 FLAG 형식을 알려주긴 하였으니 대충 몇가지를 때려 맟추어 보았다.
결과적으로는 KNK{LOOK_AT_MY_PPT}가 답이였다.