Code PYTHON :
#coding=utf-8
import sys
##
# Première ébauche de code
# afin de modifier la chaine hexadecimale correspondant a une instruction
# ASM, (code à modifier, afin de gérer les programmes plus gros où peuvent
# se trouver plusieurs itérations de la même séquence Hexa'.
#
# (Pour cette version, il est conseillé de donner une serie de opcodes plus large
# que celle de l'instruction à proprement parlé.)
##
##
# generation de opcodes à partir du String entré par l'utilisateur
##
def opcode_gen(x):
buf = ""
finaly_str = ""
i = 0
for lettre in x:
buf += lettre
if (i % 2) != 0:
buf = chr(int(buf,16))
finaly_str += buf
buf = ""
i +=1
return finaly_str
##
# Recherches modifications & copie du code
##
def make_crack(prog, initial, final):
f_read = open(prog,"rb")
data = f_read.read()
if (opcode_gen(initial) in data):
print "[*] Instruction found"
data = data.replace(opcode_gen(initial),opcode_gen(final),1)
name = raw_input(" Name of the new cracked binary : ")
f = open(name,"wb")
f.write(data)
f.close()
f_read.close()
print "[*] Succes !!!"
else:
print "[!] Error : Instruction not found"
##
# Fonction main()
##
def main(prog):
print "[*] Binary name : " + prog
i = raw_input(" Find (exmpl : 7404) : ")
f = raw_input(" Replace by : ")
if (i != "" and f != ""):
make_crack(prog, i, f)
else:
print "[!] Error : NULL ?"
##
# Header
##
def header():
print """
---------------------------------
-App : PatchR
-Powered by HWC-CREW
-Butterfly Project
-Desc : Replace opcodes in a binary (to change instructions)
---------------------------------
"""
if (len(sys.argv) < 2):
print "[!] Error : please specify a binary file"
print "[*] Use : ./patchR [binary_name]"
else:
header()
main(sys.argv[1])