Crackme Splish [Nivel Newbie].

Iniciado por Paisterist, 21 Diciembre 2004, 17:45 PM

0 Miembros y 1 Visitante están viendo este tema.

Paisterist

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:
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

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

Ðevastador

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.

Paisterist

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

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