import os import random import string import binascii import base64 from flag import flag flag = flag.encode() assert flag.startswith(b'flag{') and flag.endswith(b'}') flag_len = len(flag)
举个例子:flag的第一位f,某次我们得到密文的第一位为7,通过枚举我们可以知道7 = a ^ V = b ^ U = c ^ T = d ^ S = f ^ Q ......,显然这个集是比较大的,而对于每一个密文,我们都可以得到一个可能的集,通过不断地获取密文并取交集,就能很快的得到原来的明文,但是必须保证flag中的所有字符在脚本中的table里包含,不然会跑不出交集的,(你都没有我从哪里给你搞出来啊)
import os import random import string import binascii import base64 from flag import flag flag = flag.encode() assert flag.startswith(b'flag{') and flag.endswith(b'}') flag_len = len(flag)
defgetdir(x): dic = '' length = len(table) for i inrange(0,length): for j inrange(i,length): if(x == (table[i] ^ table[j])): dic += chr(table[i]) + chr(table[j]) return dic
defsol(a,b): ans = '' for i inrange(0,len(a)): for j inrange(0,len(b)): if(a[i] == b[j] and ans.find(a[i]) == -1): ans += a[i] return ans
for i inrange(0,len(clist[0])): res = sol(getdir(clist[0][i]),getdir(clist[1][i])) for j inrange(2,len(clist)): res = sol(getdir(clist[j][i]),res) if(len(res)==0): print('Table is too small!') elif(len(res)>1): print('Data is too little!') else: print(res,end = '')