python에서 .pyc는 컴파일된 파일입니다.

문제 자체가 decomplie하라는 문제이기 때문에 해당 파일을 디컴파일 먼저 수행해야 합니다.



"Easy Python Decompiler" 프로그램을 통해 간단하게 수행할 수 있습니다.

해당 프로그램을 사용하면 .pyc_dis 파일이 생성되고 확장자를 py로 바꾸고 열어보면 코드를 확인 할 수 있습니다.



아래 코드의 flag가 답을 얻기 위해 찾아야 되는 값입니다.

그리고 현재 시간을 통해서 ok변수 값의 flag값이 만들어지고 입력한 flag값과 비교를 합니다.


그렇다면 모르는 flag값을 제외한 코드를 사용해서 flag값을 만들 수 있습니다.

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
# Embedded file name: bughela.py
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()
cs



최종적으로 아래 코드를 이용해서 flag값을 획득 할 수 있습니다.

하지만 서버 시간과 사용자pc의 시간이 달라 flag값이 제대로 되지 않을 수 있습니다.


서버 시간에 맞춰 pc시간을 조정해서 python코드를 실행하면 올바른 값을 얻을 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Embedded file name: bughela.py
import time
from sys import exit
from hashlib import sha512
 
def main():
    print 'import me :D'
    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]
    print(ok)
 
if __name__ == '__main__':
    main()
cs




'WarGame > wargame.kr' 카테고리의 다른 글

[WarGame] tmitter  (0) 2018.11.01
[WarGame] img recovery  (0) 2018.10.31
[WarGame] md5_compare  (0) 2018.10.30
[WarGame] strcmp  (0) 2018.10.30
[WarGame] md5 password  (1) 2018.10.29

+ Recent posts