보안을 그리다, 훈이

[Forensics] HackCTF 잔상(250p) Write Up 본문

Security/Wargame

[Forensics] HackCTF 잔상(250p) Write Up

HooNeee 2021. 12. 24. 10:22

 

HackCTF Forensics 분야 잔상(250p) 문제 풀이입니다.

 

[HackCTF] Challenge 잔상

 

먼저, 'compare.zip' 파일을 다운로드하고 압축을 해제합니다.

 

afterimage_1.jpeg(left) / afterimage_2.jpeg(right)

 

위와 같이 대성마이맥 수학 영역 대표강사 한석원님이 우아한 자태를 뽐내는 사진이 두 장이 나오네요.

 

왼쪽 사진은 'afterimage_1.jpeg', 오른쪽 사진은 'afterimage_2.jpeg'입니다.

 

사진상으로 보면 아무런 차이가 없어 보이고 binwalk를 돌려도 나오는게 없네요.

 

일단, 파일 이름이 'afterimage'인 것을 보아 jpeg 푸터 시그니처인 'FF D9' 뒤에 어떠한 단서들이 숨겨져 있을 것 같네요.

 

Hex Viewer로 까봅시다.

 

Hex - afterimage_1.jpeg(left) / Hex - afterimage_2.jpeg(right)

 

각각의 무수히 많은 값들을 일일이 비교하기에는 무리가 있어보여 jpeg 푸터 시그니처 이후의 hex 값을 각각 rtf 파일로 저장하고 python으로 코드를 구현했습니다.

 

a1 = list(map(''.join, zip(
    *[iter(open('/HackCTF/Forensics/잔상/after_1.rtf', 'r').read().replace(' ', ''))]*2)))
a2 = list(map(''.join, zip(
    *[iter(open('/HackCTF/Forensics/잔상/after_2.rtf', 'r').read().replace(' ', ''))]*2)))
res = ''
for i in range(len(a2)):
    if a1[i] != a2[i]:
        res += a2[i]
print(bytearray.fromhex(res).decode())

 

두 값을 비교하여 다른 값이 나오면 ASCII 형태로 변환하여 한 번에 출력하도록 구현했습니다.

 

실행 결과.

 

Get the Flag!

 

Flag가 깔끔하게 출력되었네요.

 

Solve!

 

Comments