s1='XPNXVO]PJYSJXTNYVM]PJ^RMX\OZVO\W' t='' kk=b'key' for i inrange(32): t+=chr(ord(s1[i])^kk[i%3]) print(t) s=bytes.fromhex(t).decode()+'8i7a4t6155263210' k='' iv='' for i inrange(len(s)): if i%2==0: k+=s[i] else: iv+=s[i] print(k,iv) from base64 import b64decode from Crypto.Cipher import AES c='7mePfqpM6Wd1El2sj4dlUboU6PieF7La8IJ1e76cfp4=' c=b64decode(c) aes=AES.new(k.encode(),AES.MODE_CBC,iv.encode()[:16]) print(aes.decrypt(c))
import string from base64 import * s1='This is the flag: ' s2='This is the flag: MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYw' s3='This is the flag: MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYw Just decode it :P' #倒叙处理 s4='P: ti edoced tsuJ wYWZkNmYhlDO3YTN0MjMxAjZlR2YiFWO4cjN1QzMyEDM :galf eht si sihT' #类似换表处理,直接通过patch base64表 跑出变换后的表规则 """ ' ' -> '/' ':' -> '+' """ s='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' ntb='OPQRSTUVWXYZABCDEFGHIJKLMNtuvwxyzabcdefghijklmnopqrs5678901234+/'
f=open(r'flag.enc','rb') enc=f.read() f.close() enc=b64encode(enc).decode() m1='' for i inrange(len(enc)): m1+=s[ntb.index(enc[i])] m1=m1[::-1] print(m1) print(b64decode('QVNJU3tzSU1wTDNfYlU3X20xeDNkX1IzdkVyNWVfN0FzSyF9'))
from Crypto.Util.number import * from libnum import s2b defget_all_randk(p): tb=set() for i inrange(2,p-1): if (p-1)%i==0: tb.add(i) tb=list(tb) kk=[] for i inrange(2,p-2): ifpow(i,p-1,p)==1: ifall([pow(i,j,p)!=1for j in tb]): kk.append(i) return kk defget_arr(x,p): ans=[1] for i inrange(p-1): ans.append((ans[i]*x)%p) assert ans[-1]==1 return ans[:-1]
import os import string from libnum import s2b defenc(flag, size=0): if size: flag = flag.ljust(size, b'*') open('./flag.txt', 'wb').write(flag) os.system('qemu-aarch64 vivbit_orig') returnopen('./flag.enc', 'rb').read()
test_size = 64#需要为4的倍数进行测试 flag_enc = open('./chall_flag.enc', 'rb').read() verify_bins = s2b(flag_enc) #转成二进制串 flag = '' whilelen(flag) < 64: cached = dict() diff = set() a = s2b(enc((flag+'L').encode(), test_size)) #生成一个模板用于找出修改当前位置字节影响密文中的bit位 for ch in string.printable: b = s2b(enc((flag+ch).encode(), test_size)) #爆破当前不同的位,生成一个字典 cached[ch] = b for i inrange(len(a)): if a[i] != b[i]: diff.add(i) #将当前字符可能影响的所有位置都记录到diff diff = list(diff) print(diff)
maybe = [] for ch in string.printable: tmp = cached[ch] ifall([tmp[i] == verify_bins[i] for i in diff]): #影响的bit位与密文中的相同则为正确字符 maybe.append(ch) print(maybe) iflen(maybe) == 1: flag += maybe[0] else: flag += '?' print(flag)