我们得到的是一个.pyc文件,我们先来了解一下
一:什么是pyc文件?
pyc文件就是 py程序编译后得到的文件,是一种二进制文件。一般是这样的:
python中.pyc文件是什么?
pyc文件经过python解释器最终会生成机器码运行。所以pyc文件是可以跨平台部署的,类似Java的.class文件。如果py文件改变,也会重新生成pyc文件。
二:pyc文件怎么生成的?
1,被当做模块调用的时候会自动生成pyc文件
一般是python脚本被当做模块被其他脚本文件调用时,就会产生pyc文件,举个例子:
如果你写了一个脚本文件image.py是用来生成验证码的,如果你在index.py文件中想引用这个脚本的功能,就需要通过import导入image.py文件,然后,如果你运行index.py文件,那就会在image.py文件所在的路径生成一个image.pyc文件。
2,对于py文件,可以执行下面命令来生成pyc文件。
python中.pyc文件是什么?
3,通过代码来生成pyc文件。
python中.pyc文件是什么?
三:为什么要生成pyc文件?
1,python为了提高运行效率也会进行编译
python是解释型语言,运行的时候需要通过python解释器编译,所以先编译出pyc文件后,可以节省编译这一步的耗时时间。
2,不想让源码泄露。
因为py文件是可以直接看到源码的,对于一般的商业公司来说,这有点不妙,因为pyc文件可以独立于py文件,删除py文件也不会出错。这就是太好了,只需要编译成pyc文件再发布出去就好了。
为了得到源码,我们可以直接利用python在线反编译软件,也可以在安装uncompyle进行反编译
命令:pip install uncompyle
待安装成功后,输入命令:uncompyle6 ‘/root/crypto11.pyc’
输出python代码
import base64
def encode1(ans):
s = ''
for i in ans:
x = ord(i) ^ 36
x = x + 25
s += chr(x)
return s
def encode2(ans):
s = ''
for i in ans:
x = ord(i) + 36
x = x ^ 36
s += chr(x)
return s
def encode3(ans):
return base64.b32encode(ans)
flag = ' '
print 'Please Input your flag:'
flag = raw_input()
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
if encode3(encode2(encode1(flag))) == final:
print 'correct'
else:
print 'wrong'
根据代码写出解密脚本
import base64
def decode1(ans):
s = ''
for i in ans:
x = i^36
x = x - 36
s += chr(x)
return s
def decode2(ans):
s = ''
for i in ans:
x = ord(i) - 25
x = x ^ 36
s += chr(x)
return s
def decode3(ans):
return base64.b32decode(ans, casefold =False, map01= None)
number ="UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==="
number = decode2(decode1(decode3(number)))
print(number)
得到flag: cyberpeace{interestinghhhhh}