CTF/포렌식

[b0lers CTF] Matryoshka(2/2) - 포렌식 / PIL / HxD

SecurityMan 2022. 12. 3. 11:00

 

https://hackingstudypad.tistory.com/341

 

지난 포스팅에 이어서 계속 쓰는 Matryoshka 문제

 

반응형

 

 

지난번 마지막으로 생성했던 qr.gz 파일 내에서

 

압축되어 있는 qr 이라는 이름의 파일을 발견했었다.

 

 

열어보니 숫자 1과 알파벳 엘(l) 로 이루어진 85x85 크기의 텍스트 파일인데

 

두 문자가 마구 섞여서 뭔지 알아보기가 힘들다.

 

하지만 파일의 이름이 qr 이니

 

이전 png 파일처럼 하나는 흰색, 하나는 검은색을 의미하는 것일거라고 생각했다.

 

 

Sublime에서 l 을 □ 로, 1을 ■ 로 한번 바꿔봤더니

 

뭔가 QR코드 같이 생긴 그림이 보였다.

 

다음으로 이걸 진짜 그림으로 바꿔주는 작업을 했다.

 

from PIL import Image

qr = open('qr', 'r')

new = Image.new('RGB', (340,340), (0,0,0))

for i in range(85):
	data = qr.readline()
	for j in range(len(data)):
		if data[j] == 'l':
			for l in range((i*4),(i*4)+4):
				for k in range((j*4),(j*4)+4):
					new.putpixel((k,l),(255,255,255))
			
new.save('output2.png')

 

이렇게 코드를 작성했다.

 

qr 파일을 각 줄별로 읽어들이고, 각 줄에서 맨 앞에 문자열부터 차례대로 읽는다.

 

만약 읽은 문자가 l 이면, 그 위치의 4x4 영역을 흰색으로 칠했다.

 

왜 하필 4x4 로 했냐면,

 

qr 파일이 85x85 인데 이게 이미지로 만들면 너무 작을것 같아서 4배 큰 사이즈인 340x340으로

 

결과 파일을 만들려고 했기 때문이다.

 

 

코드를 실행시키면 예상했던 것처럼 QR코드가 하나 생성된다.

 

 

다시한번 온라인 바코드 리더를 이용해 QR코드를 읽어봤다.

(https://online-barcode-reader.inliteresearch.com/)

 

이번에는 PNG 파일이 결과로 나오는것을 볼 수 있다.

 

 

이번에도 hex 값을 복사해서 HxD에 붙혀넣은 뒤 .png 파일을 하나 생성한다.

 

 

생성된 png 파일을 보면 이렇게 생겼다.

 

QR코드처럼 보이긴 한데.. 뭔가 어색하다.

 

이건 흰색/검은색이 반전되어 있어서 그렇다.

 

from PIL import Image

img1 = Image.open('qr.png').convert('RGB')

xlen = 57
ylen = 57

new = Image.new('RGB', (xlen,ylen), (0,0,0))

for y in range(ylen):
	for x in range(xlen):
		r,g,b = img1.getpixel((x,y))
		if r == 0:
			new.putpixel((x,y),(255,255,255))

new.save('output3.png')

 

색상반전은 위 코드로 시켜줄 수 있다.

 

파일을 한 픽셀씩 읽어들이고, 

 

온통 검은색인 이미지를 하나 생성한 뒤,

 

읽은 픽셀이 검은색이면 해당 위치를 하얀색으로 표시해주는 것이다.

 

 

코드를 실행시키면 이렇게 반전된 QR코드가 나오게 된다.

 

 

다시한번 온라인 리더에 넣어 읽어주면..

 

이번엔 7z 로 시작하는걸 보니 .7z 파일인것 같다.

 

 

아까 햇던것과 같이 HxD에 hex값을 복붙해서 flag.7z 파일을 생성하고

 

압축해제 프로그램으로 열어보면 안에 flag 라는 이름의 파일이 있는것을 확인할 수 있다.

 

 

그런데 암호가 걸려있어서 바로 풀지 못한다...하

 

 

짜증나서 그냥 1234 쳤는데 압축이 풀려버렸다;;

 

 

압축 풀린 flag 파일 안에 플래그가 적혀있었다.

 

정말.. 마트료시카처럼 끝도없는 문제였다.

반응형