Dyrandy

[Wargame.kr] 워게임 16번 challenge 16 pyc decompile 본문

Wargame WriteUp/WarGame.kr

[Wargame.kr] 워게임 16번 challenge 16 pyc decompile

Dyrandy 2018. 4. 25. 22:07

오늘 풀어볼 문제는 생각보다 조금 허무하고,

쉬운 문제다.

 

 

 

문제를 살펴보면 pyc decompile이다

 

그러면 과연 pyc가 무엇인가?

 

pyc = python bytecode 라는 것이다

 

그러면 요기서 '바이트 코드'가 과연 무엇인지 헷갈릴 것이다.

 

bytecode (바이트 코드): 가상 프로그램에서 돌아가는 프로그램의 이진 표현법이다. 이것은 컴파일 되서 만들어져서

보기위해서 우리는 디컴파일 (decompile) 해줄 필요가 있다.

 

https://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8%EC%BD%94%EB%93%9C

 

https://en.wikipedia.org/wiki/Bytecode

 

그러면 대략적으로 문제는 python bytecode가 주어지고 우리는 그것을 풀어야한다는 것이다.

일단 문제를 보도록 하자.

 

페이지에 접속해보면 이런 페이지가 나온다.

 

 

대략적으로 보면, important와 함께 server time이 주어진다 그리고 pyc 파일이 하나 주어진다.

 

그래서 개인 우분투에 설치를 하였다.

 

 

일단 pyc의 파일 내용을 보기위해서는 python decompiler가 필요하다.

무작정 vi때리거나 cat 때리면, 희한한 값들이 줄줄줄 세어나온다.

 

어떻게 decompile해야할지 몰라서 google을 뒤져보았다.

 

http://ruinick.tistory.com/67

 

https://pypi.org/project/uncompyle6/

 

https://gauravssnl.wordpress.com/2017/07/01/how-to-decompile-compiled-pyc-python-files-to-findsee-original-source-code/

 

이렇게 3곳을 좀 깊게 봤는데, 결론은 uncompyle6라는 툴을 사용하기로 하였다.

 

sudo pip install uncompyle6을 이용해서 다운로드 받았다.

요기서 sudo는 가능하면 해주도록 한다.

sudo가 없으면 에러가 나는 경우가 있다.

 

이렇게 해서 받은 uncompyle6를 이용해 bughela.pyc파일을 디컴파일 해보았다.

 

 

그러면 저런 긴 python코드가 나온다

 

 

위와 같은 소스코드가 나오는데 자세히 보면 시간과 관계가 있는 것이다.

끝에 ok값과 flag값이 일치해야 'GOOD!!!' 이 출력되는 것을 확인 할 수 있다.

 

그러면 어떻게 하면되나?

 

url을 자세히 http://wargame.kr:8080/pyc_decompile/?flag

 

가 있는데 우리가 ok값을 알면, flag에 넣어서 일치시켜

원하는 페이지로 이동하거나, flag를 얻을 수 있다는 소리다!

 

자세히 서버시간을 보니, 현제 서울 시간 보다 3분 9초가 빠르다는 것을 알 수 있다.

 

우분투 시간을 현 서울 시간으로 맞춰 소스코드에서 now 부분에

189 (3분 9초) 를 더해서 python 코드를 실행 시켜보았다.

 

 

 

위 처럼 189를 더했다.

 

 

실행시켰더니

ok값이 나왔다.

 

dd5c7a801388282582730f6a8a95c4

 

이것을 복사해서

주소로 가보면

 

 

Comments