# TechnexCTF 2024 Mình thấy giải này mỗi bài này là hay, còn lại toàn hình ảnh với lỏ cỏ, nên wu mỗi bài này. Source.py ```python3= #!/bin/python3 from Crypto.Cipher import AES from secret import key, flag def unpad(padded_data: bytes): pdata_len = len(padded_data) if pdata_len == 0: raise ValueError("empty message must be padded") if pdata_len % 16: raise ValueError("Input data is not padded") padding_len = padded_data[-1] if padding_len < 1 or padding_len > min(16, pdata_len): raise ValueError("Padding is incorrect.") if padded_data[-padding_len:] != bytes([padding_len]) * padding_len: raise ValueError("Padding is incorrect.") return padded_data[:-padding_len] while True: try: iv = bytes.fromhex(input("iv: ")) if len(iv) != 16: raise Exception msg = bytes.fromhex(input("encrypted message: ")) if len(msg) % 16: raise Exception except: print("you broke something", flush=True) print("bai", flush=True) exit(0) cipher = AES.new(key, AES.MODE_CBC, iv) plaintext = cipher.decrypt(msg) try: plaintext = unpad(plaintext) except: print("I didn't quite catch that, try again", flush=True) continue if plaintext == b"send flag pls": print(flag, flush=True) break else: print("I don't understand, try again", flush=True) ``` Solve.py ```python3= from time import* from Crypto.Util.number import* from pwn import* from os import urandom io = process(['python3','server.py']) right = b'' for count in range(15,-1,-1): for i in range(256): zit = 0 io.recvuntil(b"iv: ") io.sendline(b"00"*count + long_to_bytes(i).hex().encode() + (xor(right,long_to_bytes(15-count+1)*(15-count))).hex().encode()) io.recvuntil(b'message: ') io.sendline(b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") ct = io.recvuntil(b"\n",drop=True).decode() if "understand" in ct: print(ct, long_to_bytes(i).hex()) right = xor(long_to_bytes(16 - count),long_to_bytes(i)) + right print(right.hex()) zit = 0 break def pad(msg, block_size): pad_len = 16 - len(msg) % block_size return msg + bytes([pad_len])*pad_len iv = (xor(pad(b"send flag pls",16),right).hex()) io.recvuntil(b'iv: ') io.sendline(iv.encode()) io.recvuntil(b'message: ') io.sendline(b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") io.interactive() ```