Introducción a la Ingeniería Inversa Capitulo 2

Post58 nn

Introducción


En el capítulo anterior observamos como saltamos la validación del software encontrando el “BAD BOY”, para eso nos habíamos dirigido en la zona caliente, sin embargo podemos encontrar la contraseña, sin realizar cambios en el software, también veremos los famosos NAG, estos son las ventanas molesta que nos hace recordar que tenemos un software de prueba o que caducara en tal día, y la validación por CD-ROM.


Herramientas:


 * Ollydbg (Adjuntare el enlace con otro OLLYDBG más completo y configurado

* https://mega.nz/#!hQoHkYxJ!4KjDNf2nunIK0jCpI_BtbO9Q2VLQ2vXadRDg8GMyoOY ) 

* RDG Packer Detector v0.7.6 ( http://www.rdgsoft.net/ )

* Crackmes (https://mega.nz/#!UUIWGLiK!BjKdPRQMnMxiVyPe-yzoSRxKyRh89ZsjEXwjlzqoY1U)

* Ganas de Aprender

Al Ataque

Antes de comenzar vamos a obtener el serial del software que hemos analizado es decir el crackme 1.0, para ello abriremos el OLLYDBG  y luego pasamos a desensamblar el crackme 1.0, para los que se dieron cuenta algunos programadores agrega las credenciales en el string, pero suele ser engañoso y puede liberar  un código malicioso, por eso se recomienda que al momento de crackear un software comercial, debe aplicarlo en una Máquina Virtual, en este punto podemos ver todos los string que lleva el crackmes, tener en cuenta que algunos pasos me saltare, debido a que sería muy largo ver paso a paso (Clic derecho -> Search For -> All referenced text string), como veremos y con intuición la palabra “cannabis”, lo probamos para validar si es la correcta o no.


Y eureka, encontramos el password, pero veremos el metodo mas detallado.



Pero algunas veces la clave no lo encontraremos en las referencias (Text strings referenced), ¿Quien dijo que iba ser fácil?, vamos a resolverlo juntos, vayamos a la zona caliente, como verán en el área desensamblado, se ve mucho más ordenado, debido a que esta versión fue editado por un grupo de crackers, como observamos verán que la dirección 00401267 es llamado por la condicional JNZ SHORT CRACKME.00401267 con direccion 0040124F, por lo tanto este salto decide si salta al “BAD BOY” o “GOOD BOY”, agregamos un BP (BreakPoint), para detenernos en la dirección 0040124F.


En este punto vamos analizar de abajo hacia arriba (jnz, or y call), como sabrán el JNZ es el salto que realiza al “BAD BOY”, el OR EAX, EAX es la condición que debe tener para saltar o no, es decir si: EAX = 0 entonces no salta, si es diferente de cero, salta al “BAD BOY” y el CALL es el proceso que realiza para que EAX sea Cero o no. 

Como verás.


Para ello debemos agregar un BP en la dirección 00401248, luego “F9”, e intentamos registrarnos, de lo cual se detendrá o romperá en la dirección 00401248, para lo que tiene experiencia se dara cuenta que el API lstrcmpA, comparar dos string, en este caso la palabra “cannabis” y “1234567890 (Nuestra clave)”, podemos probar la palabra “cannabis”.



Como veremos en la dirección 00401243 es el string1 de nuestra clave ingresado “cannabis”, de lo cual vamos a tracear hasta llegar a la dirección 0040124F en donde veremos la linea de codigo JNZ SHORT CRACKME.00401267, como le comente dicho salto es hacia el “BAD BOY”, ahora veremos que el flag Z=1, quiere decir que no saltara y seguira a la siguiente linea, o dirección (GOOD BOY).



Lo ejecutamos o presionamos “F9”.




AL ATAQUE 2 – NAG 

Quizas algunos ya se encontraron con estas ventanas incomodas indicando que nos registremos o nos muestra una publicidad, en los software comerciales, en esta parte observaremos como evitar que no aparezca dicha ventanas. Veremos un crackme hecho por TDC, primero ejecutamos el software.  , lo primero que veremos es una ventana que nos indica que nos registremos para obtener el soporte, de lo cual se denomina NAG, luego de aceptar la ventana nos aparecera.



Aca veremos dos detalles interesantes, en el Label Status, nos muestra: “Nag not removed”, es decir deemos remover dicho NAG.



Ahora veamos en qué lenguaje se desarrolló este crackmes, haber debemos seguir recolectando información para ver, que otro método se puede utilizar para atacar el software, si , hay otros depuradores que nos ayuda a reversear, bueno vamos a utilizar RDG Packer Detector v0.7.6, para ver que nos muestra, observamos que se desarrolló en el lenguaje MASM32 y nos muestra que no tiene medida de seguridad “Nothing”, si utilizamos esta herramientas en software comerciales, verás que la mayoría no tiene medida de seguridad, excepto por isdebuggerpresent, ya que esta medida es común encontrarlo pero es la medida de seguridad más simple, incluso  en el Ollydbg SND que adjunte como enlace tiene agregado el plugin para burlarnos de esta seguridad.



Ahora que sabemos en que lenguaje se desarrolló, procederemos a depurar nuestro crackme, como veremos se utilizara el método de parcheo, ya debemos tener claro los saltos así que busquemos el string de la primera ventana “NAG”. (Clic derecho en el area de desensamblador -> Search for -> All referenced text strings), como veremos en la dirección 004010AE se encuentra el string de nuestra ventana, hacemos doble clic para ir al código.



En este punto se mostrará que el salto que nos ayudará eliminar el NAG se encuentra en la dirección 0040108B, como ya explique la flecha roja nos muestra el salto que realizará.



Ahora para variar un poco veremos otro método para encontrar el salto, nos posicionamos en la dirección 004010A7 y presionamos CTRL + R o (Clic derecho en la línea de comando -> Find referenced to -> Select command) , como veremos en la ventana References in nag:text to 004010A7, nos  muestra la línea donde fue invocado el código 004010A7 PUSH este línea de comando es el comienzo del “BAD BOY”.



Luego de aprender una nueva forma de encontrar el salto, procedamos a parchar el crackme, como veras la idea en esta parte es quitar el NAG, así que cambiemos el salto JE por JNE.



Como se muestra ya no realizará el salto y no nos mostrará el “NAG”.



Guardamos los cambios realizados (Clic derecho -> Copy to executable -> All Modifications), luego Copy all,



Luego hacemos clic derecho en cualquier parte del area y escogemos Save File, en mi caso lo guarde con el Nombre NAGPATCH.exe


Ejecutamos el crackme parchado y por fin,  Ya no nos muestra el NAG.




Lo que falta en este crackme es parchar el registro para que quede full, vayamos a ver como se realiza, primero debemos ir a la zona caliente, para ellos nos guiamos en buscar el texto, Dirty crack! Nag removed not registered!, como veremos encontramos 2 string de lo cual iremos al primero con la dirección 00401096.



En este punto ya entendieron que los saltos son la parte más importante, veamos la dirección 00401094, si o si debe realizar un salto, para que nos muestre el “GOOD BOY”, agregamos tres Breakpoint “F2”, en las direcciones 00401082, 0040108B y  00401094, para luego presionar “F9”.



Veremos que se detiene en la dirección 00401082, de lo cual no salta, así que sigamos traceando con “F8”, hasta llegar a la dirección 0040108B.


Al llegar a la dirección podemos ver que no se realiza el salto, supongamos que si se realice el salto y veremos que se dirige al “BAD BOY”, es decir a la dirección 004010A7, como no es el caso seguimos traceando, hasta llegar al próximo salto.



Como observamos, si se realiza el salto veremos el mensaje “Clean crack! Good Job!”, por lo tanto cambiemos el salto JE con dirección 00401094 por JNE.



Al cambiarlo JNZ salta al “GOOD BOY”, presionamos “F9”, para ver y confirmar lo que realizamos.



Observamos que aparece en el Label Status: Clean crack! Good Job!, de lo cual paso la segunda prueba, se preguntaran ¿Porque?,  lo que falta es la tercera modificación, si hacemos clic en el botón Re-Check. Nos mostrara en status: Nag not removed!, quiere decir que nos falta por parchar un salto más.


Vayamos al ultimo salto para ello recuerde que debemos ir al segundo string Dirty crack! Nag removed not registered!

En mi caso agregue tres BreakPoint en la dirección 004010F2, 004010FB y 00401104, esta última dirección, como ya lo dedujeron es el salto que debe cambiarse de JE por JNE, procedamos hacer clic nuevamente en el botón Re-Check.



Veremos a simple vista que se detuvo en la dirección 004010F2 y que no se realizara el salto, si se realizara nos mostraría el mensaje de Dirty Crack! Nag removed not registered, de lo cual no queremos ese resultado, sigamos traceando con “F8” o  .



En la dirección 004010FB, se realiza el salto hacia el “BAD BOY”, de lo cual no deseamos que aparezca por lo tanto lo cambiamos por un JNE.



Vemos que ya no se produce el salto y seguirá ejecutando la siguiente linea es decir la dirección siguiente sera 004010FD.



Ahora observamos que la dirección 00401104 con salto JE, debería salta a “Clean crack! Good Job!”, para ello debemos cambiarlo a JNE.



Al final se realizó el cambio y procedemos a guardar todo los cambios, en mi caso lo guarde como nagpatchfull.exe, luego pasare a ejecutar el crackme y realizar la validación, teniendo el crackme full.



Ejecutamos el crackmes nagpathfull.exe, de lo cual nos agradece por haber registrado el crackme (jiji). Y reto vencido.






Artículos que te pueden interesar

Perfil Samuel Esteban
Creado alrededor de 1 año | leído hace alrededor de 10 horas
Inyección SQL con Mysql en profundidad.  - Backtrack Academy

Inyección SQL con Mysql en profundidad.

Siguiendo con las inyecciones SQL, en esta oportunidad veremos en detalle el funcionamiento de las inyecciones SQL orientadas al motor de base de datos Mysql. M...


Profile Omar Jacobo Muñoz Veliz
Creado 12 meses | leído hace 14 minutos
Conociendo la herramienta Evil Foca - Backtrack Academy

Conociendo la herramienta Evil Foca

La herramienta Evil Foca fue desarrollada por el equipo de informatica64 uno de sus enfoques que podemos darle es para realizar ataques a redes desde MITM hasta...