CTFlearn - [Programming] An Old Image
An Old Image
Link : An Old Image
old image.png :
이미지를 테이블로 저장하였고 이 테이블로 이미지를 새로 만들었는데 컬럼들이 서로 섞임.
컬럼에는
x, y red, green
총 4개의 컬럼이 있음.
Solution
PIL : ind2x.github.io/posts/ctf_pymodule/#pillow
PIL을 이용해본건 처음이었는데 PIL 라이브러리를 이용해서 풀 수 있음.
문제에서 컬럼들이 섞였다 했으므로 섞였을 때의 모든 경우의 수들로 이미지를 만들어서 확인해보았음.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from PIL import Image as ig
import numpy as np
img1 = ig.open('old_image.png')
img = img1.copy()
np_img = np.array(img) # np_img[0][0:256] ~ np_img[255][0:256] -> [r,g,b], 65536개
pixel=img.load() # pixel[x,y] = (r,g,b)
for x in range(0,256) :
for y in range(0,256) :
pixel[np_img[x][y][1], np_img[x][y][0]] = (x,y,0) # 컬럼의 순서 변경
img.save('a.png')
컬럼의 순서들의 경우의 수들을 코드로 정리하면 아래와 같음.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[x,y] = (r, g) -> 현재 값
[x,y] = (g, r) -> pixel[x,y] = (np_img[x][y][1],np_img[x][y][0],0)
[y, x] = (r, g) -> pixel[y,x] = (np_img[x][y][0],np_img[x][y][1],0)
[y, x] = (g, r) -> pixel[y,x] = (np_img[x][y][1],np_img[x][y][0],0)
[x, r] = (y, g) or (g,y) -> pixel[x,np_img[x][y][0]] = (y,np_img[x][y][1],0) or (np_img[x][y][1],y,0)
[r, x] = (y, g) or (g, y) -> pixel[np_img[x][y][0],x] = (y,np_img[x][y][1],0) or (np_img[x][y][1],y,0)
[x, g] = (y, r) or (r, y) -> pixel[x,np_img[x][y][1]] = (y,np_img[x][y][0],0) or (np_img[x][y][0],y,0)
[g, x] = (y, r) or (r, y) -> pixel[np_img[x][y][1],x] = (y,np_img[x][y][0],0) or (np_img[x][y][0],y,0)
[y,r] = (x,g) or (g, x) -> pixel[y,np_img[x][y][0]] = (x,np_img[x][y][1],0) or (np_img[x][y][1],x,0)
[r, y] = (x,g) or (g, x) -> pixel[np_img[x][y][0],y] = (x,np_img[x][y][1],0) or (np_img[x][y][1],x,0)
[y,g] = (x,r) or (r,x) -> pixel[y,np_img[x][y][1]] = (x,np_img[x][y][0],0) or (np_img[x][y][0],x,0)
[g,y] = (x,r) or (r,x) -> pixel[np_img[x][y][1],y] = (x,np_img[x][y][0],0) or (np_img[x][y][0],x,0)
[r, g] = (x, y) or (y, x) -> pixel[np_img[x][y][0], np_img[x][y][1]] = (x,y,0) or (y,x,0)
[g, r] = (x, y) or (y, x) -> pixel[np_img[x][y][1], np_img[x][y][0]] = (x,y,0) or (y,x,0)
따라서 위에서부터 코드를 바꿔주면서 이미지를 확인하다보면 마지막 [r,g] = (x,y) or (y,x)
과 [g, r] = (x, y) or (y, x)
부분에서 QR Code가 보이게 됨.
이 QR Code를 online decoder를 통해 확인하면 FLAG가 나옴.
- Flag :
CTFlearn{how_can_swapping_columns_hide_a_qr_code}
This post is licensed under CC BY 4.0 by the author.