1 2 3 | bughela.pyc :D |
문제엔 서버시간이 나와 있다. 이렇게
[IMPORTANT] SERVER TIME (KST) :
2016/06/12 23:57:49
그리고 pyc를 받을 수 있는데, 실행해보면 import me 라고 나온다.
dir을 이용해서 명령어를 조회해보니 이렇게 나온다.
1 | [ 'GIVE_ME_FLAG' , '__builtins__' , '__doc__' , '__file__' , '__name__' , '__package__' , 'die' , 'exit' , 'main' , 'sha512' , 'time' ] |
목표가 굳이 설명을 할 필요가 없을정도로 명확해보인다.
일단 디컴파일이 필요해보이니 디컴파일러를 찾았다. 코드 원형을 쉽게 볼 수 있었다.
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 | import time from sys import exit from hashlib import sha512 def main(): print 'import me :D' def GIVE_ME_FLAG(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!!! 라고 했기때문에 서버시간을 써야되나싶어서 서버타임으로 대충 코드질을 했다
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 | #!/usr/bin/env python # -*- coding: utf8 -*- import time import datetime import urllib, urllib2, re from hashlib import sha512 headers = { 'Host' : 'wargame.kr:8080' } 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] response = urllib2.urlopen(req) res = response.read() print res |
약간.. 허무한 느낌이다.
pyc가 이렇게 쉽게 디컴파일이 되는것도 허무했고 문제도 조금 허무하고..