miércoles, 2 de mayo de 2018

Desbloquear EasyXXX o MFD-Titán protegidos con contraseña.

Hola gente como va?

Bien lo que voy a publicar hoy es una explicacion simple y una serie de fotos que en su momento subí como albun en mi facebook.
En fin, vamos a desbloquear un relé programable de la marca moeller.
En un principio abrimos el EasySoft:

Luego nos vamos a comunicación y nos conectamos al equipo:

Cuando este transfiriendo la programación nos pedirá la contraseña, aquí aparecerá el cuadro de diálogo siguiente. Donde ingresamos un numero cualquiera y le damos a OK.

Nos aparecerá el siguiente mensaje:

Abrimos el olly y attachamos el programa.
Una vez attachado le damos run y luego pausamos, para que nos deje poscicionado justo dentro del cuadro de diálogo... Vamos saliendo de las distntas call's con CTRL + F9, hasta llegar donde se muestra:

Seguimos con F8 hasta llegar al retorno siguiente:

Lo mismo aqui...

Y aquí también...


Una vez que retornamos de aquí, veran el siguiente código:
PUSH ESI
PUSH EDI
MOV EDI, ECX
LEA EAX, DWORD PTR SS:[ESP+10]
MOV ECX, DWORD PTR SS:[ESP+C]
PUSH EAX
PUSH ECX
MOV ECX, EDI
CALL EASYSOFT.004A56E0
MOV ESI, EAX
TEXT ESI, ESI
JE SHORT EASYSOFT.0047DA8B
MOV EAX, DWORD PTR SS:[ESP+10]
MOV EDX, DWORD PTR DS:[EDI]
PUSH EAX
PUSH ESI
MOV ECX, EDI
CALL DWORD PTR DS:[EDX+98]
MOV EAX, ESI
POP EDI
POP ESI

El cual vamos a editar como muestra la imagen siguiente.

Como ven en esta imagen está el codigo editado y se colocaron dos BP, el de arriba no deben colocarlo, solo deben colocar el de abajo.
Una vez colocado ese BP debajo del salto incondicional y editado el código le dan a RUN, y a esperar se ha dicho.
Cabe destacar que las direcciones de memoria de la imagen anterior con respecto a esta difieren ya que las cree en momentos diferentes.
El código modificado es el siguiente:

PUSH ESI ---> guardo en pila ESI
PUSH EDI ---> guardo en pila EDI
MOV EDI, ECX --- muevo ECX a EDI
LEA EAX, DWORD PTR SS:[ESP+10] ---> muevo una direccion de memoria a EAX (se imaginaran que direccion es....)
MOV ECX, DWORD PTR SS:[ESP+C] ---> muevo un valor a ECX
PUSH EAX ---> pongo EAX en la pila
PUSH ECX ---> pongo ECX en la pila
MOV ECX, EDI ---> muevo a ECX el valor de EDI
CALL EASYSOFT.004A56E0 -----> Esta call devuelve el resultado de la comprobación de seriales
MOV ESI, EAX ---> muevo el resultado a ESI
TEXT ESI, ESI ---> Comparo
JE SHORT EASYSOFT.0044B916 ---> Si es cero salta a la instruccion que esta debajo del JMP, lo cual quiere decir que sería el pass correcto.
MOV ECX, EDI ---> si no es correcto restauro el valor de ECX (notese la tercer instrucción MOV EDI, ECX)
POP EDI ---> restauro EDI
POP ESI ---> restauro ESI
INC EBX ---> incremento EBX (password)
MOV DWORD PTR SS:[ESP+8], EBX ---> guardo mi password (vease cuarta instrucción LEA EAX, DWORD PTR SS:[ESP+10])
JMP SHORT EASYSOFT.0044B8F0 ---> salto al inicio
MOV EAX, ESI
POP EDI
POP ESI
RETN 8


Pass encontrado!!!!!!! (lo verán en EBX).

Cabe destacar que puede existir la posibilidad de ver el password original en la llamada a función CALL EASYSOFT.004A56E0, pero en su momento se me ocurrió hacerlo de esa forma, para un futuro tutorial, si es posible, como funciona esa call y donde se encuentra el pass, sin la necesidad de obtenerlo por fuerza bruta.

Esto es todo por el momento.

Cualquier duda, vale consultar jajaja !!!

Saludos gente!!

No hay comentarios:

Publicar un comentario