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가 이렇게 쉽게 디컴파일이 되는것도 허무했고 문제도 조금 허무하고..