下载文件后,是个.pyc文件。
果然跟题目相对,
找个反编译的反编译出源代码。
https://tool.lu/pyc/
拖进去编译。
有:
#!/usr/bin/env python
# encoding: utf-8
# 如果觉得不错,可以推荐给你的朋友!http://tool.lu/pyc
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'
ord和chr用法:
https://blog.csdn.net/mingyuli/article/details/80981443
分析:首先输入一段字符串,进入encode函数之后与字符串correct进行比较
encode函数就是将输入的字符串中每个字符ascii都与32进行异或运算,然后每个在加上16得到新的字符串,最后再将这个字符
串进行base64加密。
所以我们只需将"XlNkVmtUI1MgXWBZXCFeKY+AaXNt"进行base64解密,再将每个字符ascii码都减16,接着与32异或即可得
脚本:
import base64
correct="XlNkVmtUI1MgXWBZXCFeKY+AaXNt"
s=base64.b64decode(correct)
flag=''
for i in s:
i=chr((i-16)^32)
flag+=i
print (flag)
和之前网上的那个不同,
因为使用py2.x写的,
ord()过不了的。
=======
nctf{d3c0mpil1n9_PyC}