먼저 CBC모드는 각 평문 블록은 이전 블록 암호문와 XOR 연산 후 암호화하는 블록 암호 모드이고,
암호화와 복호화를 보게 되면, 암호화를 역으로 하는게 복호화이다.
그리고 ECB모드의 복호화 암호화 블록을 복호화한 것이 그대로 평문 블록이 된다.
이때 xor하는 과정을 생략 한다.
즉, CBC의 암호 해독은 EBC에 XOR하는 과정이 추가 된 것이기에
CBC에서 얻은 암호문 블럭과, 복호화된 평문 블록을 XOR시키면 된다.
from pwn import *
ciphertext='cce45e92158819ddd696d31d47830a129f76621e76b1b722a1e6b8fc8b3c852823c46c6ee3b4008ae5b099b1568540a7'
plaintext='da2a240b7ccdd12f859d9a512df4043caf9627e261e762eeb5f48c2832e06127c042142e47d5e81396b999ddaa1da455'
ciphertext=bytes.fromhex(ciphertext)
plaintext=bytes.fromhex(plaintext)
result=b''
for i in range(0, len(ciphertext), 16):
result += xor(ciphertext[i : i + 16], plaintext[i + 16: i + 32])
print(result)