攻防世界 crypto--------easychallenge

我们得到的是一个.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

攻防世界 crypto--------easychallenge_第1张图片
待安装成功后,输入命令: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}

你可能感兴趣的:(攻防世界 crypto--------easychallenge)