-
4팀_박윤진 write-ups (ctf-d_브리타니아의 원더랜드...)2021/Write-Ups 2021. 11. 16. 23:58
color.png 파일을 다운받으면 아래와 같이 확인할 수 있다.
기본적인 파일 정보를 확인해보면, 7x200픽셀에, 크기도 특별하게 크지 않고,
HxD로 열어본 결과 특별하게 다른 파일 시그니처를 확인할 수 없었으므로 스테가노 그래피도 아니다.
Photoshop으로 열어보면 딱 1픽셀 단위로, 두 가지 색으로만 찍혀있는 것을 확인할 수 있으며,
(R: ff0000, 255 0 0 / B: ffffff, 255 255 255)
이러한 특성으로 미루어보아 이진수, 이진 코드(binary code)를 생각할 수 있다.
(즉, 어떤 데이터를 binary code로 변환한 뒤 0을 검은색, 1을 빨간색...이런 식으로 변환하였다 생각 가능)
굳이 색이 아니더라도 어떤 특성이 명확하게 두 가지로 나뉘어진다면, 이진수를 생각해보는 것이 좋다.
이 때 원본이라 말할 수 있는 "어떤 데이터"는 바로 flag 텍스트가 될 수도,
또 다른 파일 데이터가 될 수도 있다.
1) 텍스트 데이터일 경우(마지막에 chr로 변환)
from PIL import Image pic = Image.open("../pythonProject/color.png") data = pic.load() width, height = pic.size red = (255, 0, 0) black = (255, 255, 255) binary_lines = [] text = "" for y in range(height): # height = 7이므로, 7마다 하나의 line이 된다. binary_line = [] for x in range(width): pixel = data[x, y] if pixel == red: binary_line.append('1') else: binary_line.append('0') print(binary_line) # 결과적으로 [0,1,0,1,0,0,0] 이런 식으로 하나의 line이 완성된다. binary_lines.append(binary_line) # line을 하나씩 저장한다. for i in binary_lines: # 아까 저장한 line을 하나씩 꺼내서 # join(리스트): 리스트에 있는 인자를 하나의 문자열로 합쳐준다 ## [0,1,0,1,0,0,0] → 0101000 # int(값, 진수): '값'은 '진수'임을 명시, 이것을 십진수로 변환해준다. ## 0101000 → 40 # chr(정수): ASCII코드표에 의해 정수를 문자로 변환한다 text += ''.join([chr(int(''.join(i),2))]) print(text)
2) 파일 데이터일 경우(마지막에 hex로 변환)
*현재 가로가 7픽셀이라 HEX가 00~FF이 아니라 00~7F까지밖에 표현이 되지 않기 때문에,
2)보다는 1)이 유력함을 유추할 수 있다*
text += ''.join([hex(int(''.join(i),2))])
결과로 나온 text를 메모장에서 0x를 없애면,
3378584b6b4673745455707347324946446972453678447263414638445378346957786435663949513954323035697a4e386c53324d51556c7346313167543454465848486c4c48564870724e54747268366c555266645557374c70757a677531564b7a7762316267316f7136416533476e796b6b4c5a5a736e7a653348564c78486c664359747a79726356324f7870304762305a32454c706852344f786f37547976484375574b576c4e3874384b49664879735a4b376a424e5075367752564555504977567261
이 나오고, 정상적인 파일 형태는 아님을 알 수 있다.
+ 또한 빨강과 검정, 둘 중 어느 것이 0이고 1인지 모르니 두 경우 모두 시도해봐야 한다
A) black 1 / red 0
B) red 1 / black 0
사실 1) 도 크게 플래그같지는 않지만, 일단 정상적인 문자열로 나왔으니 flag로 제출해본다.
'2021 > Write-Ups' 카테고리의 다른 글
4팀_박윤진 write-ups (ctf-d_호레이쇼가 플래그를 보며...) (0) 2021.11.16 3팀_김소희_Write-Ups (HackCTF-Secret Document/Magic PNG) (0) 2021.11.16 1팀_남채림 Write_Ups(Suninatas_15,Suninatas_19) (0) 2021.11.16 4팀_김세연 write-ups (suninatas_Forensic 30) (0) 2021.11.16 2팀_장지은_Write_Ups (HackCTF_Welcome_Forensics) (0) 2021.11.16