11 jul 2012

Crackme, jugando con un serial y OllyDBG

La ciencia de la ingeniería inversa es algo que me tiene fascinado, y es que cuando empiezas a meterte en el tema de malware al final acabas en la ingeniería inversa es, inevitable. Además suele ser un tema que la gente a veces va un poco perdida y no sabes por donde empezar, además hace falta conocer lenguaje ensamblador y no todo el mundo está dispuesto, me he encontrado casos.

Yo cuando empecé a mirarme el tema al final creí que lo mejor era ir aprendiendo lenguaje ensamblador mediante ejercicios prácticos sencillos.

Antes de empezar le quería dar las gracias a mi Orozlan, por ayudarme día a día con los entresijos del malware y la ingeniería inversa.

En el ejercicio de hoy tenemos un programa que nos pide de introducir un serial. El programa lo comprobará y nos dirá si es correcto o no. Así que nosotros lo que haremos será, primero parchear el programa en memoria para que cualquier cosa que metamos nos lo de como correcto. Y 2 descubrimos el serial dentro del programa.

Necesitaremos OllyDBG para hacer esto, así que descargarlo de aquí

Abrimos el programa que comprobará el serial:

Metemos un serial cualquiera para ver como se comporta el programa, por ejemplo 111111

ya tenemos el error que nos muestra el programa.

Ahora abrimos OllyDBG, y empezamos, si es la primera vez que abrís OllyDBG, no os preocupéis por las cosas que no entendáis.

Cuando abramos OllyDBG buscaremos primero ese mensaje de error que nos salía cuando hemos metido el serial. Así que buscaremos todos los strings del binario.

Esto nos devolverá los siguientes strings

Si os fijáis vemos los mensajes que da la aplicación, podemos ver cuando te da el mensaje de que el serial no es correcto, y cuando da el mensaje que es correcto.

Ahora lo que haremos es ir a la parte que mas nos interesa del código que estamos mirando. No hace falta entender cada instrucción de momento.

Hacemos un clic en la linea que da error, miremos la parte que mas interesa:

Estas serían las instrucciones más básicas vamos a explicarlas un poco para entender que hace.

CALL: Llama/Salta a la dirección/función indicada

PUSH: Guarda el valor en la pila.

JMP: Salta a la dirección indicada.

Para empezar lo que haremos será parchear el programa  en memoria para que metamos lo que metamos nos de serial correcto.

Así que empezamos:

La comprobación que haría el programa es, si el serial es OK, pues muestra X mensaje. Si el serial es NO OK, muestra tal otro.

¿Sencillo no?

Así que lo que haremos será cambiar la instrucción que se encarga de eso.

Nos colocamos en la posición 004010FF.

Lo que haremos será cambiar JE salta si es igual por su contrario JNE salta si no igual

Ahora haremos assemble en la posición de antes

Lo cambiamos por

Que quede claro, esto solo cambiará la dirección de la memoria, de manera que no modificará el binario original.

Pero servirá para ver lo que queremos hacer, cambiamos el valor y guardaremos el binario.

Cuando hagamos el assemble nos quedará así

Ahora ejecutaremos el programa para que veáis que acepta cualquier serial.

Así apretamos F9, ejecutará el programa introducimos cualquier serial y….

UALA, ya tenemos lo que queríamos.

Si queremos guardar el binario, hacemos clic derecho y hacemos

Como solo hemos hecho un cambio escogemos selection. Para guardarlo hacemos save to file y guardamos el binario

Una vez que guardemos el binario, podremos ejecutarlo y introducir cualquier cosa que nos dará OK en todos casos

Una vez guardado, lo podremos ejecutar y hacer la prueba

En la siguiente entrega buscaremos el serial en el binario.

Espero que os haya gustado.

5 comentarios:

  1. Buena practica para habituarse :) Ahora me pondre hacerla.Aunque si hubierais dejado el .exe del serial hubiera sido un regalazo jajaPor cierto enorabuena por vuestro proyecto. Ahora que es veranito me lo mirare mas detenidamente.

    ResponderEliminar
  2. Chula explicacion, como han cambiado los tiempos, ahora se puede grabar el binario desde la memoria!!!!! Los pinos que teníamos que hacer antaño para dejar esos cambios fijos parchando sobre los exe o dll :-). De todos los un caso bastante sencillo, pero chulo. Muy bien explicado enhorabuena.Saludos

    ResponderEliminar
  3. Cuando dices "ahora abrimos OllyDBG", a continuación hay que hacer algo que no se que es: o "open" o "attach"¿Alguien me puede sacar de dudas"Gracias

    ResponderEliminar
  4. Hola,Gracias por los comentarios :PJoan has de hacer Open :)

    ResponderEliminar
  5. [...] Fonte:FluProject Gostar disso:GosteiSeja o primeiro a gostar disso. [...]

    ResponderEliminar