streamgame2(lfsr)

    科技2024-05-10  90

    from flag import flag assert flag.startswith("flag{") assert flag.endswith("}") assert len(flag)==27 def lfsr(R,mask): output = (R << 1) & 0xffffff i=(R&mask)&0xffffff lastbit=0 while i!=0: lastbit^=(i&1) i=i>>1 output^=lastbit return (output,lastbit) R=int(flag[5:-1],2) mask=0x100002 f=open("key","ab") for i in range(12): tmp=0 for j in range(8): (R,out)=lfsr(R,mask) tmp=(tmp << 1)^out f.write(chr(tmp)) f.close()

    一开始把int函数的意思记错了,感觉题目很奇怪,之后才反应过来,这里int函数应该是将一个二进制的字符串转成10进制数. 一道很简单的lfsr题目. 直接逆.

    f=open('streamgame2key','rb').read() from Crypto.Util import number f=bin(number.bytes_to_long(f))[2:] pflag='' for i in range(len(f)-2): pflag+=str(int(f[i])^int(f[i+2])) pflag=pflag[:19] flag1=str(int(f[0])^int(pflag[-2])) flag2=str(int(f[1])^int(pflag[-1])) print((flag1 + flag2 + pflag)) #flag{110111100101001101001}
    Processed: 0.011, SQL: 8