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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Crack me en vB facilon
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crack me en vB facilon  (Leído 2,941 veces)
nhouse

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Crack me en vB facilon
« en: 26 Febrero 2005, 07:00 am »

aqui les dejo un crackme sencillo en vB sin empaquetar se trata de encontrar el codigo valido

posten la solucion

http://usuarios.lycos.es/nhouse2020/KEy.exe
En línea

4rS3NI(

Desconectado Desconectado

Mensajes: 75


FraGa... keep growing


Ver Perfil
Re: Crack me en vB facilon
« Respuesta #1 en: 26 Febrero 2005, 18:47 pm »

Buenas, debo decir que tu crackme, me ha dado dolores de cabeza no por la dificultad, sino por el hecho de estar programado en visual basic.

Aclaracion

No voy a poner un tutorial paso a paso de como resolverlo, sino que voy a escribir en forma general como crackearlo; asi, otros que quieran intentarlo, puedan guiarse con este post pero en fin; resolverlo por su cuenta

Aproximacion

Analizando el programita con peid, vemos que no esta empacado (ya estaba aclarado por el autor pero hay que ser desconfiados XD) y esta hecho en vb6. Abrimos el crackme y vemos que solo tiene un lugar para poner el serial, lo que me hace casi asegurar que tiene un serial unico (no creo que tome numero de disco rigido ni nada :S), no introducimos nada, clic en salir y arrrjjj, error en no se que :(. ponemos un numero cualquiera (1234567890 en mi caso) y al apretar el boton no pasa nada. Si lo abrimos con el olly, vamos a ver que tenemos antidebugger (isdebuggerpresent), pero al olly lo vamos a usar para otra cosa. El papel principal de la pelicula lo va a tener el smartcheck de numega.
Despolvamos cds, lo instalamos, lo configuramos y cargamos el crackme. Ponemos un numero de serie, damos en salir y vemos como se genera un evento click en SC (smartcheck). Cerramos el crackme y manos a la obra.

Analisis

Activamos la opcion de show all events para tener un poco mas de informacion sobre las acciones dentro del evento click y mirando por encima vemos que el programa hace lo siguiente

1º carga un string misterioso
2º toma nuestro numero
3º le hace algunas cosas y lo convierte en otro numero
4º a ese numero le hace mas cosas aun (:-S) y va obteniendo una cadena de caracteres raros y aparentemente sin sentido (odio las comparaciones de este tipo)
5º compara que la cadena generada sea igual a la cargada en 1º mediante  __vbavartsteq

Sacando el serial

Antes que nada, aclarar que siempre hablamos de valores decimales, a no ser que se especifique lo contrario.
Partimos desde el punto 3º: lo que hace a nuestro serial es lo siguiente:

-lo multiplica por 5 (al numero completo) generando numero A
-lo divide en 3 (al numero completo) generando numero B
-suma A+B
-multiplica el resultado por 9

Hecho esto obtenemos un numero C al que se le realiza un xor con 4f. En este punto nos paramos.Como hice notar (y recalco) odio visual basic XD, lo cual hace que no tenga DEMASIADOS conocimientos sobre él.Voy a decir que al menos una hora estuve varado pensando en como cuernos generaba la cadena del 4º. Si bien podemos ver como cada uno de los numeros que integran al numero C se van convirtiendo en la "cadena misteriosa" no sabemos que operacion realiza para lograr la conversion. Todo este embrolle se puede ver en un evento llamado "Asc" hacemos click en el y solo vemos el primer caracter del numero C, pero mas arriba dice KEY!XXXXXXXX ese es el offset en el que se encuentra esa instruccion, sin mas cargamos el olly (activamos plugin isdebuggerpresent) ponemos goto>expression en el desensamblado y ponemos el offset + la imagebase que casi siempre es 400000 le damos enter y caemos en una llamada, traceamos un poco y vemos que lo que hace es el bendito xor 4f.
Listo! si observamos, se hace lo mismo con todos los caracteres del numero C para formar una cadena que deberia concordar con la que se carga en 1º

Recapitulando

ahora planteamos la ecuacion de como hace el programa para generar una cadena a partir de nuestro serial

[(serial*5)+(serial/3)]*9= Numero C ;
Caracter de Numero C (CONVERTIDO A SU VALOR CORRESPONDIENTE ASCII) XOR 4f= caracter de cadena ( en hexa)

Pero como hacemos para conocer el serial que deberiamos entrar para que se haga el numero C correcto y por ende la cadena correcta? ingenieria inversa...

El final!

Partimos desde la cadena "correcta", para ello nos vamos a el evento click y vemos que a continuacion estan las instrucciones que cargan la cadena que queremos, damos clic y a la derecha vemos que se nos da la RVA en la que se encuentra la cadena (en unicode) que buscamos. Nos vamos al olly ponemos goto>epresionje en el dump y ponemos la RVA, vemos que nos aparecen los caracteres ASCII y sus correspondientes valores HEXADECIMALES. Copiamos los valores hexa y ya tenemos todo. A continuacion les pongo como quedaria la generacion en si:


7C797E77 |.y.~.w.
76797779 v.y.w.y.===========>CADENA CORRECTA
7B7F767A {..v.z.
7D7C7D   }.|.}

Lo que haremos ahora es ir para atras, si lo ultimo que se hace es un xor entre el numero C y 4f para obtener la cadena, haremos la opuesta de XOR (o sea XOR :-P) entre los caracteres de la cadena y 4f para obtener el numero C. despues los pasamos a decimal


7d xor 4f= 32= 2
7C xor 4f= 33= 3
7d xor 4f= 32= 2
7a xor 4f= 35= 5
76 xor 4f= 39= 9
7f xor 4f= 30= 0
7b xor 4f= 34= 4
79 xor 4f= 36= 6
77 xor 4f= 38= 8
79 xor 4f= 36= 6
76 xor 4f= 39= 9
77 xor 4f= 38= 8
7e xor 4f= 31= 1
79 xor 4f= 36= 6
7c xor 4f= 33= 3

Ahora que sabemos que el numero C es 361896864095232 aplicamos matematica basica :-P

[(serial*5)+(serial/3)]*9= 361896864095232 ;

(FACTOR COMUN SERIAL)

[serial*(5+1/3)]*9=361896864095232 ;

[serial*(16/3)]*9=361896864095232 ;

((361896864095232/9)*3)/16=7539518001984=>SERIAL!


POST SCRIPTUM

Olvide poner como me di cuenta de que a mi serial lo dividia en 3, en el smartcheck nos vamos a view y tildamos la opcion arguments, ahi nos mostrara que el integer en la multiplicacion es 5 y en la division es 3


Cualquier error/duda me avisan

Saludos!
« Última modificación: 27 Febrero 2005, 02:46 am por 4rS3NI( » En línea

nhouse

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Crack me en vB facilon
« Respuesta #2 en: 27 Febrero 2005, 03:20 am »

la dificultad estaba en encontrar el xor i hacer la ingenieria inversa pa pillar el serial valido ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines