require 'pwn' def repeated_block?(bytes) blocks = bytes.each_slice(16).to_a blocks != blocks.uniq end s = Sock.new('crypto.chal.csaw.io', 5001) s.recvline # greeting i = 1 loop do puts "Round #{i}" s.recvline s.sendline('A' * 32) s.recvline ciphertext = line[/: *([0-9a-f]+)/] && $1 s.recvline # ECB or CBC? if repeated_block?(ciphertext.chars) s.sendline('ECB') STDERR.write(0) else s.sendline('CBC') STDERR.write(1) end i += 1 end