题目:FLAG就是你输入的key
链接:findkey.31a509f4006ba41368dcf963762388bb
首先用file看下是python2.7的字节码,拖入kali用uncomply2反编译,找到核心代码:
if len(flag) != 17:
print 'Wrong Key!!'
sys.exit(1)
flag = flag[::-1]
for i in range(0, len(flag)):
if ord(flag[i]) + pwda[i] & 255 != lookup[i + pwdb[i]]:
print 'Wrong Key!!'
sys.exit(1)
print 'Congratulations!!'
大意是flag要为17位,且首先经过逆向,然后遍历,如果任意flag[i]对应ascii十进制和pwda[i]&255(即自身)都要等于lookup[i+pwdb[i]]才Right。开始写解码:
str=""
for i in range(0,17):
tmp=lookup[i+pwdb[i]]-pwda[i]&255
#print(tmp)
str+=chr(tmp)
str=str[::-1]
print(str)
这里补充:
数值运算高于位运算,这是题目trap。