본문 바로가기
[DigitalForensic] with CTF

[DigitalForensic] with CTF - 브리타니아의 원더랜드…

by skyepodium 2022. 8. 14.

1. 개요

pillow 문제

 

2. 분석

1) 이미지

세로 200, 가로 7이고, 빨간색으로 색칠된 사진을 받습니다.

 

2) 아스키코드

아스키코드 범위는 0 ~ 2^7(127) 까지입니다.

 

빨간색을 1, 검은색을 0으로 생각하면 한줄을 이진수로 변경할 수 있습니다. 따라서 총 200개의 이진수가 있습니다.

 

정리하면 한줄을 이진수로 변경하고

이진수를 아스키코드로 변경하고

200줄을 이어 붙이면 플래그가 됩니다.

 

 

3) pillow

pillow는 파이썬 기반의 이미지 처리 도구입니다. 

반복문 사용해서 한번에 플래그를 뽑아냅시다.

from PIL import Image

# 1. 이미지 불러오기
# 1) 이미지 열기
image = Image.open("color.png")
# 2) 픽셀 데이터 로드
data = image.load()
# 3) 이미지 닫기
image.close()

# 2. 이미지 정보
width, height = image.size
print('width', width, 'height', height) # width 7 height 200

# 3. 빨간색의 RGB 정보, 튜플로 보관
RED = (255, 0, 0)

# 4. 반복문 조회하면서 200줄을 하나씩 이진법 문자열로 만듬
binary_str_list = []
for y in range(height):
    binary_str = ""

    for x in range(width):
        # 2차원 배열의 x,y와 순서가 다릅니다.
        pixel = data[x, y]
        if pixel == RED:
            binary_str += "1"
        else:
            binary_str += "0"

    binary_str_list.append(binary_str)

# 5. 이진수를 십진수로 변경하고 아스키 문자로 변경
result = "".join([chr(int(binary_str, 2)) for binary_str in binary_str_list])

print('result', result)

 

4) 확인