SAMHJN'S LAZARUS CRACKME

CrackSLatinos

[0x00] OEP .................................................................................................................................................................. 3 [0x01] TARGET DESCRIPTION ...................................................................................................................................... 3 [0x02] TOOLS .............................................................................................................................................................. 3 [0x03] BLACK BOX TESTING ......................................................................................................................................... 4 [0x04] INSIDE THE CODE ............................................................................................................................................. 5 [0x05] MAKING THE KEYGEN ..................................................................................................................................... 18 [0x06] ENDING .......................................................................................................................................................... 19

2

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

[0x00] OEP Tercer tutorial que realizo para la lista de CrackSLatinos. Este crackme me ha sorprendido muy gratamente. No es demasiado difícil tracearlo, sin embargo, elaborar el keyGen me ha supuesto más esfuerzo del esperado.

[0x01] TARGET DESCRIPTION Nombre SHA-256 Protección Dificultad Plataforma Lenguaje

cm.zip 54511ccec228a0df007e0e8d81188907c6f6451030edef747cc21cb5efc3e6e8 Serial Number 1 - Very easy, for newbies Windows Unspecified/other

La única información que tenemos de este crackme es: This is a CrackMe which is written by Lazarus IDE.

Por lo tanto y ante la ausencia de objetivos, nos marcaremos los nuestros propios:  

Parchear la aplicación. Desarrollo de un KeyGen.

[0x02] TOOLS     

