[DreamHack] half image 풀이

코딩 파인애플·2026년 8월 18일

CHALLENGE SOLVING

목록 보기
8/10
post-thumbnail

안녕하십니까 코딩 파인애플입니다
이번에는 half image에 관해 풀어보겠습니다.

half image

https://dreamhack.io/wargame/challenges/2145

from PIL import Image
img = Image.open("testfile.png").convert("RGB") 
width, height = img.size
hw = width // 2
left = img.crop((0, 0, hw, height))
right = img.crop((hw, 0, width, height))
left.save("left.png")
rdata = right.tobytes()
with open("left.png", "rb") as fl: lp = fl.read()
with open("flag.png", "wb") as f_out:
    f_out.write(lp)
    f_out.write(rdata)




문제를 받아보면 이렇게 다음과 같은 코드와 이미지가 첨부되어 있습니다
일단 이미지부터 분석해보도록 하겠습니다 (짤은 별도)


Hxd로 분석하다보면 어째서인지 png파일의 푸터 시그니처 49 45 4E 44 AE 42 60 82 뒤에도 뭐가 더 이어진 것을 볼 수 있습니다

따로 데이터를 추출하고 더 분석해보도록 하겠습니다

from PIL import Image
img = Image.open("testfile.png").convert("RGB") 
width, height = img.size
hw = width // 2
left = img.crop((0, 0, hw, height))
right = img.crop((hw, 0, width, height))
left.save("left.png")
rdata = right.tobytes()
with open("left.png", "rb") as fl: lp = fl.read()
with open("flag.png", "wb") as f_out:
    f_out.write(lp)
    f_out.write(rdata)

주어진 코드를 분석해보면 PNG 이미지를 좌우로 반으로 자른 뒤, "왼쪽 절반 PNG" 파일 뒤 "오른쪽 절반의 raw 픽셀 데이터"를 이어 붙이는 코드입니다

즉, PNG파일 뒤 여분의 데이터를 숨기는 코드라고 보시면 될 것 같습니다

그럼 이제 반대로 복호화 코드를 통해 복원해봅시다

from PIL import Image

with open("right.raw", "rb") as f:
    rdata = f.read()

right_width = 708 # 잘린 왼쪽 이미지의 너비
right_height = 672 # 잘린 오른쪽 이미지의 폭

right_img = Image.frombytes("RGB", (right_width, right_height), rdata)
right_img.save("recovered_right.png")

이렇게 다음과 같이 플래그를 획득할 수 있습니다

이 외에도 코드를 짜지 않고 간단하게 이미지를 복원하는 방법도 있습니다

웹사이트에 가셔서 왼쪽 이미지를 넣은 뒤 간단하게 너비와 폭만 입력하면 오른쪽 이미지가 복원이 되어 플래그를 획득하는 방법도 존재합니다 (단, 확장자를 .rgb로 저장해야함)

flag : DH{H0w_T0_Get_F1ags?!}
평가 :








+ 추신 : 당분간은 스테가노그래피 등의 게시물 말고 웹, 리버싱, 암호학과 관련된 게시물만 올라올 것 같습니다

profile
안녕하떼요취미로콤푸타배우는고든학교6학년유치원생이빈다주말재외하고(러블럭스해야대요💢💢)주중연재하고안한날애눈이월(February)됨니다(안할수도있음)

0개의 댓글