发现是pyc文件,那我们首先要反编译一下,这里我用的这个网站python反编译 - 在线工具 (tool.lu)
把编译后的结果放到我们的vscode里
#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 2.7
print 'Welcome to Re World!'
print 'Your input1 is your flag~'
l = len(input1)
for i in range(l):
num = ((input1[i] + i) % 128 + 128) % 128
code += num
for i in range(l - 1):
code[i] = code[i] ^ code[i + 1]
print code
code = [
'%1f',
'%12',
'%1d',
'(',
'0',
'4',
'%01',
'%06',
'%14',
'4',
',',
'%1b',
'U',
'?',
'o',
'6',
'*',
':',
'%01',
'D',
';',
'%',
'%13']
为方便观察,将code重新整理一下
#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 2.7
print 'Welcome to Re World!'
print 'Your input1 is your flag~'
l = len(input1)
for i in range(l):
num = ((input1[i] + i) % 128 + 128) % 128
code += num
for i in range(l - 1):
code[i] = code[i] ^ code[i + 1]
print code
code = ['%1f','%12','%1d','(','0','4','%01','%06','%14','4',',','%1b','U','?','o','6','*',':','%01','D',';','%','%13']
第一个for in 函数可以简化,因为后面+128再%128对结果无影响,第二个for in涉及到异或运算,一个数异或两次等于本身,且每一位与自己后一位异或的话那么数组中的最后一个数是不变的,又不难发现由于语句顺序的原因需要将两个for in的位置互换,再将code拿到最前面,更改后如下
最后得到flag为{Just_Re_1s_Ha66y!}