워게임/CTFlearn

[CTFlearn] F1L3 M1X3R - MISC / Python / HxD

SecurityMan 2023. 8. 7. 11:00

 

CTFlearn에서 제공하는

 

Hard 난이도의 MISC 문제

 

MISC는 miscellaneous의 약자로 여러가지 잡다한 이라는 의미를 가지고 있다.

 

반응형

 

문제 설명을 보면

 

어떤 사진이 MIXER 에 의해 뒤죽박죽이 되어서

 

잘 동작하지 않는다고 한다.

 

이 사진을 다시 복구해달라는게 문제의 요구사항이다.

 

 

문제에서 주어지는 파일은

 

fl4g.jpeg 파일이다.

 

 

해당 파일을 열어볼려고 하면

 

파일이 깨진듯 오류가 나면서 열 수가 없다.

 

 

해당 파일을 HxD로 열어보면

 

바로 뭔가 이상한걸 알아챌 수 있다.

 

 

JPG 파일은 무조건 시작할때

 

FF D8 ~ 로 시작을 한다.

 

이런걸 파일 시그니처 라고 하는데

 

문제에서 같이 주어진 위키피디아 힌트 페이지에서도 확인할 수 있다.

 

자세히 보면

 

원래는

 

FF D8 FF E0 00 10 4A 46 49 46 00 01 이어야 하는 부분이

 

E0 FF D8 FF 46 4A 10 00 01 00 46 49 라고 써있는데

 

4바이트씩 끊어서

 

역순으로 적혀있는게 보인다.

 

파일 전반적으로 다 똑같이 적용되어있을거라고 보고

 

간단한 파이썬 코드를 통해 이를 복구시켜주면 된다.

 

def read_jpg_file_as_hex(filename):
    with open(filename, 'rb') as f:
        data = f.read()
    hex_data = data.hex()
    return hex_data

def reverse_bytes(hex_data):
    reversed_data = ""
    for i in range(0, len(hex_data), 8):
        bytes_str = hex_data[i:i + 8]
        reversed_bytes_str = bytes_str[6:8] + bytes_str[4:6] + bytes_str[2:4] + bytes_str[0:2]
        reversed_data += reversed_bytes_str + " "
    return reversed_data.strip()

filename = 'fl4g.jpeg'
hex_data = read_jpg_file_as_hex(filename)
reversed_data = reverse_bytes(hex_data)
print(reversed_data)

 

이렇게 JPG 파일을 HEX 값 형태로 읽어들여

 

4바이트씩 쪼갠 뒤

 

다시 역으로 붙혀주면 된다.

 

 

코드를 실행시켜 주면

 

아까 시그니처에서 봤던것 처럼

 

맨 앞이

 

FF D8 FF E000 10 4A 4649 46 00 01 로 시작하는것을 확인할 수 있다.

 

 

해당 HEX 값을 이미지로 저장해주면

 

플래그를 확인할 수 있다.

반응형