늘모자란, 개발 :: [wargame.kr] Challenge 16 - pyc decompile

늘모자란, 개발

bughela.pyc

:D


문제엔 서버시간이 나와 있다. 이렇게

[IMPORTANT] SERVER TIME (KST) :

2016/06/12 23:57:49


그리고 pyc를 받을 수 있는데, 실행해보면 import me 라고 나온다.
dir을 이용해서 명령어를 조회해보니 이렇게 나온다.

['GIVE_ME_FLAG', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'die', 'exit', 'main', 'sha512', 'time']


목표가 굳이 설명을 할 필요가 없을정도로 명확해보인다.
일단 디컴파일이 필요해보이니 디컴파일러를 찾았다. 코드 원형을 쉽게 볼 수 있었다.

import time
from sys import exit
from hashlib import sha512

def main():
    print 'import me :D'

def GIVE_ME_FLAG(flag):
    if flag[:43] != 'http://wargame.kr:8080/pyc_decompile/?flag=':
        die()
    flag = flag[43:]
    now = time.localtime(time.time())
    seed = time.strftime('%m/%d/HJEJSH', time.localtime())
    hs = sha512(seed).hexdigest()
    start = now.tm_hour % 3 + 1
    end = start * (now.tm_min % 30 + 10)
    ok = hs[start:end]
    if ok != flag:
        die()
    print 'GOOD!!!'

def die():
    print 'NOPE...'
    exit()

if __name__ == '__main__':
    main()


소스를 풀어서 실행하면 끝날까 싶더니 안되었다.
잘 보면 로컬타임을 맞춰 실행되고 있는데 처음에 문제에서 IMPORTANT!!! 라고 했기때문에 서버시간을 써야되나싶어서 서버타임으로 대충 코드질을 했다

#!/usr/bin/env python
# -*- coding: utf8 -*-
 
import time
import datetime
import urllib, urllib2, re
from hashlib import sha512

 
headers = {'Host': 'wargame.kr:8080'}
url = "http://wargame.kr:8080/pyc_decompile/"
 
req = urllib2.Request(url, '', headers)
response = urllib2.urlopen(req)
res = response.read()

server_time = res[res.find('<h1>')+4:res.find('</h1>')]
server_time = datetime.datetime.strptime(server_time, '%Y/%m/%d %H:%M:%S')

now = server_time
seed = server_time.strftime('%m/%d/HJEJSH')
hs = sha512(seed).hexdigest()
start = server_time.hour % 3 + 1
end = start * (server_time.minute % 30 + 10)
ok = hs[start:end]

req = urllib2.Request("http://wargame.kr:8080/pyc_decompile/?flag=" + ok, '', headers)
response = urllib2.urlopen(req)
res = response.read()


print res


약간.. 허무한 느낌이다.
pyc가 이렇게 쉽게 디컴파일이 되는것도 허무했고 문제도 조금 허무하고..





2016/06/13 00:16 2016/06/13 00:16