본문 바로가기
[DigitalForensic] with CTF

[DigitalForensic] with CTF - Find Key(Image)

by skyepodium 2022. 8. 15.

1. 개요

2진수 문제, pillow 문제

 

2. 분석

1) 2진수

사진에서 저 패턴이 똑같이 반복되고 이진수로 표현할 수 있다고 합니다.

(개인적으로 사진도 작은데 힌트 아니면, 알기 어려운것 같습니다.)

 

2) 이미지 추출

이부분만 pixel를 선택하고 클립보드에서 신규를 클릭합니다.

PNG 파일이고 배경이 투명합니다. message.png로 저장했습니다. 

 

3) python

검은색 - 1, 흰색 0 이고, 2진수로 만든다음, MD5 해시 까지 생성했습니다.

from PIL import Image
import hashlib

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

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

#
# 4. 반복문 조회하면서 한줄씩 이진법 문자열로 만듬
binary_str_list = []
binary_str = ""
for y in range(1, height, 4):
    for x in range(1, width, 4):
        if data[x, y] == (0, 0, 0, 0):
            binary_str += "0"
        else:
            binary_str += "1"

    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) #S4NCH0

# 6. 문자열을 md5 해시로 변경
md5_hash = hashlib.md5()
md5_hash.update(result.encode('utf-8'))

flag = md5_hash.hexdigest()

print('flag', flag) #975186cff0a2bfd07862175d40fa36ff

 

4) 확인