1.下载下来是一个pyc文件,之前做题了解到实验室有大佬知道pyc。然后get到一个超爽的网站直接把pyc转成python
2.接下来,看代码喽
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', ';','%',`
3.其实一个(输入的字符+序列)再加一个第一个和后一个逆或就搞定的事,费了这么长时间。😫
。然后再细说
num = ((input1[i] + i) % 128 + 128) % 128
这个东西呢,首先要知道一个公式(a%c+b%c)%c=(a+b)%c然后就可以化简了,我的理解是把b看成0,再把数带到公式里去后。然后就可以得到(input1【i】+i)%128。这个式子我想了好久该怎么去得到input1,我本来想就当他是个数学题做,但就是做不成,后来看师傅们的wp,把它理解成输入的字符+序列,他这个取余是为了保证他的ascll码在128里面,咱也保证就可了,就好逆了。
再说第二函数其实就是异或^,没啥好说我逆或我自己等于啥都没有。但是范围要注意的他原来是0到l-2,然后在逆这回去。
4,code = ['\x1f','\x12','\x1d','(','0','4','\x01','\x06','\x14','4',',','\x1b','U','?','o','6','*',':','\x01','D',';','%','\x13']换行 input1=['']这里换行 for i in range(len(code) - 2,-1,-1):换行 code[i] = chr(ord(code[i])^ord(code[i + 1]))换行 for i in range(len(code)):换行 print ( chr((ord(code[i])-i)%128),end='')
不知道为啥就变得这么丑了,手动换行,运行get flag。