본문 바로가기

CTF/Write-up

holyshield puzzle

holyshield puzzle

이런식으로 이미지가 주어지는데 이걸 합쳐서 하나의 이미지로 만들어야한다

http://swlock.blogspot.kr/2015/12/script-python-tile.html 우선 이 글을 참고했다

파일 이름이 00_00.png이런식인데 1단계는 쉽게 통과할 수 있다

2단계는 base64인데 디코딩을해서 파일이름을 위와같이 만들어주고 합치면된다

이제 3단계인데 3단계는 MD5로 되어있다 md5는 복고화가 일일이 안되니

반대로 생각해보면된다 파일 형식은 00_00.png이런식이다 그러므로 01_01.png이름을 md5로 해서 찾으면 된다

1
2
3
4
5
6
7
8
9
10
11
12
13
import os
import hashlib
 
for x in range(1100):
    for y in range(197):
        try:
 
           a = hashlib.md5("%02d_%02d.png" % (x, y)).hexdigest()
           os.rename(a, "%02d_%02d.png" % (x, y))
        except WindowsError:
            pass
 
 
cs

우선 이런식으로 이름을 정렬해준다 그다음은 1~2단계와 같이 합쳐주기만 하면 끝


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
28
29
30
from pytesser import *
 
""" save file name """
savefilename = "out_new.png" 
""" load file name """
loadfilename = []
for x in range(1100):
    for y in range(197):
        loadfilename.append("%02d_%02d.png" % (x, y))
 
sizeColumn = 96
 
image = Image.open(loadfilename[0])
= image.size[0];
= image.size[0];
length = len(loadfilename);
 
newimg=Image.new("RGBA",( int(sizeColumn*(x)) , int((((length-1)/sizeColumn)+1)*(y)) ) )
print "x,y:",x,y,int(sizeColumn),int(((length-1)/sizeColumn)+1),( int(sizeColumn*(x)) , int((((length-1)/sizeColumn)+1)*(y)) )
 
= 0;
for j in loadfilename:
 image = Image.open(j)
 box = (0,0,x,y)
 cutting = image.crop(box)
 print "process:",j,(i/sizeColumn),(i%sizeColumn),box,((x)*(i/sizeColumn),(y)*(i%sizeColumn))
 newimg.paste(cutting,((x)*(i%sizeColumn),(y)*(i/sizeColumn)))
 i=i+1;
 
newimg.save(savefilename,"PNG")
cs

9000장이라 리스트에 넣고 하는 방법은 코드 효율이 안좋지만 일단 그걸 따지고 만들었던게 아니라서 1단계 2단계에서 썼던방법대로 하고 한 3분정도 기다렸다


기다리다가 지쳐서 껐지만 폴더를 보니 이런 사진이 있었다

'CTF > Write-up' 카테고리의 다른 글

holyshield BrokenPiano  (0) 2016.12.22
holyshield sound  (0) 2016.12.20
holyshield ransome  (0) 2016.12.19
holyshield easylang  (0) 2016.12.19
holyshield StudyScala  (0) 2016.12.19