Artículo · Ingeniería Inversa

Parchando el software Softdat

Rafael PeruCrackersRafael PeruCrackers 6 min de lectura

Información

En este capítulo veremos las medidas de seguridad que presenta un crackmes  o software, algunas veces nos solemos topar con algunos desarrolladores creativos, creando su propias medidas de seguridad para evitar depurar un software, sin embargo como siempre un buen análisis ayuda a que podamos vencer esta seguridad y asi poder encontrar la clave correcta.

 

Anti-crackme

https://mega.nz/#!UAJUFLbC!W_VQp70CQg93d7mo4bdcXfjdJnY39pXeqmtktUiSh8U

Tamaño

958 Kbytes

Nivel

Basico

Team

CrackSlatinoS, PeruCrackers, EntreAmigos CLS y BTA.

 

Realizando el ataque

 

Como es cotidiana en todos los tutoriales se procederá obtener información del reto en este caso usaremos RDG Packer, es muy sencillo de utilizar e intuitivo, veremos que se desarrolló en MASM/TASM y que no tiene medida de seguridad. Ver Figura 1.

 

 

Fig. 1 RDG PACKER obtuvo MASM

Ejecutemos el crackme para poder ver con que nos estamos topando, así que a primera vista nos solicita que ingresemos un serial o clave en este caso agregare: abcdefg y nos mostrara el texto That is incorrect. Ver Figura 2. 

 

 

Lo curioso de este reto es su nombre anti-crackme, así que depuramos el crackme en nuestro depurador x32dbg, luego ejecutemos con la tecla F9 o play depurando el reto y nos mostrara un mensaje indicando que no ejecutemos el crackmes con un depurador y procederá a cerrarse al detectarlo. Ver Figura 3.

 


 

 

Tener en cuenta que debemos apuntar nuestros datos obtenidos en un bloc de notas: Ver Figura 4.

 

 

Fig. 4 Nos muestra datos obtenidos.

Buscamos las cadenas de texto o string del  reto-anticrackmes. Ver Figura 5.

 

 

Fig. 5 Buscando String o cadena de texto.

 

 

 

Encontramos las cadenas de texto y agregamos un BreakPoint en cada una de ellas, presionando la tecla F2 podrás agregar BP. Ver Figura 6.

 

 

Fig. 6 Agregando BP.
Procederemos analizar la primera línea con dirección 00401235, clic derecho -> Mostrar en el desensamblador o doble clic. Ver Figura 7. 

 

 

 

Fig. 7 Analizando el primer BP.

 

 

Como veras lo que se encuentran sombreado con rojo son los BreakPoint, vamos a la dirección 00401233, donde buscaremos la referencias.  Ver Figura 8.

 

 

Fig. 8 Analizando de donde es invocado ese código.

 

 

Para brindarnos un poco de ayuda presiona la tecla G o en la pestaña Gráfico, nos mostrará en cuadros las funciones y saltos que realiza cada uno de una manera ordenada. Ver Figura 9.

 

 

Fig. 9 Manera estructurada nos muestra el código.

 

 

 

Las referencias son las funciones o saltos para llegar al comando PUSH 0, para ello clic derecho en la línea PUSH 0 -> Encontrar referencias a -> Dirección(es) Seleccionada(s). O tecla Ctrl + R. Ver Figura 10.
 

Fig. 10 Pasos para llegar a encontrar las referencias.

Veremos que dos funciones CALL y un salto JE, agregamos un BreakPoint y luego veremos cada uno de las funciones, en este tutorial seré puntual para no escribir mucho. Ver Figura 11.

 

 

 

Fig. 11 Las referencias encontradas.

 

 

Como indique iremos puntual, así que la función analizar es la primera con dirección 004010BC. Ver Figura 12.

 

 

Fig. 12 Ir a ver el Código de la primera Referencia.

Como vera si entramos al primer CALL anti-crackme.401233, nos llevará al anti-dubbger, cerrando nuestra aplicación y así evitando el análisis del reto, así que agrego un BreakPoint en la dirección 004010B9 que se encuentra el salto JNE. Ver Figura 13.

 

 

Fig. 13 Debemos evitar los saltos que nos lleva al Antidebugger.

 

 

Luego ejecutamos el crackmes con F9 o play, vera que se detuvo en el salto que agregamos nuestro BP, y realizara un salto al CALL donde se cerrará si entra a la función, lo que debemos hacer es evitar este salto, de lo cual lo nopeamos.  Ver Figura 14.

 

 

Fig. 14 Evitar Salto.

Los pasos para Nopear es –> Binario -> Rellenar con NOPs. Ver Figura 15.

 

 

 

Fig. 15 Pasos para Nopear.
O presionamos la bandera ZF para que cambien de 0 a 1, para evitar los saltos en este caso si desea puede parcharlo o este método de jugar con las banderas. Ver Figura 16
 
Fig. 16 Evitando el Salto. 
 
Este paso es para evitar la medida de seguridad del antidebugger, al no saltar presionamos F9 o PLAY y se ejecuta el Anti-crackme. Ver Figura 17.
 
Fig. 17 Ejecuto evitando el antidebugger.
 
Así que escribiré en el bloque de texto el serial: abcdefg
En este caso agregare un BreakPoint en los puntos estratégicos para realizar la traza adecuada y así poder obtener el serial correcto, Ver Figura 18.
 
Fig. 18 Se agregó BP en los puntos estratégicos.
 

 

Lo que significa:

 

 

 

El contenido de [403080] lo mueve al registro EAX, es decir efg : 65 66 67
El contenido de [403060] lo mueve al registro EBX, es decir s incorrect : 73 20 69 6E
Y luego compara el primer byte : CMP AL, BL
AL:65:E == BL:73:s; puedo intuir que si ambos son iguales saltara a la siguiente validación, evitando el CALL donde se encuentra el BAD BOY. Ver Figura. 19
 
Fig. 19 El primer serial.
 
Dentro del CALL que deseamos evitar se encuentra el BAD BOY, así que se debe evitar. Ver Figura 20. 
 

Fig. 20 Evitando Call con dirección 00401287.

 

En este caso es el mismo análisis así que vemos que compara:

AL:66:f == BL:21:! Ver Figura 21. 

 

 

Fig. 21 Obteniendo serial

 

Presionamos F8 hasta llega a la dirección 00401183, compara:

AL:63:c == BL:65:e Ver Figura 22.

 

 

Fig. 22 Análisis del serial. 

 

Compara:

AL:64:d == BL:63:c Ver Figura 23

 

 

Fig. 23 Análisis del serial. 
Compara
AL:61:a == BL:73:s Ver Fig. 24

 

 

 

Fig. 24 Análisis del serial.

 

Compara:

Al:63:d == BL:63:c Ver figura 25.

 

 

Fig. 25. Ultima clave.

 

Al final la clave seria en esta orden:

a : s
b:
c : e
d : c
e : s
f : ! |
g :

Si lo ordenamos seria: s ecs! Es decir sXecs!X

Escribimos la clave obtenida en el bloque de texto y veremos si es la correcta. Ver Figura 26.

 

 

Fig. 26 Funciono con la clave asignada.

 

Conclusión:

 

Las medidas de seguridad ofrecidas en este reto fueron vencidos por el Reversing y con un análisis básico.
Se puede aplicar medidas de seguridad mucho más complicas con empaquetarlo. 
 
Bueno el día de ayer (31/01/18), estuve viendo los retos propuesto por la comunidad de CrackSlatinoS, y el reto que me llamo la atención fue de SoftDat, donde al intentar depurar el crackme, detectaba nuestro ataque y automáticamente cerraba el depurador, evitando así nuestro análisis, me pareció interesante este reto ya que es una medida de seguridad que se implementó, así que veamos cómo podemos evitar estas medidas, antes de seguir un saludo a Softdat por el reto, a f9 (Farenain), Apuromafo, Davicorm, Dani, Alejandro Debian y al Maestro Ricardo Narvaja.

 

¿Quieres aprender estas técnicas en profundidad?

Continúa tu ruta con Pentesting .

Rafael PeruCrackers

Escrito por

Rafael PeruCrackers

Estudiante de la ingenieria Inversa usando las herramientas de Ollydbg y el actual IDA PRO, actualmente me encuentro investigando sobre Creacion de Exploit, con animo de ayudar a las personas que les interesa el mundo del reversing, :)