[Wargame.kr] pyc decompile 풀이 (354p)
Wargame/wargame.kr

[Wargame.kr] pyc decompile 풀이 (354p)

풀이

bughela.pyc :D

파이썬~

python~


[IMPORTANT] SERVER TIME (KST) :

2020/07/29 18:42:36


pyc는 bytecode로 compile된 파이썬 파일이다. 다음 링크에서 decode 할 수 있다.

https://www.toolnb.com/tools-lang-en/pyc.html

 

PyC decompiler-love data tool

 

www.toolnb.com

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()

현재 시간에 맞춰, seed 값이 정해지고, 그 seed 값을 sha512로 암호화한다.

start, end 또한 현재 시간에 맞춰 값이 바뀌고, 결국, hs[start:end]가 flag가 된다.

 

여기서 중요한것은 문제에서 제공하는 서버 시간이다.

18시 53분에 찍은 사진이다. 현재 시간보다 서버 시간이 3분 빠르기 때문에, end 값을 결정하는 구문을 바꿔줘야 한다.

해당 파이썬을 실행하면 flag를 얻을 수 있다.

import time
from sys import exit
from hashlib import sha512

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