buu reverse [GWCTF 2019]pyre
首先用python反编译 - 在线工具反编译pyc文件,得到以下代码
点击查看代码
#!/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 = [
'\x1f',
'\x12',
'\x1d',
'(',
'0',
'4',
'\x01',
'\x06',
'\x14',
'4',
',',
'\x1b',
'U',
'?',
'o',
'6',
'*',
':',
'\x01',
'D',
';',
'%',
'\x13']
然后写脚本
点击查看代码
l=23
code = ['\x1f',
'\x12',
'\x1d',
'(',
'0',
'4',
'\x01',
'\x06',
'\x14',
'4',
',',
'\x1b',
'U',
'?',
'o',
'6',
'*',
':',
'\x01',
'D',
';',
'%',
'\x13']
for i in range(21, -1, -1):
code[i] = chr(ord(code[i]) ^ ord(code[i + 1]))
for i in range(23):
print(chr((ord(code[i])-i)%128),end="")
一开始在想128是干嘛用的,后来想起来,ascii码一共有128个,%128的目的是保证存在字符可以被输出
得到flag:GWHT{Just_Re_1s_Ha66y!}