Crackeando aplicaciones en VB con OllyDBG

Iniciado por Stuxnet, Julio 08, 2012, 03:50:21 PM

Tema anterior - Siguiente tema

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

Julio 08, 2012, 03:50:21 PM Ultima modificación: Noviembre 14, 2014, 09:25:19 AM por Expermicid
Primeros pasos
Lo primero que aremos sera observar nuestra victima (el crackme), hasi que lo abrimos:


Lo primero que nos sale al correr el programa es esta molesta ventanita, mejor conocida como NAG, esta ventanita nos sale cuando no tenemos el programa registrado...


sigamos observando el crackme...
Lo que vemos es un textbox, un botón abajo... y al ultimo un label que dice "Sin Registrar"...
Me llamo la atencion el boton, porque esta desabilitado, le doy click... y no pasa nada, esto quiere decir que tendremos que habilitarlo :P...
Bueno ya basta de observar el crackme y vallamos a la mejor parte... OllyDBG

Con OllyDBG
Para empezar abrimos nuestro OllyDBG y decopilemos el crackme, nos saldra algo hasi:


Y ustedes diran ":O:O que instrucciones tan mas extrañas son esas.." pero la verdad son normales... ahorita veremos porque :P
Lo que aremos sera buscar todas las string's que allá en el programa así que hagamos lo siguiente:


Segundo click > Search For > All Referenced Text String
Le di hacia abajo, y me encontre con lo siguiente:


hay una instruccion en especial que me interesa... "IsDebuggerPressent", esta es una instruccion que se utiliza para todos los lenguajes de programacion y sirve para ver si el programa esta siendo debuggeado, ocea que si nosotros corremos nuestro programa en OllyDBG nos saldra lo siguiente:


Una ventanita que solo sale cuando esta siendo debuggeado el programa, no se preocupen esto se puede anular, ahorita les explico como...
Despues de picarle al boton "aceptar" se cerro el programa, corri denuevo el programa, y en lugar de picarle al boton, le pique a las tachitas pero salio lo mismo se cerro el programa. Esto es parte del programa, cuando detecta que el programa esta siendo debuggeado, se cierra el programa, para evitar que el programa sea crackiado.... pero esto no evita que el programa sea crackiado, lo unico que hace es molestar...
Continuemos!

Sigamos buscando strings... en este caso va a ser una en especial, la que hace que el programa se cierre cuando inicie el para evitar mas molestias y seguir crackiando nuestra aplicacion....
Como vimos, cuando detecta que esta siendo debuggeado sale un letrero con titulo "CrackMe!" y que dice "Cracker??" entonces busquemos eso en las string's...
Las encontre son las siguientes:


Damos click sobre cualquiera de las 2 (nos llevara casi a la misma parte, no importa sobre cual des click) y nos llevara a la siguiente zona:


Lo que les he mostrado es lo mas importante, les dire porque.
Para empezar vemos un salto (JE), ese es el salto que dice "Si es igual salto, si no no" entonces lo que hace hay es saltar si el programa esta siendo debuggeado lo que aremos sera parchar el codigo cambiando el JE por JMP

Les explicare algunas instrucciones usadas aqui:

Para empezar vemos las siguientes instrucciones:
Código: php
0040406F|  -  C745 8C AC3A4......   | Mov Dword PTR SS:[EBP-74], Prueba_D.0040...... |  UNICODE "CrackMe!"
00404081|  -  C745 9C 883A4......   | Mov Dword PTR SS:[EBP-64], Prueba_D.0040...... |  UNICODE "Cracker??!"

Que significa esto?? esto quiere decir que "CrackMe!" es el titulo de la ventana y que "Cracker??" es lo que dice en la ventana.

