2023-11-26
[Incognito CTF 2023] Guess who!! 풀이
2023년 11월 24~25일에 열린 Incognito CTF 2023 의 Forensic 카테고리 문제 Guess who!! 풀이다. 파일 하나를 주고 제작자·시각·원래 이름·엔트로피를 모두 알아내야 하는, 전형적인 PE 파일 메타데이터 분석 문제였다.
문제
- flag1 : 파일을 제작한 것으로 추정되는 사람의 이름
- flag2 : 파일 최초 디버깅 시각(
YYYY:MM:DD:HH:MM:SS, UTC +9 기준)- flag3 : 예상되는 파일의 변경 전 이름
- flag4 :
.textsection의 entropy(소수점 둘째 자리까지)flag :
INCO{flag1_flag2_flag3_flag4}
flag1 — 제작자 이름
주어진 파일을 그냥 열어보니 정상적으로 열리지 않았다. 그래서 DIE(Detect It Easy) 에
넣어보니, 파일 안에 FIND_ME.zip 이라는 수상한 항목이 보였다.
문제 파일 내부에 FIND_ME.zip 이 들어 있다.
문제 파일은 Hi.pptx 였는데, OOXML 문서는 사실상 ZIP 컨테이너다. 그래서 확장자를
Hi.zip 으로 바꿔 압축을 풀고 FIND_ME.zip 을 꺼냈다. 그 안에는 실행 파일이 하나
들어 있었고, 이것을 다시 DIE로 열었다.
제작자에 대한 흔적이 남아 있는지 확인하기 위해 문자열을 훑으면서 user 로 필터링해
보았다.
C:\Users\Phato\source\repos\CRIME_NOTICE\x64\Release\CRIME_NOTICE.pdb
컴파일할 때 그대로 박혀버린 PDB 경로 가 남아 있었다. 여기서 두 가지를 동시에 얻는다.
- 사용자 이름이
Phato→ 파일 제작자로 추정된다. - 프로젝트/산출물 이름이
CRIME_NOTICE→ 파일의 원래 이름일 가능성이 크다(flag3의 힌트).
flag2 — 최초 디버깅 시각
최초 디버깅 시각은 PE의 Debug Directory 에 들어 있는 TimeDateStamp 로 확인할 수
있다. CFF Explorer 로 디버그 디렉터리를 열어보았다.
Debug Directory의 TimeDateStamp 필드.
이 값은 Unix epoch 기준 초 단위 타임스탬프라 사람이 읽을 수 있는 시각으로 변환해야 한다. 문제에서 KST(UTC +9)를 요구했으므로 그에 맞춰 변환했다.
변환 결과 — 2023년 11월 6일 13시 56분 31초.
즉 최초 디버깅 시각은 2023:11:06:13:56:31 이다.
flag3 — 변경 전 파일 이름
flag1에서 찾은 PDB 경로가 그대로 답이 된다. 빌드 산출물 경로가
...\repos\CRIME_NOTICE\x64\Release\CRIME_NOTICE.pdb 이므로, 이름이 바뀌기 전
파일은 CRIME_NOTICE 였다.
flag4 — .text 섹션 엔트로피
엔트로피는 DIE의 엔트로피 뷰에서 섹션별로 바로 확인할 수 있다.
.text 섹션의 엔트로피는 5.83.
소수점 둘째 자리까지 요구했으므로 5.83.
flag
INCO{Phato_2023:11:06:13:56:31_CRIME_NOTICE_5.83}
정리
네 개의 플래그 조각이 전부 파일 자체가 흘린 메타데이터 에서 나왔다는 점이 이 문제의 핵심이다.
- pptx 같은 OOXML 문서는 ZIP이므로, 확장자만 바꿔도 내부 구조를 그대로 들여다볼 수 있다.
- Release 빌드에 남은 PDB 경로 는 개발자 계정명과 원래 프로젝트 이름을 동시에 노출한다.
- PE의 Debug Directory
TimeDateStamp는 빌드/디버그 시점을 알려준다. - 섹션 엔트로피 는 패킹 여부 판단에도 쓰이지만, 이 문제처럼 값 자체가 답이 되기도 한다.