I'm sure it's here somewhere. |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| _ _ _ _ _ _ add this to the format: zoo_wee_mama
from Crypto.Util.number import * from hashlib import sha256 from Crypto.Cipher import AES import itertools from time import *
start = time() print(f'[+] start') c = 0xedb43249be0d7a4620b9b876315eb430 enc_flag = 0xe5218894e05e14eb7cc27dc2aeed10245bfa4426489125a55e82a3d81a15d18afd152d6c51a7024f05e15e1527afa84b c = long_to_bytes(c) enc_flag = long_to_bytes(enc_flag) p = b'AES_AES_AES_AES!' chars = 'crew_AES*4=$!?' key = [] combinations = list(itertools.product(chars, repeat=3)) list = [] for combo in combinations: list.append(''.join(combo).encode()) length = len(list)**2 E_k2_k1_p = [] for k1 inlist: for k2 inlist: key1 = sha256(k1).digest() key2 = sha256(k2).digest() E_k2_k1_p.append(AES.new(key2, AES.MODE_ECB).encrypt( AES.new(key1, AES.MODE_ECB).encrypt(p))) key.append(k1+k2) print('[+] E_k2_k1_p finished') set1 = set(E_k2_k1_p) D_k3_k4_c = [] for k3 inlist: for k4 inlist: key3 = sha256(k3).digest() key4 = sha256(k4).digest() D_k3_k4_c.append(AES.new(key3, AES.MODE_ECB).decrypt( AES.new(key4, AES.MODE_ECB).decrypt(c))) key.append(k3+k4) set2 = set(D_k3_k4_c) res = set1 & set2 print('[+] D_k3_k4_c finished') res = res.pop() print(f'[+] res = {res}') enc_key = [] enc_key.append(key[E_k2_k1_p.index(res)]) enc_key.append(key[length+D_k3_k4_c.index(res)]) enc_key = sha256(b"".join(enc_key)).digest() print(AES.new(enc_key, AES.MODE_ECB).decrypt(enc_flag)) end = time() print(f'[+] end') print(f'[+] time = {end-start}')
[+] start [+] E_k2_k1_p finished [+] D_k3_k4_c finished [+] res = b'\xb7\xe25\x0c\xa5N\xban;\xf1\xd7\xa5Cn\xf85' b'crew{m1tm_at74cK_1s_g0lD_4nd_py7h0n_i5_sl0w!!}\x02\x02' [+] end [+] time = 196.34752559661865
Read between the lines
题目
#!/usr/bin/env python3 from random import shuffle from Crypto.Util.number import getPrime withopen('flag.txt', 'rb') as f: FLAG = f.read().strip() assertlen(FLAG) < 100 encoded_flag = [] for i, b inenumerate(FLAG): encoded_flag.extend([i + 0x1337] * b) shuffle(encoded_flag) e = 65537 p, q = getPrime(1024), getPrime(1024) n = p * q c = sum(pow(m, e, n) for m in encoded_flag) % n withopen('output.txt', 'w') as f: f.write(f'{n = }\n{e = }\n{c = }\n')
# sage from Crypto.Util.number import * n = 11570808501273498927205104472079357777144397783547577003261915477370622451850206651910891120280656785986131452685491947610185604965099812695724757402859475642728712507339243719470339385360489167163917896790337311025010411472770004154699635694228288241644459059047022175803135613130088955955784304814651652968093606122165353931816218399854348992145474578604378450397120697338449008564443654507099674564425806985914764451503302534957447420607432031160777343573246284259196721263134079273058943290282037058625166146116257062155250082518648908934265839606175181213963034023613042840174068936799861096078962793675747202733 e = 65537 c = 7173375037180308812692773050925111800516611450262181376565814072240874778848184114081029784942289615261118103256642605595499455054072839201835361613983341298973366881719999836078559255521052298848572778824157749016705221745378832156499718149327219324078487796923208917482260462508048311400560933782289383624341257636666638574026084246212442527379161504510054689077339758167386002420794571246577662116285770044542212097174474572856621921237686119958817024794843805169504594110217925148205714768001753113572920225449523882995273988088672624172009740852821725803438069557080740459068347366098974487213070886509931010623 M = Matrix(ZZ,102,102) m_i = [pow(0x1337 + i, e, n) for i inrange(100)] L = 2**20 for i inrange(100): M[0,i] = m_i[i] M[i+1,i] = 1 M[0,-2] = n M[0,-1] = -c M[-2,-2] = 1 M[-1,-1] = L res = M.T.LLL()[-1] if res[-1] == L: for i in res[1:100]: print(chr(abs(i)),end='') # crew{D1d_y0u_3xp3cT_LLL_t0_b3_h1Dd3n_b3tw3en_th3_l1n3s???}