X-CTF(REVERSE高级) 666

主函数输入的字符会和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这样的^运算加上小括号得到了错误结果,纠结了很久那里写错了。

原文地址:https://www.cnblogs.com/blackicelisa/p/12905625.html