elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Informática
| |-+  Tutoriales - Documentación (Moderadores: r32, ehn@)
| | |-+  Crackme Splish [Nivel Newbie].
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crackme Splish [Nivel Newbie].  (Leído 7,170 veces)
Paisterist

Desconectado Desconectado

Mensajes: 97



Ver Perfil WWW
Crackme Splish [Nivel Newbie].
« en: 21 Diciembre 2004, 17:45 pm »

Bueno che, acá les dejo mi primer tuto de ingeniería inversa...
------------------------------------

Para resolver este crackme vamos a usar el OllyDbg (convenientemente la versión 1.10), un editor hexadecimal (recomiendo el WinHex) y el crackme que lo pueden descargar de http://neosecurityteam.org/crackmes/Splish.exe .

   Para hacer el crackme, vamos a ver en dónde se comprueban los datos, cómo nos manda a la zona donde nos muestra el mensaje de error y dónde está la zona satisfactoria.
   Lo primero que hacemos es abrir con el OllyDbg el archivo Splish.exe y nos aparecerá el código. Para saber donde está la zona en que nos muestra el error, tendremos que buscar todos los strings que imprime el programa. Para esto, primero ejecutamos el programa, ponemso cualquier cosa en la parte de Hard Code y cuando apretamos el Check Hardcoded nos muestra el mensaje "Sorry, please try again". Para encontrar todas las cadenas impresas por el programa, en olly hacemos click derecho, "Search For", "All referenced text strings". Se nos abre una nueva ventana y encontramos el preciado mensaje. Hacemos doble click y nos aparece algo como esto:
Código:
0040137B  |> 8038 00        /CMP BYTE PTR DS:[EAX],0
0040137E     74 0C          JE SHORT Splish.0040138C
00401380  |. 8A08           |MOV CL,BYTE PTR DS:[EAX]
00401382  |. 8A13           |MOV DL,BYTE PTR DS:[EBX]
00401384  |. 38D1           |CMP CL,DL
00401386  |. 75 4A          |JNZ SHORT Splish.004013D2
00401388  |. 40             |INC EAX
00401389  |. 43             |INC EBX
0040138A  |.^EB EF          \JMP SHORT Splish.0040137B
0040138C  |> EB 2F          JMP SHORT Splish.004013BD
0040138E  |. 43 6F 6E 67 72>ASCII "Congratulations,"
0040139E  |. 20 79 6F 75 20>ASCII " you got the har"
004013AE  |. 64 20 63 6F 64>ASCII "d coded serial",0
004013BD  |> 6A 00          PUSH 0                                   ; /Style = MB_OK|MB_APPLMODAL
004013BF  |. 68 0A304000    PUSH Splish.0040300A                     ; |Title = "Splish, Splash"
004013C4  |. 68 8E134000    PUSH Splish.0040138E                     ; |Text = "Congratulations, you got the hard coded serial"
004013C9  |. 6A 00          PUSH 0                                   ; |hOwner = NULL
004013CB  |. E8 78030000    CALL <JMP.&USER32.MessageBoxA>           ; \MessageBoxA
004013D0  |. EB 13          JMP SHORT Splish.004013E5
004013D2  |> 6A 00          PUSH 0                                   ; /Style = MB_OK|MB_APPLMODAL
004013D4  |. 68 0A304000    PUSH Splish.0040300A                     ; |Title = "Splish, Splash"
004013D9  |. 68 67304000    PUSH Splish.00403067                     ; |Text = "Sorry, please try again."
004013DE  |. 6A 00          PUSH 0                                   ; |hOwner = NULL
004013E0  |. E8 63030000    CALL <JMP.&USER32.MessageBoxA>           ; \MessageBoxA