Ollydbg v1.10 Microsoft Visual Studio 2010 (C#) .NET Framework 3.5 RDG Packer Detector v0.6.9 2012 Vx-Edition Arquitectura:

3

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

[0x03] BLACK BOX TESTING Aunque no se especifica nada acerca del lenguaje empleado, la herramienta RDG nos dice esto:

Ejecutamos el crackme para hacernos una idea de lo que nos podemos encontrar:

Nos pide un Serial Number, así que le metemos uno, pulsamos [Check] y vemos que ocurre:

Como es de esperar, se nos indica que el serial es incorrecto porque el texto del botón ha pasado a [Wrong] y además éste queda inactivo. Pues ya tenemos claro que un primer vector de ataque puede ser buscar el string del botón.

4

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

[0x04] INSIDE THE CODE Cargamos el crackme en OllyDbg y buscamos el string Wrong en la memoria del proceso:

Como se puede ver, están los tres textos posibles que el botón puede tomar, así que ponemos un BP en la instrucción que moverá a EDX el string almacenado en la dirección 0052BDE8. Ejecutamos [Check].

5

el

crackme

pulsando

[F9], introducimos

http://longinox.blogspot.com.es

un

CrackSLatinos

serial

y

pulsamos

el

19 – 08 - 2012

botón

Como era de esperar nos para en el BP que hemos puesto:

Sabemos que por aquí llegamos al Wrong irremediablemente, sin embargo podemos seguir traceando el resto de instrucciones con [F8] hasta retornar a la parte de código en donde se llamo a la rutina que muestra el string Wrong:

Observemos un poco la zona en la que estamos:  

La instrucción que nos envía al fracaso es la CALL cm.00420B60. Llegamos a ella porque no satisfacemos la condición de que EAX sea 0x40 (64 en decimal) y que con toda seguridad signifique que la longitud del string tiene que ser de 64 caracteres.

Así que ponemos un punto de ruptura en la instrucción CMP EAX,40 y reiniciamos todo con [Ctrl] + [F2]. Ejecutamos el crackme con [F9], le metemos un serial con la longitud correcta y pulsamos [Check]:

Como suponíamos, ahora la comparación es correcta. Por lo tanto, comenzaremos a parchear el crackme, cambiando la comparación para que siempre sea verdadera, haciendo doble click en la instrucción a modificar e introduciendo la siguiente instrucción:

6

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

Quedando el código con este aspecto:

Siguiendo con la filosofía de ir a parar al primer BP que pusimos cuando no cumplamos las condiciones requeridas y de retornar a la parte de código que hizo la llamada a la rutina de mostrar el string Wrong, continuamos con la ejecución pulsando [F9] a ver que otras condiciones no cumplimos:

Vemos que ahora, la condición que no cumplimos es que algún carácter del Serial Number no es menor que 0x34, es decir, no menor que el carácter 4. Para no tener que ir repitiendo este proceso, comprobación por comprobación, nos situaremos en el comienzo de la rutina, le pondremos un punto de ruptura e iremos traceando instrucción por instrucción para ver que es lo que se va haciendo. Con el fin de no hacer muy tedioso este tutorial, en la siguiente captura, se muestra la rutina completa. Comentadas aquellas instrucciones que me parecen relevantes:

7

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

Conclusiones: 

 



Rutina que se repetirá 32 veces, siempre y cuando se vayan cumpliendo todas las comprobaciones. Puesto que el serial es de 64 caracteres, en cada iteración se comprobaran 2 caracteres de manera consecutiva. Asumimos que Serial[] es un puntero a nuestro Serial Number y seguiremos la convención usada en C, es decir, el primer elemento del serial tendrá índice 0. Las comprobaciones 3ª y 4ª, se aseguran de que los caracteres ubicados en índices pares {0, 2, 4, ..., 62} han de ser caracteres contenidos en el conjunto {‘1’, ‘2’, ‘3’}. Las comprobaciones 5ª y 6ª, se aseguran de que los caracteres ubicados en índices impares {1, 3, 5, ..., 63} han de ser caracteres contenidos en el conjunto {‘A’, ‘B’, ‘C’}. 8

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

Por lo tanto, para continuar parcheando este crackme, haremos los siguientes cambios en el desensamblado: 

3ª comprobación:



4ª comprobación:



5º comprobación:



6ª comprobación:

9

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

Terminada de analizar esta rutina, pasamos a analizar la siguiente rutina que se encuentra inmediatamente después a esta última y que está formada por un importante número de instrucciones:

2

10

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

11

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

12

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

Conclusiones: 

 

Esta rutina se ejecutara un total de 16 veces, siempre y cuando se pasen las comprobaciones que en ella se hacen. Puesto que el serial es de 64 caracteres, por cada iteración se comprobaran 4 caracteres de manera consecutiva. A esta agrupación de caracteres la denominaré grupo y lo trataré como un array de caracteres de 4 elementos. La 7ª comprobación determina que si el contenido de la memoria 56F2C25[ ] es igual a 0 vamos por mal camino. Este se calcula tomando los primeros dos caracteres de un grupo ( y ) y formando esta ecuación:

Como sabemos que los caracteres pares pueden tomar los valores {0x31, 0x32, 0x33} y los impares {0x41, 0x42, 0x43}, montaremos una tabla para que valores de inicio tenemos a partir de la dirección 56F2C25:

g[0] 0x31 0x31 0x31 0x32 0x32 0x32 0x33 0x33 0x33

g[1] 0x41 0x42 0x43 0x41 0x42 0x43 0x41 0x42 0x43

offset 0x5B 0x5C 0x5D 0x75 0x76 0x77 0x8F 0x90 0x91

56F2C25[ offset ] 0x02 0x00 0x02 0x00 0x00 0x00 0x01 0x00 0x00

Veamos esto en el Dump para que no haya dudas:

13

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

Es decir, que podríamos modelar lo anterior como una matriz en donde los caracteres numéricos hacen referencia a las filas y los alfanuméricos a las columnas, más o menos como se muestra a continuación:



 



A

B

C

1

2

0

2

2

0

0

0

3

1

0

1

La 8ª comprobación determina que si el contenido de la memoria 56F2C25[ ] no es igual a 0 vamos por mal camino. Sin embargo ahora el offset se hace tomando los dos últimos caracteres del grupo ( y ). La 9ª comprobación siempre se hace cierta, por lo tanto no la explicaremos. A partir de aquí se ejecutan ya no hay más comprobaciones del Serial Number, sin embargo hay dos bloques de instrucción que modifican la matriz anterior antes de reanudar la rutina en la próxima iteración. Una de ellas es la formada por la instrucción que sobrescribirá un valor de la matriz por otro:

Si nos fijamos, veremos que esta instrucción maneja dos . Uno que decidirá el origen del valor a copiar (EBX + EAX) y otro que decidirá el destino de la copia (ESI + EDI). Estos



se forman así:

La otra instrucción responsable de modificar la matriz, directamente escribe un cero con un determinado por los registros EBX + EAX:

14

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

Esto



se forma de esta manera:

No debemos olvidar que todos estos pasos hasta aquí explicados se repiten 16 veces, es decir, se hace una vez con cada uno de los 16 grupos que forma el Serial Number.

Por lo tanto, a continuación se continuar parcheando este crackme: 

7ª comprobación:



8ª comprobación:

muestran

que

modificaciones

hay

que

hacer

para

Terminadas todas las iteraciones sobre la rutina anterior, ya solo no falta analizar un último bloque de comprobaciones, que definitivamente darán por bueno o malo nuestro Serial Number:

15

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

Resumiendo estas cuatro últimas comprobaciones, lo que el autor ha querido, es que al finalizar la rutina anterior de las 16 iteraciones, la matriz quede de la siguiente manera:

A

B

C

1

1

X

1

2

X

X

X

3

2

X

2

Es decir, se tienen que transponer los 2s por los 1s. Las X son valores indiferentes. Nuevamente, los cambios para finalizar el parcheo del ejecutable son: 

10ª comprobación:



11ª comprobación:



12ª comprobación:



13ª comprobación:

16

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

Copiamos todas las modificaciones a un nuevo ejecutable, pulsando el botón derecho del ratón en la ventana del desensamblado y eligiendo Copy to executable >> All modification:

En la nueva ventana, pulsamos el botón [Copy all]:

Ahora, en la nueva ventana, pulsamos botón derecho y seleccionamos Save file y elegimos ruta y nombre para el nuevo ejecutable:

d 17

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

[0x05] MAKING THE KEYGEN Para generar Serials Numbers válidos emplearemos fuerza bruta, de manera que se vayan generando grupos que pasen la 7ª y 8ª comprobación y si el Serial final generado pasa las últimas 4 comprobaciones se muestra y si no, se repite el proceso. Esto anterior se ve mejor en el siguiente diagrama de flujo: INICIO

FIN

SN = EMPTY RESET MATRIZ INDICE = 0

NO

MATRIZ == INDICE < 16

1X1 XXX 2X2

NO

SI

SN OK!!

SI

GENERAR PAREJA NO

PAREJA VÁLIDA 7ª TEST

SI

GRUPO = PAREJA

GENERAR PAREJA NO

GRUPO += PAREJA SN += PAREJA

SI

PAREJA VÁLIDA 8ª TEST

MATRIZ[ ESI + EDI ] = MATRIZ[ EBX + EAX ]

MATRIZ[ EBX + EAX ] = 0

CONTADOR++

18

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

Veamos el resultado que hemos obtenido una vez implementado el algoritmo con un par de ejemplos:

[0x06] ENDING Tengo la sensación de que si el vector de ataque empleado para la resolución de este crackme no hubiera sido posible, entonces estaríamos hablando de un crackme de un dificultad mucho más elevada. Digo esto, porque primeramente intenté atacar al ejecutable mediante mensajería de Windows y me fue imposible. También intenté atacarlo poniendo MBP al Serial introducido, pero como ya os habréis percatado, basta con mirar el stack para ver que se crean infinidad de copias del Serial y esto lo hacen en concreto estas dos instrucciones:  

CALL cm.004039D0 CALL cm.004DA300

Haciendo su traceo muy difícil. Hasta el próximo reto!!

19

http://longinox.blogspot.com.es

CrackSLatinos

19 – 08 - 2012

Solución al reto samhjn's Lazarus CrackMe.pdf

[0x02] TOOLS. Ollydbg v1.10. Microsoft Visual Studio 2010 (C#). .NET Framework 3.5. RDG Packer Detector v0.6.9 2012 Vx-Edition. Arquitectura:.

2MB Sizes 3 Downloads 33 Views

Recommend Documents

01-ABSTRACT-RETO cancer.pdf
A pesar de la falta de evidencia sobre si el sis- tema multidisciplinar es mejor que otros, existen. numerosos datos que indican diferentes aspectos. beneficiosos ...

Solución reto The Wall.pdf
poco de “banner grabbing” a ver que conseguimos sacar. Page 3 of 17. Solución reto The Wall.pdf. Solución reto The Wall.pdf. Open. Extract. Open with. Sign In.

Lazarus and the Rich Man.trelby.pdf
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. Lazarus and the ...

Lazarus and the Rich Man.trelby.pdf
Sources said Carnovsky also raised. eyebrows in the office by returning. repeatedly from long lunches with. Washington visitors in different .... Lazarus and the Rich Man.trelby.pdf. Lazarus and the Rich Man.trelby.pdf. Open. Extract. Open with. Sign

PROPUESTA DIDÁCTICA -RETO 2.pdf
Nombre del recurso/contenido​: Google street view (PC). 2. URL (dirección web)​: https://www.google.es/map. 3. Breve descripción​. Google Street View es ...

the-lazarus-effect-by-h-j-golakai.pdf
Score, has been released in November 2015. She is currently an honouree of the Africa39 Project,. celebrating 39 of the most promising contemporary authors ...

Gmail - Horizonte 2020- Reto Social 2: Boletmn informativo, 24 de ...
Abierta la inscripción a la jornada y taller de propuestas del RS2 de Bioeconomía Convocatorias 2017. en CDTI (21 de noviembre). 2. Planificación de Jornadas regionales informativas y talleres de preparación de propuestas. 3. Recordatorio JTI de

AL MASIHYOUN fi Al Jazira Al Arabia2.pdf
Whoops! There was a problem loading more pages. Retrying... AL MASIHYOUN fi Al Jazira Al Arabia2.pdf. AL MASIHYOUN fi Al Jazira Al Arabia2.pdf. Open. Extract. Open with. Sign In. Main menu. Displaying AL MASIHYOUN fi Al Jazira Al Arabia2.pdf.

Umar Tilmisani - Hasan Al Banna Al Mulham Al Mauhub.pdf ...
Umar Tilmisani - Hasan Al Banna Al Mulham Al Mauhub.pdf. Umar Tilmisani - Hasan Al Banna Al Mulham Al Mauhub.pdf. Open. Extract. Open with. Sign In.

[Clarinet_Institute] Lazarus Method for Clarinet Part III.pdf ...
Page 3 of 162. [Clarinet_Institute] Lazarus Method for Clarinet Part III.pdf. [Clarinet_Institute] Lazarus Method for Clarinet Part III.pdf. Open. Extract. Open with.

AL-MAJALLA-AL-AHKAM-AL-ADALIYYAH-The ...
... (2 of 7) [12/31/2000 4:28:45 PM]. Page 3 of 224. AL-MAJALLA-AL-AHKAM-AL-ADALIYYAH-The-Ottoman-Courts-Manual-Hanafi.pdf.

al adab al mufrad.pdf
Page 3 of 182. al adab al mufrad.pdf. al adab al mufrad.pdf. Open. Extract. Open with. Sign In. Main menu. Displaying al adab al mufrad.pdf. Page 1 of 182.

Menu al ahd al gaded.pdf
یـمـكـن بـشـوربـھ الـفـراخ او بـشـوربـھ الـلـحـمـھ او بـشـوربـھ الـبـط. Page 3 of 13. Menu al ahd al gaded.pdf. Menu al ahd al gaded.pdf. Open. Extract. Open with.

Al Munjid fi al Lughah wa al I'lam by Louis Ma'luf.pdf
Al Munjid fi al Lughah wa al I'lam by Louis Ma'luf.pdf. Al Munjid fi al Lughah wa al I'lam by Louis Ma'luf.pdf. Open. Extract. Open with. Sign In. Main menu.