主函数输入的字符会和key比较长度和enflag比较内容,所以这道题的flag和输入有关
key长度为0x12,enflag的值为:izwhroz""w"v.K".Ni
对输入进行加密的函数,首先比较输入长度是否为0x12,然后以三个数字为一组,每组为一个循环,进行加密。
正确的输入经过加密等于enflag,所以对enflag的值进行逆向计算可以得到正确的输入(flag),代码如下
key=[] s="izwhroz""w"v.K".Ni" for i in s: key.append(i) print("key:",key) #key.reverse() flag='' for j in range(0,18,3): flag += chr((ord(key[j])^18)-6) flag += chr((ord(key[j+1])^18)+6) flag += chr(ord(key[j+2])^18^6) print(key[j]) print(flag)
有一个坑是+号的优先级大于^,在第一次运算没有给ord(key[j])^18这样的^运算加上小括号得到了错误结果,纠结了很久那里写错了。