사진을 다운로드 받으면 별로 차이나지않는 두개의 사진이 보인다.
아마도 LSB방식을 통한 steganography가 사용된거 같다. 우선 bit 차이가 있는 곳을 알아보기 위해서 다음의 코드를 사용했다.
from PIL import Image
if __name__=="__main__" :
B = (0,0,0)
W = (255,255,255)
im1 = Image.open("original.png")
im2 = Image.open("encrypted.png")
im3 = Image.new(im1.mode,im1.size)
width,height = im1.size
for x in range(width) :
for y in range(height) :
if(im1.getpixel((x,y))==im2.getpixel((x,y))) :
im3.putpixel((x,y),W)
else:
im3.putpixel((x,y),B)
im3.save("asdf.png")
다음의 사진을 얻을 수 있었다.
검사를 해보니 차이가 나는 저 좌측 상단은 49*7이다. height가 7인것을 보아하니 HSB를 0으로 바이트 처리하기 너무너무 좋은 거 같다.
from PIL import Image
if __name__=="__main__" :
new_x = 49
new_y =7
B = (0,0,0)
W = (255,255,255)
NB = (0,0,0,255)
NW = (255,255,255,255)
im1 = Image.open("original.png")
im2 = Image.open("encrypted.png")
im3 = Image.new(im1.mode,(new_x,new_y))
width,height = im1.size
for x in range(new_x) :
for y in range(new_y) :
if(im1.getpixel((x,y))==im2.getpixel((x,y))) :
im3.putpixel((x,y),W)
else:
im3.putpixel((x,y),B)
im1.close()
im2.close()
ans = ""
for x in range(new_x) :
byte = ""
for y in range(new_y) :
if(im3.getpixel((x,y))==NB) :
byte+="1"
elif(im3.getpixel((x,y))==NW):
byte+="0"
ans+=chr(int(byte,2))
print(ans)
아까 쓴 코드에 이어서 쓴다고 조금은 더러운데, 결론은 검정색을 1로, 하얀색을 0으로 읽고 byte열로 처리해본거다. 다음과 같은 문자열을 얻을 수 있다.
다음 문자열을 SHA256처리하라고 한다.
?? 아 대문자다
'WarGame > DigitalForensic with CTF' 카테고리의 다른 글
[DigitalForensic] with CTF broken… (0) | 2022.10.08 |
---|---|
[DigitalForensic] with CTF Find Key(Image)… (0) | 2022.10.08 |
[DigitalForensic] with CTF Find Key(Hash)… (0) | 2022.10.08 |
[DigitalForensic] with CTF Listen carefully!!… (0) | 2022.10.08 |
[DigitalForensic] with CTF 답을 찾기 위해 돋보기를 써라!… (0) | 2022.10.08 |