본문 바로가기
[DigitalForensic] with CTF

[DigitalForensic] with CTF - Emma Watson

by skyepodium 2022. 8. 14.

1. 개요

stegsolve + pillow 문제

 

2. 분석

1) 이진수 문자열

stegsolve로 보다보면, 이미지 상단에 검은색, 흰색이 픽셀단위로 번갈아 나타납니다.

2) pillow

pillow로 바이너리 문자열 추출해서, 2진수로 만들고, 아스키 문자열로 붙여봅시다.

from PIL import Image

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

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

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

# 4. 반복문 조회하면서 200줄을 하나씩 이진법 문자열로 만듬
binary_str_list = []
binary_str = ""
for x in range(width):
    # 2차원 배열의 x,y와 순서가 다릅니다.
    pixel = data[x, 0]
    if pixel == WHITE:
        binary_str += "0"
    else:
        binary_str += "1"

    # 길이 8씩 잘라서, 이진수 리스트에 담습니다.
    if len(binary_str) >= 8:
        binary_str_list.append(binary_str)
        binary_str = ""

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

print('result', result)
# The_beauty_of_paradise_isThe_beauty_of_paradise_isThe_beauty_of_paradise_is

플래그는 다음과 같습니다.

The_beauty_of_paradise_is