Código: php
0040409F|  -  FF15 2C104000   | CALL Dword PTR DS:[<&MSVBVM60.#595>] |  MSVBVM60.rtcMsgBox


Esta instruccion es la que hace que salga el mensage, si queremos que no salga este mensage podemos Nop'ear esta intruccion sin ningun error pero esto no va a evitar que se cierre el programa.

Código: php
004040C0|  -  FF15 10104000   | CALL Dword PTR DS:[<&MSVBVM60.__vbaEnd] |  MSVBVM60.__vbaEnd


Creo que con solo ver el "END" pueden dedusir que hace, lo que hace es cerrar la aplicacion vb... esta tambien la podemos nop'ear pero prefiero parchar el programa.

Bueno estas son algunas de las prinsipales instrucciones que aparecen en esta parte del codigo.
Continuemos!

Lo que aremos ahora sera hacer que el boton este activo para poder verificar nuestra clave.
Primero chequeemos cual es el nombre del boton, el nombre del boton es "Comprobar" pero como vemos, el boton inicia con la "C" subrayada esto quiere decir que su nombre seria "&Comprobar" ("&" en vb es para subrayar una letra) hasi que en la ventana prinsipal de OllyDBG precionemos:
Ctrl > B
Nos saldra la siguiente ventana:


Introducimos el nombre "&Comprobar", en mi caso solo puse "Comprobar" pero vean que tengo las dos opciones de abajo palomiadas.
Nos llevara a esta parte:


Principalmente vemos el nombre del boton que en este caso es "Command1" y 5 lineas mas abajo vemos lo que se ve en el boton "&Comprobar" (Comprobar).
Debajo podemos ver lineas que dicen "DB 04" "DB B0" etc.
Estas lineas son las propiedades del boton, TODAS LAS PROPIEDADES asi que podemos cambiarle todo ABSOLUTAMENTE TODO a nuestro gusto, en este caso queremos que el boton este activo.
Jugando con las propiedades me di cuenta que la propiedad de "Enabled" es la linea 11 contando hasia abajo del nombre del boton, ocea contamos 11 hacia abajo apartir de "&Comprobar", podemos ver que dice "DB 00" esto quiere decir que el boton esta enabled = false, porque ?? porque 0 es igual a false y 1 es igual a true, esto quiere decir que como el boton esta en "0" esta inactivo...
Lo que aremos nosotros sera poner que este activo, ¿Como hacer esto? pues oviamente cambiando el 0 por 1..


Damos segundo click > Binary > Edit o facilmente precionando
Ctrl + E
Y nos saldra una ventana como la siguiente:


Aqui es donde editamos el 0 por el 1.. (Cambiamos el segundo 0)
Y nuestro boton estara activo ahora.

Ahora eliminaremos la NAG, la ventana molesta que sale cuando iniciamos el programa. ¿Como hacer esto?
Busquemos en las string's el contenido de la ventana ("Tienes una version sin registrar"), damos doble click y nos enviara hasia aca:


Principalmente vemos el titulo de la ventana "CrackMe!" y despues vemos el contenido.
Un poco mas abajo vemos lo siguiente:
Código: php
00403FC8|  -  FF15 2C104000   | CALL Dword PTR DS:[<&MSVBVM60.#595] |  MSVBVM60.rtcMsgBox


Esta instruccion es la que nos manda la ventanita molesta del principio (NAG), lo que aremos sera nop'ear esta instruccion para que no salga la ventana..


Damos segundo click > Binary > Fill with NOPs
Y se quitara esa instruccion y nos saldra esto:


ocea que no nos saldra la ventana molesta (NAG).

Producto Final
Despues de realizar los cambios anteriores, si hisieron todo correctamente ya deberia estar nuestro programa listo para ser crackiado.
Ahora corramos el programa....
Prinsipalmente como siempre nos deberia salir la ventana molesta diciendonos que el programa no esta registrado blablabla, eso ya quedo en el pasado porque ya no nos salio.
Despues deberia detectar que el programa esta siendo debuggeado , pues en este caso no, porque lo parchamos asi que deberia correr sin ningun problema.
Despues hisimos que nuestro boton este activo y hasi deberia pasar, nuestro boton deberia funcionar.
Y listo nuestro programa esta preparado para ser crackiado :D:D.

Algunas instrucciones mas..
Aqui les van algunas otras instrucciones muy usadas:
Código: php
MSVBVM60.__vbaVarMove

Esta lo que hace es pasar el valor de una variante a otra.

Código: php
MSVBVM60.__vbaVarCopy

Copia el valor de una variante a otra.

Código: php
MSVBVM60.__vbaVarCmp

Compara dos variantes.

Estas solo son algunas de las muchas que hay.

CitarGreatz: IpKiss     &     w0rm
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta