攻防世界python-trade
1、题目
2、下载文件后发现是一个pyc文件,对pyc文件进行反编译
注:pyc文件是python编译产生的中间文件。python是一个先编译再解释型语言。python解释器由一个编译器和一个虚拟机构成,python.exe先将源码编译成字节码(即将.py 文件换转成.pyc 文件),.pyc不是二进制码,而是一种字节码文件,它是与平台无关的中间代码,不管是在Windows 还是Linux 平台都可以执行,运行时再由虚拟机逐行把字节码翻译成目标代码。
方法一:在网上找了一个反编译网站
方法二:利用python命令反编译
1、按装uncompyle库
pip install uncompyle
2、用命令反编译trade.pyc文件并将结果写入trade1.py文件中
C:\Users\Administrator\Desktop\trade>uncompyle6 trade.pyc > trade1.py
反编译结果
import base64
def encode(message):
s = ''
for i in message:
x = ord(i) ^ 32
x = x + 16
s += chr(x)
return base64.b64encode(s)
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
flag = ''
print 'Input flag:'
flag = raw_input()
if encode(flag) == correct:
print 'correct'
else:
print 'wrong'
import base64
def encode(message):
s = ''
for i in message:
x = ord(i) ^ 32
x = x + 16
s += chr(x)
return base64.b64encode(s)
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
flag = ''
print 'Input flag:'
flag = raw_input()
if encode(flag) == correct:
print 'correct'
else:
print 'wrong'
3、分析代码内容,我们知道flag进行encode函数中的操作,得到‘XlNkVmtUI1MgXWBZXCFeKY+AaXNt’。因此,我们只要反过来执行,就能够得到flag,写出代码
import base64
def decode(message):
s = ''
imessage = base64.b64decode(message)
for i in imessage:
x = ord(i) - 16
x = x ^ 32
s += chr(x)
return s
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
flag = decode(correct)
print(flag)
4、运行代码,得到flag
nctf{d3c0mpil1n9_PyC}