martes, 22 de noviembre de 2016

Trabajar Con Archivos Binarios en Python 3

En este tutorial explicare como manejar archivos binarios en python 3, aclaro soy nuevo en python así que les enseñare un poco de lo que se.

Primera mente si no lo tienen instalado python pueden ver mi publicación anterior donde enseño no solo a descargarlo sino a configurarlo con el notepad++:

http://elblogdeflamer.blogspot.mx/2016/11/instalando-python-3-y-configurarlo-con.html

Primero daré una explicación breve de algunos comando que usare para manejar archivos.

Open este comando se utiliza para abrir un archivo, ya sea para escribir en el o para leer el contenido de este.
El camando open lleva 2 parámetros, la ruta del archivo a abrir(no creo que tenga que explicar mucho en este) y el modo de apertura ejemplo:

file = open("ruta","modo_de_apertura")


Los diferentes modos de apertura son estos:

ModosDescripción
rAbre un archivo de sólo lectura.
El puntero del archivo se coloca en el principio  del archivo.
Este es el modo predeterminado.
rbAbre un archivo de sólo lectura en formato binario.
r+Abre un archivo para lectura y escritura.
El puntero del archivo estará en el principio del archivo.
rb+Abre un archivo para la lectura y la escritura en formato binario.
 El puntero del archivo estará en el principio del archivo.
wAbre un archivo para escribir solamente.
Sobrescribe el archivo si el archivo existe.
Si el archivo no existe, se crea un nuevo archivo para escritura.
wbAbre un archivo para escribir sólo en formato binario.
Sobrescribe el archivo si el archivo existe.
Si el archivo no existe, se crea un nuevo archivo para escritura.
w+Abre un fichero para escritura y lectura.
Sobrescribe el archivo existente si existe el archivo.
Si el archivo no existe, se crea un nuevo archivo para la lectura y la escritura.
wb+Abre un archivo, tanto para la escritura y la lectura en formato binario.
Sobrescribe el archivo existente si existe el archivo.
Si el archivo no existe, se crea un nuevo archivo para la lectura y la escritura.

Read este comando se utiliza para leer el contenido del archivo abierto en modo lectura

Write se utiliza para escribir dentro del archivo abierto en modo escritura


Para este tutorial usare mi crackme 7 que lo pueden descargar de mi lista de crackmes aquí:
http://elblogdeflamer.blogspot.mx/p/mis-cackmes.html


como verán en la siguiente imagen, en mi crackme7 se necesita parchar el botón




Así que crearemos un programa en python que active el botón.

Nota: No mostrare el proceso en el ollydbg para activar el botón para no hacer el tema mas largo, solo les mostrare las posiciones de memoria que hay que modificar con el programa

Para obtener la posición de memoria compare el archivo original con el archivo crackeado con un editor hexadecimal como se muestra en la imagen



Nota: el editor que use lo pueden descargar desde aquí:
https://mh-nexus.de/en/hxd/


Y como ven en la imagen solo tenemos que cambiar el "53" por el "56", así que abriremos el notepad++ y tecleamos el siguiente código


import binascii   # importamos el modulo binascii

archivo = open('C:/Users/Flamer/Desktop/crackme7.exe','rb') # abrimos el archivo crackme7.exe
byte = archivo.read()  # Leemos todos los bytes del archivo
archivo.close  # Cerramos el archivo

w = binascii.unhexlify('56') # Convertimos el valor 56 que es string a binario con el comando unhexlify

code = byte[0:9142] + w + byte[9143:len(byte)]  # insetartamos el byte anterior(el 56 convertido a byte) en la variable code

file = open('C:/Users/Flamer/Desktop/crackme7.exe','wb')  # abrimos el archivo crackme7.exe
file.write(code) # Escribimos los bytes anteriores
file.close  # Cerramos el archivo

print ("terminamos")  # Mensaje de terminamos


OJO: Ustedes cambian la ruta del archivo

Ya que tenemos el código lo aguardan con el formato ".py", yo lo nombre "activa_boton.py" y al ejecutarlo les parchara el archivo crackme7.exe activando el boton.


Ahora les mostrare otro código donde leeremos todos los bytes del archivo crackme7.exe y obtendremos su valor ascii para después separarlos con dos guiones.


import binascii # importamos el modulo binascii

archivo = open('C:/Users/Flamer/Desktop/crackme7.exe','rb') #abrimos el archivo crackme7

byte = archivo.read() #leemos todos los bytes
code = binascii.hexlify(byte) # transformamos los bytes a valores hexadecimal en formato string

c = "" # inicializamos la variable c
largo = len(code) # obtenemos la longitud de la varible code

for x in range(0,largo,2): # ciclo for donde la variable x inicia en 0 e incrementara de 2 en 2 y termina en el valor que contenga la variable largo
    c = c + (str(int(code[x:x+2],16))) + "--" # obtiene el valor ascii de cada bit y lo concatena en la variable c, junto con los guiones
archivo = open('C:/Users/Flamer/Desktop/coder.txt','w') # crea el archivo coder.txt
archivo.write(c) # escribe el contenido de la variable c en el archivo coder.txt
archivo.close # cierra el archivo 
print ("terminamos") # mensaje de fin


Ahora después pasamos a aguardar el código, yo lo aguarde con el nombre de "Leer_code.py" y al ejecutarlo me crea el archivo "coder.txt" con el siguiente contenido




bueno saludos Flamer y eso es todo


No hay comentarios.:

Publicar un comentario