[Dreamhack] My Nervous PPT (Level 1) misc, forensics

2026. 3. 31. 18:59·디지털 포렌식/워게임 풀이
문제 설명

Umm.. 난 PPT 발표를 하기 전, 긴장된 마음을 풀고자
프리젠터를 막 누르곤 하지.. :(

FLag 형식은 KHK{}입니다.

 

*수정
모든 Flag는 대문자입니다.


 

압축 파일을 열면 .pcapng 파일이 보인다. 이게 무슨 파일이지?

Pcapng 파일이란?

pcapng( PCAP Next Generation ) 파일 형식은 기존의 pcap을 발전시킨 파일 형식이다. 기존 pcap과 비교하여 패킷 캡처를 한 인터페이스 정보, 주석, 이름 확인 정보 등 더 많은 메타데이터가 추가되었다.

파일의 시그니처도 기존 pcap과 다르다. 기존의 pcap 파일의 시그니처가 D4 C3 B2 A1 이라면, pcapng 파일의 시그니처는 0A 0D 0D 0A 이다.
PCAP(Packet Capture) 파일은
 
네트워크 인터페이스를 통과하는 트래픽을 캡처하여 저장한 파일 형식
으로, 와이어샤크(Wireshark)나 tcpdump 등을 통해 네트워크 문제 해결, 보안 분석, 패킷 분석 연습에 주로 사용됩니다.

아하.. 와이어샤크로 열어야하는 파일인가 보다

와이어샤크로 파일을 열어보자. 

파일이 이렇게 생겼는데... 네트워크.. 패킷 인가?

계속 비슷하게 생긴 destination으로 내용을 주고받고 있다.

계속 GET과 SET이 반복되고 아래에 되게 많은 내용이 있다.

 

일단 GET 내용을 검색해봤다.

USB 디바이스 설명자라고 한다. 

아 컴퓨터에 USB가 연결되었고, 그 USB에서 일어난 활동이 기록된건가?

 

USB 활동이 네트워크 패킷처럼 기록된다는 점이 이해가 잘 안가서 검색을 해봤는데, Wireshark 공식에서 설명하고 있는 페이지를 찾을 수 있었다.

https://wiki.wireshark.org/CaptureSetup/USB

 

USB 패킷을 일반 네트워크 인터페이스처럼 보이는 네트워크 인터페이스를 제공한다고 한다. 또한 이런 USB 캡처는 USB 패킷이 아니라 URB 를 캡처한다.

URB (USB Request Block): USB 드라이버와 USB 호스트 컨트롤러가 통신하는 데 사용하는 구조체입니다. USB 장치에 요청을 보내거나 데이터를 받을 때 사용됩니다.

아하.. 그러니까 이건 일단 네트워크 내용은 아니고, USB에 정보 주고받고 한 내용인 것 같다.

 

잘 보면 31번 부터 쭉 밑으로 URB_INTERRUPT in 이라고 되어있다. 

이건 GET과 SET 이랑 무슨 차이일까?

URB_INTERRUPT in 은 와이어샤크(Wireshark) 등의 패킷 분석 도구에서 USB 장치가 보낸 인터럽트(Interrupt) 전송 데이터를 나타내는 패킷 정보를 뜻한다.

시간에 집중해서 보니 아마 GET, SET 요청들은 0초에 일어나 USB를 컴퓨터에 연결하는 과정이었고, 31번의 URB_INTERRUPT in 이 요청들이 아마 실제로 USB에서 발생한 일들인 것 같다.

그 밑으로 계속 반복이라 이제는 세부 내용을 살펴 보아야 더 많은 정보를 확인 할 수 있을 것 같다.

 

패킷을 클릭해서 보면 오른쪽의 Hex로 볼 수 있는 부분에서 데이터를 ASCII 문제로 바꿔놓은 것이 보인다.

눈에 띄는 것은 gu 라는 글자가 쓰여 있는 IRP ID와 R 이라는 HID Data 이다.

 

IRP ID : 운영 체제와 USB 장치 간의 입출력 요청을 추적하기 위해 USB 캡처에서 사용되는 고유 식별자로 이는 개별적으로 처리되는 단일 USB 거래의 여러 단계(예: 제출, 완료 및 데이터 전송)를 연결하는 핸들 역할을 한다.

IRP : 3가지 역할을 가진다. 쓰기 요청은 드라이버가 장치에 데이터를 쓸 수 있도록 데이터를 전달합니다. 읽기 요청은 드라이버가 장치에서 데이터를 가져와 버퍼를 채울 수 있도록 버퍼를 전달합니다. 장치 I/O 제어(ioctl)는 읽기/쓰기 이외의 모든 목적으로 드라이버와 통신하는 데 사용됩니다

https://medium.com/@boutnaru/the-windows-concept-journey-irp-i-o-request-packet-e4229d35214e

 

The Windows Concept Journey — IRP (I/O Request Packet)

On Windows most of the requests which are sent to device drivers are packaged as an IRQ (I/O Request Packet) — as shown in the diagram…

medium.com

(너무 어려운 것 같다... 아마 USB와 장치 사이의 읽기/쓰기 요청을 전달하는 것을 IRP 라고 하는 듯하고, 이 전달 각각에 고유 식별자를 붙인 것을 IRP ID 라고 하는 듯 하다)

 

HID Data : HID Data는 Human Interface Device Data 의 약자로, 키보드, 마우스, 게임 컨트롤러 등 인간이 직접 조작하는 USB 장치들이 컴퓨터와 주고받는 실제 입력 데이터를 의미합니다.

어? 그럼 저 R이 실제로 사람이 키보드로 작성한 문자인걸까?

다른 패킷들을 더 보니 Q가 써진 것도 보이며, 계속 찾아봤는데 HID Data는 R과 Q 말고는 다른 값은 보이지 않는다.

또한, IRP ID 같은 경우도 gu와 Px6(Hex 값) 만 반복된다. (2번씩 반복된다! 따로 패턴은 없는듯)

2가지 값만 반복되는 걸로 보아 아마 이진수가 아닐까??

 

먼저 사용자가 직접 키보드로 입력한 것으로 보이는 R과 Q를 먼저 전부 적어보기로 한다.

RQRQQQQRQRRQRRQQRQQRRRRRRRQRQQRRQRQRRQQRRQRRRRQRRQQRRQRQRRQQRRQRRQRRQR

세어보니 총 70자 인데.. 이진수라고 생각해서 8개씩 짝 지을 생각이었는데 딱 맞질 않는다. 그래도 일단 해보자.

 

RQRQQQQR

QRRQRRQQ

RQQRRRRR

RRQRQQRR

QRQRRQQR

RQRRRRQR

RQQRRQRQ

RRQQRRQR

RQRRQR

 

경우의 수는 두가지! R이 0이거나 Q가 0이거나!

1. R이 0인경우

01011110 10010011 01100000 00101100 10100110 01000010 01100101 00110010 010010

일단 이건 아닌 것 같다..

 

2. Q가 0인 경우

10100001 01101100 10011111 11010011 01011001 10111101 10011010 11001101 101101

이것도 아닌 것 같다... 아무래도 이 방향이 아닌 것 같으니 다시 생각해보자.

 

근데 왜 하필 R과 Q일까? HID Data의 R과 Q에 다른 의미가 있는지 확인해보자.

hid 키 코드를 검색새 보았다.

https://e-circuit.tistory.com/89

 

USB HID Key Code (Keyboard)

Keyboard 일반 Key Code (숫자, 영문, Function Key) Usage IDAT-101Usage Name Usage IDAT-101Usage Name431Keyboard a and A3A112Keyboard F1550Keyboard b and B3B113Keyboard F2648Keyboard c and C3C114Keyboard F3733Keyboard d and D3D115Keyboard F4819Keybo

e-circuit.tistory.com

https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2

 

USB HID Keyboard scan codes

USB HID Keyboard scan codes. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

이런 USB HID Key Code를 찾았다!

값에 따라 키보드를 누른 값이 다르다고 한다.

 

아까 R 값은 정확한 HID Data로 보면 0x0200520000000000 이다.

마찬가지로 Q 값은 0x0200510000000000 이다.

이 값을 토대로 저 깃허브에서 그 값을 보면,

 

 

HID Data: 0200520000000000  ----> 요게 R로 보이긴 하는데

02 -> LSHIFT 왼쪽 쉬프트

00 -> 아무것도 안누른거

52 -> KEY_UP 키보드 위쪽 화살표

 

그러니까 왼쪽 쉬프트 누르고 위쪽 화살표 누른거...?

 

HID Data: 0200510000000000 ----> 요게 Q로 보이던거

02 -> LSHIFT 왼쪽 쉬프트

00 -> 아무것도 안누른거

51 -> KEY_DOWN 키보드 아래 화살표

 

그러니까 왼쪽 쉬프트 누르고 아래 화살표 누른거...?

앗 더 알아보니 HID keycode와 HID Data 값은 다르다고 한다....

HID Keycode는 물리적 키에 대한 1바이트 숫자 식별자이고, HID Data는 호스에게 전송된 8바이트의 패킷이며 modifiers와 6개의 동시 keycodes를 포함한다고 한다!

 

게다가 다시 생각해보니 USB로 연결된 것만 알지 이게 마우스인지, 키보드인지, 기타 다른 장비일지는 아무도 모른다. 너무 섣불리 키보드라고 생각했나보다.

 

잠시 머리를 식히고 다시 문제를 풀려고 하다가 다시 문제이름이랑 문제 설명을 보니까 PPT와 프레젠터가 언급되어있다!!!

아마 저 R과 Q 값이 나오는건 프레전터의 버튼을 누르면서 나오는 값이겠다는 추측을 할 수 있다.

 

그럼 다시 돌아와서... 어떻게 이 문제를 풀 수 있을까?

주어진건 .pcapng 파일 하나뿐이다.

혹시나 7-zip으로 파일을 더 압축해제할 수 있나 확인해보았으나 아니었다.🥲🥲

 

다시 패킷을 자세히 살펴보자.

패킷마다 달라지는 건 없는걸까? 

 

source와 destination도 host와 2.32.1을 반복하고, length도 35와 27을 반복... 달라지는 거라곤 시간 흐르는 거 때문에 시간 밖에 없는데...

아 시간인가????

그러고 보니 R 값이나 Q 값이 보일 때마다 아래 세부 사항에 추가로 생기는 란이 있다

Time from request 

사용자/시스템이 요청을 시작한 시점부터 최종 응답을 받는 시점까지의 소요 시간을 나타내는 거라고 한다.

대부분 이렇게 1초 미만으로 나타나는데,

가끔

이렇게 3초씩 걸릴 때도 있다. 이게 차이점인 걸까?

그럼 이걸 기준으로 나눠보자. 

RQR QQQQ RQR RQRRQ QRQQ RRR RRR RQR QQRRQR QR R QQRRQR RR RQRR QQRRQR QRRQ QRRQ R RQRRQR

 

오 이거 좀 그럴 듯 한 게, 플래그 형식이 KHK{} 라서 RQR이 초반에 가운데 QQQQ를 사이에 두고 반복되는게 마치 플래그 모양 같기도 하다. 

 

이건 그럼 어떻게 암호화 되어 있는거지...

RQR = K

QQQQ = H

RQRRQ = {

RQRRQR = }

일 수 있다는 추측은 할 수 있으나, 이걸 어떻게 하는게 좋을까....

 

아까 처럼 이진수...?

아무래도 R이랑 Q 밖에 없으니까 이진수로 하는 게 맞는 것 같은데...

010 1111 010 01001 1011 000 000 010 110010 10 0 110010 00 0100 110010 1001 1001 0 010010 가 되거나

101 0000 101 10110 0100 111 111 101 001101 01 1 001101 11 1011 001101 0110 0110 1 101101 가 된다.

 

이진수라면 모든 심볼이 동일한 비트 수여야 하는데, 그렇지 않다. RQR은 3자리, R은 1자리, QQRRQR은 6자리로 길이가 제각각이다.

고정 길이 인코딩이 아니라는 뜻인데... 가변 길이 인코딩 중에 R과 Q, 딱 두 가지 심볼만 쓰는거...

 

모스부호다 모스부호!!!!

계속 이진수만 생각하고 다른 가벼 길이 인코딩도 둘러봤는데 계속 답이 안나와서 너무 어려웠다. 

RQR QQQQ RQR RQRRQ QRQQ RRR RRR RQR QQRRQR QR R QQRRQR RR RQRR QQRRQR QRRQ QRRQ R RQRRQR

 

이거를

RQR = K

QQQQ = H

RQRRQ = {

RRQRRQR = }

이니까

R= - , Q = . 이라고 생각한다.

 

근데 여기서 왜 모스부호를 떠올리기가 어려웠냐면, 기호 때문이었다!!

 

{ } -> 이런 애들도 모스부호가 있는 것을 처음 알게 되었다.

 

따라서 전체를 모스부호로 바꿔주면??

 

-.-  ....  -.- -.--. .-.. .-.. --- -.- ..--.- .- - ..--.- -- -.-- ..--.- .--. .--. - -.--.-

KHK{LOOK_AT_MY_PPT} 가 된다!!! 오예

 

🎉🎉🎉🎉🎉🎉🎉

'디지털 포렌식 > 워게임 풀이' 카테고리의 다른 글

[Dreamhack] 64se64 - misc  (0) 2026.05.12
[flaws.cloud] Level 1 write up  (0) 2026.05.05
[Dreamhack] Gyul Box (Level 1) - forensics  (0) 2026.03.29
[Dreamhack] Hidden (Level 1) forensics  (0) 2026.03.22
[Dreamhack] Hefty Image (Level 1) forensics  (0) 2026.03.22
'디지털 포렌식/워게임 풀이' 카테고리의 다른 글
  • [Dreamhack] 64se64 - misc
  • [flaws.cloud] Level 1 write up
  • [Dreamhack] Gyul Box (Level 1) - forensics
  • [Dreamhack] Hidden (Level 1) forensics
maysokuli
maysokuli
성실히 열심히 꾸준히 / 디지털 포렌식 공부 중
  • maysokuli
    정보보호 소쿠리
    maysokuli
  • 공지사항

    • 분류 전체보기
      • 디지털 포렌식
        • 기술 스터디
        • 인프런 [기초부터 따라하는 디지털포렌식]
        • 드림핵 [Digital Forensics Basi..
        • 디스크포렌식(이별)
        • 심화팀 - 클라우드
        • 워게임 풀이
        • 기타 추가 공부
      • 개인정보보호
        • 기술 스터디
        • 개인정보보호 강의 수강
        • 동향 스터디
        • 기타 추가 공부
  • 최근 글

  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.6
maysokuli
[Dreamhack] My Nervous PPT (Level 1) misc, forensics
상단으로

티스토리툴바