#!/usr/bin/env python import r2pipe import sys r2 = r2pipe.open() # r2 base address delta = 0x400000 def patchByte(addr, oldbyte, newbyte): print "[-] Patching byte at addr: {} {}->{}".format(hex(addr), oldbyte, newbyte) r2.cmd("wx {} @ {}".format(newbyte, hex(addr))) res = r2.cmd("p8 1 @ {}".format(hex(addr))) if res != newbyte: print "[!] Error writing byte at {}".format(hex(addr)) # Check file permissions if r2.cmd("i~mode[1]").find("w") < 0: print "Please open file in write mode (oo+)" quit() # Check args if len(sys.argv) != 2: print "Please run script with path to patch file" quit() with open(sys.argv[1], 'r') as f: for line in f: if not line.startswith(">"): line = line.rstrip("\n") split = line.split(":") addr = int(split[0], 16) + delta bytesplit = split[1].split("->") patchByte(addr, bytesplit[0], bytesplit[1])