티스토리 뷰

CTF/Dreamhack

Dreamhack - Enc-JPG

Noctis41 2025. 2. 15. 04:02

해당 문제는 Dreamhack의 Enc-JPG 문제에 대한 풀이입니다.


문제에서 주어진 ZIP 파일을 열어보니 Enc와 flag.jpg 파일이 존재했다. 해당 파일들을 각각 010 editor를 통해 열어보았다.

처음 받은 enc 파일을 확인해보니, 파일의 시그니처가 4D 5A 90로 시작하는 것을 확인했습니다. 이는 .exe의 파일 시그니처로, 해당 파일이 실행 파일임을 나타냅니다.

 

따라서 .enc 확장자를 .exe로 변경한 후 실행해 보았습니다.

실행을 시켜보니 flag.jpg라는 파일이 생성되었으며, 일부 데이터가 복구된 것을 확인할 수 있었습니다. 그러나 파일이 정상적으로 열리지 않았습니다. 이를 해결하기 위해 바이너리 에디터인 010 Editor를 사용하여 내부 구조를 분석하기로 했습니다.

JPEG 파일의 올바른 파일 시그니처는 다음과 같습니다:

  • 헤더 시그니처: FF D8 FF E0
  • 푸터 시그니처: FF D9

010 Editor를 통해 파일을 분석해보니, 헤더 시그니처는 정상적으로 존재했으나 푸터 시그니처(FF D9)가 2개 존재하는 것을 확인했습니다.

일반적으로 파일 복구 과정에서 첫 번째 푸터 시그니처를 인식하고 이후 데이터는 손실되기 때문에, 정상적인 파일 출력을 위해서는 첫 번째 FF D9를 제거할 필요가 있었습니다.

이를 제거한 후 다시 확인해 보니, flag.jpg의 일부가 더 복구되었습니다.

그러나 추가 분석을 진행해보니 푸터 시그니처 이후에도 데이터가 존재하고 있었습니다. ENc_ECrypt라는 문자열이 포함된 부분을 발견하였으며, 이는 Flag의 일부일 가능성이 높다고 판단되었습니다.

현재까지 복구된 Flag는:

DH{How _ENc_ECrypt

 

 

파일 내부를 더 분석해보니, flag.jpg 파일 내부에서 PNG 파일의 시그니처(89 50 4E 47 0D 0A 1A 0A)가 포함된 부분을 발견했습니다.

따라서 JPG 데이터 이후의 PNG 부분을 분리하여 flag.png로 저장하고 확인해 보았습니다. 그러나 파일 안에는 아무런 내용이 적혀 있지 않았습니다.

PNG 파일의 주요 데이터는 IDAT 청크 안에 저장됩니다. 010 Editor에서 IDAT 청크를 분석해 보니, IDAT 이전의 크기 필드(4바이트)가 5F 79 6F 7D로 설정되어 있었습니다. 이 값이 너무 큰 것으로 보아, 데이터가 추가되었을 가능성이 높았습니다.

이를 기반으로 _yo}라는 문자열이 추가되었음을 추측할 수 있었고, 이를 Flag의 마지막 부분으로 활용할 수 있었습니다.

 

flag : DH{How _ENc_ECrypt_yo}

'CTF > Dreamhack' 카테고리의 다른 글

Dreamhack - video_in_video  (0) 2025.03.12
Dreamhack - palm  (0) 2025.03.05
Dreamhack - Basic_Forensics_1  (0) 2025.01.24
Dreamhack - FFFFAAAATTT  (0) 2025.01.24