Si lo ejecutamos, nos dirá que la primera fase es introducir la contraseña. Ponemos cualquier cosa y nos dirá que “Something went wrong…” y finalizará. Una buena idea sería buscar la cadena “Enter Password To Continue :” y localizar dónde hace la comprobación de la contraseña y trucarla. Abrimos el IDA Pro y seleccionamos “PE Executable”. En la ventana “Strings Window” veremos esa cadena, hacemos doble click y luego doble click en el “Data XREF” que nos muestra para ir a la zona de código. Veremos algo de este estilo:
Si os fijáis, en esa imagen os marco un “jmp”, es decir, un salto incondicional (vamos, por cojones) a la parte que nos dice que hemos fallado. ¿Qué pasaría si anuláramos ese salto? Probemos.
La forma más cómoda de anularlo es hacer un click sobre él e irse a la sección “Hex View-A” de IDA Pro. En ese momento veremos resaltado el trozo hexadecimal correspondiente a ese salto. La idea es anularlo, es decir noopearlo. Para ello anotamos una cadena larga hexadecimal para encontrar ese trozo en el Hex Workshop, yo usé “E92C010000C745F400000000”. Abrimos el Hex Workshop, cargamos el crackme, buscamos esa cadena y reemplazamos el trozo “E9 2C 01 00 00” con 90, es decir “90 90 90 90 90” y lo guardamos como “CrackMe#2.exe”.
Si lo ejecutamos veremos que sigue diciéndonos que algo ha ido mal ¿dónde hemos fallado? Abramos IDA de nuevo, pero esta vez con el crackme modificado.
Nos volvemos a situar en la cadena “Enter Password To Continue :” y vemos que el “jmp” ha desaparecido y ahora tenemos nop’s. Debe haber algo más por hacer, veamos que es. Como ahora no hay salto, el programa debe seguir su flujo hasta el siguiente salto:
El salto que os marco, además de ser el primero, lleva a una zona con el texto “Stage 1 Completed”… es decir, la que queremos. Es un “jg”, es decir, sólo salta si la comparación anterior es mayor. Una buena idea sería cambiar el “jg” por un “jmp”. La codificación hexadecimal de “jg” es “7F” y la de “jmp” es “EB”. Es decir, hacemos click en “jg” y vamos a la vista hexadecimal de IDA, apuntamos una cadena un poco larga desde ese punto, la buscamos en HexWorkShop y cambiamos el 7F inicial por un EB. Lo guardamos como “CrackMe#3.exe” y lo probamos.
Sigue sin funcionar :( Lo abrimos con IDA Pro para ver qué ocurre. Nos volvemos a situar en “Enter Password To Continue :” y vemos que el salto que antes era “jg” ahora es “jmp” ¿Qué pasa entonces? Sabemos que tiene que ir al lugar que indique ese jmp, así que hacemos doble click en esa localización y miramos que ocurre en ella:
Vemos que hay un “jnz”, salto si no es cero, a la parte del código que muestra el fallo. ¿Qué hacemos? Según lo que hemos visto hasta ahora, la idea sería nopear el jnz para que no saltara nunca. Como eso sería muy aburrido vamos a intentar hacerlo sin tocar el “jnz”.
Podéis ver que antes del salto hace una comprobación de eax con eax, es decir, si logramos que eax tenga valor 0 antes de ese test, no hará el salto. ¿Qué os parece si cambiamos la instrucción call por un “XOR eax, eax”? Si nuestras suposiciones son correctas, eso debería funcionar. Nos ponemos encima del cmp y vamos a la vista hexadecimal, habría que cambiar “E858060000” por “33C0909090”. Lo guardamos como “CrackMe#4.exe”, lo probamos y:
¡Perfecto! Aun queda la fase 2 y la 3… aunque con esas iremos más rápido porque ya estaremos más familiarizados con el manejo de IDA y Hex Workshop.
Ya sabéis, cualquier duda, comentario, sugerencia, etc… será bienvenido ;-)
1 comentario