from Crypto.Cipher import AES import hashlib import random
# /usr/share/dict/words from # https://gist.githubusercontent.com/wchargin/8927565/raw/d9783627c731268fb2935a731a618aa8e95cf465/words withopen("/usr/share/dict/words") as f: words = [w.strip() for w in f.readlines()] keyword = random.choice(words)
KEY = hashlib.md5(keyword.encode()).digest() FLAG = ?
a="aa" defget_flaglen(): print("Try to get the length of flag:") for i inrange(1,16): urls=url+a*i r=requests.get(urls) print(len(r.text[15:-3])) #打印密文的长度 if i==1: t=len(r.text[15:-3]) if"ciphertext"in r.text: #print(t,len(r.text[15:-3])) iflen(r.text[15:-3])>t: print(f"The length of flag is {(64-i*2)//2}") return (64-i*2)//2
import requests from tqdm import tqdm url="https://aes.cryptohack.org/ecb_oracle/encrypt/" a="aa" t=0 defget_flaglen(): print("Try to get the length of flag:") for i inrange(1,16): urls=url+a*i r=requests.get(urls) print(len(r.text[15:-3])) if i==1: t=len(r.text[15:-3]) if"ciphertext"in r.text: #print(t,len(r.text[15:-3])) iflen(r.text[15:-3])>t: print(f"The length of flag is {(64-i*2)//2}") return (64-i*2)//2
defget_flag(lens): flag = "crypto{p3n6u1n5" flag_hex = "63727970746f7b70336e3675316e35" #flag="" #flag_hex="" if lens<=15: for i inrange(0,15): urls = url + a * (15-i) r = requests.get(urls) target = r.text[15:-3][0:32] for _ in tqdm(range(94,128)): x=str(hex(_))[2:] urls=url+a*(15-i)+flag_hex+x #print(urls) rs=requests.get(urls) if(rs.text[15:-3][0:32]==target): print(chr(_)) flag+=chr(_) flag_hex+=str(hex(_)[2:]) break else: flag="crypto{p3n6u1n5" flag_hex="63727970746f7b70336e3675316e35" for i in (range(0,lens-15)): urls=url+a*(16-i) r = requests.get(urls) target = r.text[15:-3][32:64] for _ in tqdm(range(32,128)): x = str(hex(_))[2:] urls = url + a * (16 - i) + flag_hex + x rs = requests.get(urls) if(rs.text[15:-3][32:64]==target): print(chr(_)) flag+=chr(_) print(flag) flag_hex+=str(hex(_)[2:]) break return flag