본문 바로가기

Wargame/▷ xcz.kr

[xcz.kr] prob25 XCZ Captcha!

[xcz,kr] prob25 XCZ Captcha!

xcz Captcha 문제다.

15초 안에 각 숫자 2개의 최소공배수를 입력하면 플래그를 건네준다~


[Solve]

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from PIL import Image
from pytesser import *
import urllib2
import re, time
 
 
def connect_web(url, cookie_data):
    request = urllib2.Request(url, '', cookie_data)
    response = urllib2.urlopen(request)
    response = response.read()
    return response
 
 
def create_image_string(path):
    imageFile = path
    im = Image.open(imageFile)
    return image_to_string(im)
 
 
def change_rgb(filename):
    im = Image.open(filename)
    im = im.convert('RGB')
    x, y = im.size
    im_pix = im.load()
    r, g, b = im_pix[00]
 
    for i in range(x):
        for j in range(y):
            if im_pix[i, j] != (r, g, b):
                im_pix[i, j] = 0
    im.save(filename)
 
 
def gcd(a, b):
    mod = a % b
    while mod > 0:
        a = b
        b = mod
        mod = a % b
    return b
 
 
def lcm(a, b):
    return a * b // gcd(a, b)
 
 
if __name__ == "__main__":
    picture_url = 'http://xcz.kr/START/prob/prob_files/prob25_img.php'  # gif file path
    url = 'http://xcz.kr/START/prob/prob_files/prob25_ok.php?lcm='
    cookie_data = {'cookie''PHPSESSID=8gs1i81a3lgrpkf4q94gfrakp0;'}
    filename = "G:\\xcz_image\\xcz_captcha.png"
    while 1:
        try:
            with open(filename, "wb") as f:
                f.write(connect_web(picture_url, cookie_data))
            change_rgb(filename)
            img_str = create_image_string(filename)
            img_str = re.sub("[^0-9,',']""", img_str).split(',')
            print img_str
            auth = lcm(int(img_str[0]), int(img_str[1]))
            result = connect_web(url + str(auth), cookie_data)
            time.sleep(0.5)
            if result.find('Failed'== -1:
                print result
                break
        except IndexError as e:
            print e
cs

일단 rgb 값으로 배경색과 다른 문자들 색은 다 검은색으로 다꿔서 이미지 string을 잘 인식하게 바꿔주었다.

그다음 가끔 쉼표를 인식못해서 숫자만 나와 indexerror가 뜨는데 이부분 예외처리 해줘서 correct 나올때 까지 반복문 돌렸다.

'Wargame > ▷ xcz.kr' 카테고리의 다른 글

[xcz.kr] chaos  (0) 2018.03.21
[xcz.kr] All Clear  (6) 2018.02.08
[xcz.kr] prob26 ju57_ENc0dE  (0) 2018.02.08
[xcz.kr] prob34 - Get the key, If You Can  (0) 2017.06.14
[xcz.kr] prob19 - Revershit!  (0) 2017.01.30