题目:解题原理和streamgame1一样
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()
解题EXP:
from Crypto.Util.number import*
bin_out = open('key','rb').read()
key = bin(bytes_to_long(bin_out))[2:]
# print(key[0:21])
# print(bin(int('0x100002',16)))
key = '101100101110100100001'
mask= '100000000000000000010'
tmp = key
R = ''
for i in range(21):
output = '?' + key[:20]
ans = int(tmp[-1-i]) ^ int(output[-2])
R += str(ans)
key = str(ans) + key[:20]
print(R[::-1])
flag:
flag{110111100101001101001}