CTFlearn의 예순 세번째 문제
PNG 파일을 이용한 포렌식 문제인데
난이도가 올라갈수록 PIL 라이브러리를 사용하는 문제 유형이 많이 나오는것 같다.
문제에서 주어지는 것은 Exclusive_Santa.rar 압축파일이다.
압축을 풀면 이렇게 1.png, 3.png 파일 두개가 들어있다.
2.png 가 없는것을 보니 어딘가에 숨겨져 있는것 같다.
1.png 파일은 이렇게 생겼다.
WINTER IS COMING 이라는 글자가 보이고
사진이 뭔가 깨진것 처럼 엄청 복잡한 느낌이다.
3.png 는 이렇게 생겼는데
이건 구글에 XOR 이라고 검색하면 바로 나오는 사진이다.
XOR 을 두 개의 집합을 사용해 가시적으로 표현한 다이어그램이다.
1.png 가 정상적인 사진과 달리 복잡하게 생긴이유가
어떤 사진이랑 XOR 했기 때문이라고 추측했다.
3.png 파일을 HxD 도구를 이용해 열어본다.
파일이 89 50 4E 47 으로 시작하는것을 알 수 있다.
89 50 4E 47로 시작하는것은 PNG 파일의 특징이다.
이런걸 파일 시그니처 라고 한다.
이번엔 HxD에서 스크롤을 내려 파일의 중간쯤으로 이동해 봤다.
PNG 파일은 끝날때 49 45 4E 44 AE 42 60 82 로 끝난다.
IEND®B`‚ 이렇게 생긴 문자열이 나오면 PNG 파일은 끝난것이다.
그런데 이상한게 위의 문자열이 나왔음에도
뒤에 89 50 4E 47 이 한번 더 나오고 있는것이 보인다.
이건 PNG 파일 두 개가 겹쳐있는 것이다.
두번째 89 50 4E 47 부터 끝까지 복사한 다음
새로만들기 해서 붙혀넣고 저장하면
위와 같은 그림파일을 찾을 수 있다.
이게 XOR 되기 전의 원본인듯 하다.
XOR 은 역으로 연산하면 원래 값이 돌아오므로
1.png와 복원한 사진파일을 XOR 하면
원래 복원한 사진파일과 XOR 된 파일을 찾을 수 있을 것이다.
Python PIL 라이브러리를 이용해서 풀었다.
PIL은 Python Imaging Library의 약자로
파이썬으로 이미지 처리를 할 수 있도록 해주는 라이브러리이다.
pip install image
pip install pillow
두 명령어를 이용해서 다운로드 받아주면 된다.
from PIL import Image
img1 = Image.open('1.png').convert('RGB')
img2 = Image.open('2.png').convert('RGB')
xlen = 1280
ylen = 720
new = Image.new('RGB',(xlen,ylen),(0,0,0))
for y in range(ylen):
for x in range(xlen):
r1,g1,b1 = img1.getpixel((x,y))
r2,g2,b2 = img2.getpixel((x,y))
new.putpixel((x,y),(int(r1^r2),int(g1^g2),int(b1^b2)))
new.save('new.png')
두개의 이미지를 불러와서
맨 앞에 있는 픽셀부터 서로 XOR 한뒤
new 라는 새로운 이미지에 그 결과값을 집어넣어주는 코드이다.
코드를 실행시키면
좌우반전된 이미지를 얻을 수 있는데,
거기에 플래그가 적혀있다.
'워게임 > CTFlearn' 카테고리의 다른 글
[CTFlearn] ALEXCTF CR2: Many time secrets - 암호학 / XOR (86) | 2023.02.06 |
---|---|
[CTFlearn] Help Bity - MISC / XOR (56) | 2023.02.03 |
[CTFlearn] abandoned place - 포렌식 / HxD (62) | 2023.01.27 |
[CTFlearn] The adventures of Boris Ivanov. Part 1. - 포렌식 / Stereogram (68) | 2023.01.25 |
[CTFlearn] Symbolic Decimals - 암호학 / Python (70) | 2023.01.23 |