date : `17.02
If I tell you what version of python I used .. where is the fun in that?
pyc파일 하나가 주어진다. pyc는 파이썬 소스코드의 컴파일 버전이며 소스코드를 바로 볼 수 없다. 하지만 간단하게 디컴파일이 가능하다.
이전에 pox암호문제를 풀 때 사용했던 uncompyle2를 사용하였다. http://nopdata.tistory.com/198
uncompyle2를 파이썬 콘솔 내에서 사용하는 방법으로 사용하였다. (일반 커맨드 사용도 가능하다.
1
2
3
4
5
|
from uncompyle2 import uncompyle_file
f = open('unvm_me.py','wb')
uncompyle_file('unvm_me.pyc',outstream=f)
f.close()
|
cs |
이렇게 하면 소스코드를 바로 얻을 수 있다.
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: unvm_me.py
import md5
md5s = [174282896860968005525213562254350376167L,
137092044126081477479435678296496849608L,
126300127609096051658061491018211963916L,
314989972419727999226545215739316729360L,
256525866025901597224592941642385934114L,
115141138810151571209618282728408211053L,
8705973470942652577929336993839061582L,
256697681645515528548061291580728800189L,
39818552652170274340851144295913091599L,
65313561977812018046200997898904313350L,
230909080238053318105407334248228870753L,
196125799557195268866757688147870815374L,
74874145132345503095307276614727915885L]
print 'Can you turn me back to python ? ...'
flag = raw_input('well as you wish.. what is the flag: ')
if len(flag) > 69:
print 'nice try'
exit()
if len(flag) % 5 != 0:
print 'nice try'
exit()
for i in range(0, len(flag), 5):
s = flag[i:i + 5]
if int('0x' + md5.new(s).hexdigest(), 16) != md5s[i / 5]:
print 'nice try'
exit()
print 'Congratz now you have the flag'
|
cs |
소스코드는 md5로 해쉬화된 데이터들이 있고, 이 값을 다시 얻어주면 된다.
Flag : ALEXCTF{dv5d4s2vj8nk43s8d8l6m1n5l67ds9v41n52nv37j481h3d28n4b6v3k}
'CTF | wargame' 카테고리의 다른 글
Alexctf / usb probing (usb 패킷 분석 (0) | 2017.03.11 |
---|---|
Bits CTF / flagception (숨겨진 단서 찾기, 바이트 코드 변환) (0) | 2017.03.11 |
Alexctf / math bot (반복 소켓 연산) (0) | 2017.03.11 |
Alexctf / What is this encryption? (고전 rsa 복호화) (0) | 2017.03.11 |
Alexctf / poor rsa (공개키를 이용한 rsa 개인키 복호화) (0) | 2017.03.11 |