Como es de suponer, para mandarnos a una u otra zona el programa tendrá que comprobar los datos, evaluarlos (cosa que se pueda hacer con una sentencia como un if). La instrucción que importa es esta: JE SHORT Splish.0040138C. JE es una salto condicional de ASM que se cumple si la condición es verdadera. Es decir, la instrucción nos está diciendo que si la condición anteriormente declarada en el código, entonces se saltará a 0040138C. En esta dirección se hace un salto directo con la instrucción JMP a la parte donde nos muestra el mensaje "bueno". Entonces, lo que podemos hacer es alterar el código para que se produzca lo contrario: si no se cumple la condición, mostrá el mensaje "Congratulations...". De esta manera, siempre nos mostrará el mensaje satisfactorio salvo que acertemos los datos (muy poco probable). Para invertir el salto, cambios el JE por un JNE, salto que se usa cuando se quiere saltar a otro offset si no cumple la condición. Hacemos click derecho en el offset del salto, ponemos "Assemble" y cambiamos el JE por JNE.
   Vamos a la parte de debug, ponemos run y voilá, nos dice que el código es correcto. Probamos con la otra parte pero nos dice que el código es correcto.
   Buscamos el mensaje que nos muestra (igual al de la otra parte) y encontramos una zona similar. Buscamos el salto cercano, un JE y lo cambiamos de la misma manera por JNE. Ejecutamos el programa y ya tenemos todo crackeado!!!

-----------------------------------------------------------------------------

Modificando el programa para que quede crackeado.

   Acá entra el editor hexadecimal. Lo que vamos a hacer es cambiar el valor hex de los offset donde están los saltos que modificamos. Para eso miramos el valor hexadecimal en el olly (74 0C para el primero, 74 0F para el segundo). Abrimos el WinHex, vamos a Open, abrimos el Splish, vamos a Search y después a Find Hex Values. Ponemos las direcciones antes mencionadas
y cuando las encontramos cambiamos el 74 (valor de JE en hexa) por 75 (valor de JNE en hexa). Una vez que lo hicimos con las dos cadenas guardamos el archivo (si tenemos la versión de evaluación no vamos a poder grabar) y listo. Abrimos el programa y no tiene ninguna protección!.

Original: http://200.58.112.84/~moneos/index.php?page=articulos&id=56

Salu2


« Última modificación: 22 Diciembre 2004, 05:07 am por Paisterist » En línea


Artículos, exploits, ingeniería inversa, seguridad informática, retos y mucho más.
Ðevastador
Usuario Baneado


Desconectado Desconectado

Mensajes: 1.854

Usuario Baneado


Ver Perfil
Re: Crackme Splish [Nivel Newbie].
« Respuesta #1 en: 23 Diciembre 2004, 00:10 am »

No hagas esto, no es para esto el Foro. Si quieres que todos conozcan tus tutoriales, súbelo a algún host y pídele al Moderador que lo publique en el post que corresponde; pero no andes haciendo publicidad así, que llenas el Foro de *****... y no es para esto.


En línea

Paisterist

Desconectado Desconectado

Mensajes: 97



Ver Perfil WWW
Re: Crackme Splish [Nivel Newbie].
« Respuesta #2 en: 23 Diciembre 2004, 07:36 am »

man, llenar el foro de ***** por aportar?. Esto lo postee acá, y después me lo mandaron a ing inversa y después acá... osea, por lo que sé este foro es para tutoriales y no es *****.

Salu2
En línea


Artículos, exploits, ingeniería inversa, seguridad informática, retos y mucho más.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Nivel 1/10] CrackMe básico C #4 « 1 2 »
Ingeniería Inversa
cibergolen 12 9,141 Último mensaje 30 Diciembre 2012, 22:42 pm
por cibergolen
[Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes) « 1 2 »
Ingeniería Inversa
cibergolen 15 7,268 Último mensaje 29 Marzo 2015, 03:07 am
por Flamer
[Reto] CrackMe I (Nivel: Básico / SuperFácil) « 1 2 »
Ingeniería Inversa
jaxoR 13 6,616 Último mensaje 28 Abril 2015, 20:21 pm
por Arkangel_0x7C5
[Reto] CrackMe II (Nivel: Fácil) « 1 2 »
Ingeniería Inversa
jaxoR 12 7,068 Último mensaje 3 Mayo 2015, 19:56 pm
por ThunderCls
Crackme .NET con solucion, nivel medio, sin uso de debuggers
Ingeniería Inversa
sadfud 1 2,513 Último mensaje 18 Diciembre 2015, 14:51 pm
por apuromafo CLS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines