[Crypt]StreamGame4-MF xp0int Posted on Mar 27 2018 ? Crypt ? ? Burteforce ? # StreamGame4 1.本题给了一个加密脚本和一个加密过后的key。 2.脚本将*flag*做为二进制读入,做为密钥。然后循环1024\*1024次,每次循环8次*nlfsr*函数,将结果变换写入key中。所以可以进行爆破,每次检测key的一位,从第一位开始,如果正确在检测下一位。脚本如下: ``` def nlfsr(R,mask): output = (R << 1) & 0xffffff i=(R&mask)&0xffffff lastbit=0 changesign=True while i!=0: if changesign: lastbit &= (i & 1) changesign=False else: lastbit^=(i&1) i=i>>1 output^=lastbit return (output,lastbit) f=open("key","rb").read() mask=0b110110011011001101110 flag = False for x in range(0,pow(2,27-6)-1): R=x for i in range(1024*1024): #此处可以把1024*1024改成一个较小的数 tmp=0 for j in range(8): (R,out)=nlfsr(R,mask) tmp=(tmp << 1)^out if f[i]!=tmp: break elif i==1024*1024-1: #此处也要同时更改 flag=True break if x%100000==0: print('x =',x) if flag==True: flag=x break print("flag{"+bin(x)[2:]+"}") ``` 3.脚本中可以更改的原因是因为,经过测试大部分数都无法满足前两次测试,所以可以将1024*1024改为一个较小的数,也就是只检测key的前几十位就好,最小甚至可以改为3。(其实也就少了100w次左右,原代码也就不到2分钟出结果,改过1分钟出结果) ![图片标题](https://leanote.com/api/file/getImage?fileId=5ab7cb2eab6441355d001805) 打赏还是打残,这是个问题 赏 Wechat Pay Alipay [Reverse] babyre - sherlly [Misc]ai-nimals-MF
没有帐号? 立即注册