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 |