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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


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

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Reto vB
« en: 2 Marzo 2005, 06:06 am »

Visto que a la gente no le gusta o es dificil de entender aqui les dejo un pack echo en visual basic de dificultad creciente

disfruten :)

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

4rS3NI(

Desconectado Desconectado

Mensajes: 75


FraGa... keep growing


Ver Perfil
Re: Reto vB
« Respuesta #1 en: 2 Marzo 2005, 12:57 pm »

Buenas, supongo que sigue la cuestion de postear la solucion.
Ahora si que no apruebo los finales de la uni...

pues a ver que tenemos...

Saludos!

(si no vuelvo a postear es porque decidi estudiar, o porque estoy vomitando de tanto ver codigo en VB   :P)
En línea

4rS3NI(

Desconectado Desconectado

Mensajes: 75


FraGa... keep growing


Ver Perfil
Re: Reto vB
« Respuesta #2 en: 16 Marzo 2005, 09:41 am »

Buenas, perdón por no responder antes, pero decidí estudiar...
Respecto a los retos, aquí pongo la solución para el key31.exe, la del key ya la posteé anteriormente y la del key7, pues todavía no lo trato XD.

Introducción

Como dije anteriormente, esto es solo una guía por si alguien quiere tratar de resolverlo por si solo. Agarramos el crackme, lo pasamos por el peid y dice upx, como en el léeme dice que el objetivo es sacar el serial, no vamos a ser muy extensos en el tema de descompresión. Si abrimos el crackme, vemos que es EXACTAMENTE IGUAL AL ANTERIOR: una ventana feísima y un botón salir (si no lo cambias para la próxima no lo resuelvo :P)

Desempacando

Cargamos el Cme en el olly y vemos que para en una instrucción pushad, usamos la función buscar comando en el código desensamblado y ponemos popad, le damos buscar y vemos que llegamos a un popad y justo debajo hay un salto que nos lleva bien lejos anotamos a donde nos lleva ese salto que es el entrypoint, el resto es igual que con todos los otros packers, dumpeamos, buscamos inicio y fin de la IAT, reconstruimos y listo, crackme desempacado (la otra es usar un programa que se cargue el packer, pero estaba aburrido así que le entré a mano)

Análisis (si se puede decir)

Vamos a usar el olly, el smartcheck, y un editor hexa. Lo abrimos con el smartcheck ponemos serial cualquiera (1234567890) clic en salir, se genera el evento en el Sc y cerramos el Cme.
Si miramos en el evento clic vemos que en un comienzo se toma nuestro serial y también vemos un string constante: 197.
Tanto los valores de esa constante como los de mi serial se pasan a los valores hexa que los representan en ASCII.
Después, de eso vemos una función que le hace algo a nuestro serial, pero no sabemos que; entonces procedemos igual que como lo hicimos con el crackme anterior (key), vemos la dirección de la instrucción en SC y nos vamos al olly. Una vez allí, hacemos un goto>expression y ponemos la dirección, traceamos un poco sin entrar en las calls, y vemos un poco después de una llamada a __vbaFreeVarList, que se suma a cada valor ASCII de nuestro serial uno de los valores ASCII correspondientes al 197, justamente de esto se encargaba esa función que no conocíamos en SC: alterna entre uno de esos caracteres que forma el 197 y lo usa como sumando junto con nuestro caracter. Queda así:

197=>Constante

1º caracter en ASCII + 31
2º caracter en ASCII + 39
3º caracter en ASCII + 31
4º caracter en ASCII + 39
5º caracter en ASCII + 31
6º caracter en ASCII + 39
7º caracter en ASCII + 31
8º caracter en ASCII + 39
9º caracter en ASCII + 31
10º caracter en ASCII + 39

Aquí vamos a obtener una combinación de letras.
Voy a ahorrarles trabajo diciéndoles, que lo que se obtiene aquí es lo que se va a comparar con una constante al final de todo, es decir que esta es la rutina que tenemos que invertir para sacar el serial que funciona partiendo de iiajjqepfljnb que es lo que tiene que dar nuestro serial después de pasar por la rutina anterior

Posible dificultad...

Los números se comparan por medio de la función __VbaVarTstEq, y no se muestra la variable con la que se comparan las constantes, esto lo solucionamos como lo veníamos haciendo, tomamos la dirección con el SC, y en la función __VbaVarTstEq traceamos hasta llegar a la instrucción
 
REPE CMPS WORD PTR ES:[EDI],WORD PTR DS:[ESI]

Esta está dentro del módulo Oleaut32, así que van a tener que tracear entrando en las calls :-S
Si ponemos un BP ahí y vamos tocando F9 vamos a ver que se compara, esto sirve para ver todas las comparaciones porque todas se hacen con __VbaVarTstEq

Calculando Serial
No vamos a encontrar la constante completa, sino que es una combinación de otras dos:

iiajj y qepfljnb, formando iiajjqepfljnb, entonces

(usando un editor hexa escribimos las letras para conocer los correspondientes valores en hexa)

i=69
i=69
a=61
j=6a
j=6a
q=71
e=65
p=70
f=66
l=6c
j=6a
n=6e
b=62

69-31=38=8
69-39=30=0
61-31=30=0
6a-39=31=1
6a-31=39=9
71-39=38=8
65-31=34=4
70-39=37=7
66-31=35=5
6c-39=33=3
6a-31=39=9
6e-39=35=5
62-31=31=1

8001984753951=> Serial!!

Para que mi pérdida de tiempo no sea en vano, voy a poner cuales son las rutinas de generación de otros números, que supongo que son para despistar.
Hay una generación de un segundo número a partir del que obtenemos luego de la rutina anterior. Se usa un numero constante 127 y se hace lo mismo que en la rutina anterior pero al revés.

127=>Constante

1º caracter en ASCII de N1 - 31
2º caracter en ASCII de N1 - 32
3º caracter en ASCII de N1 - 31
4º caracter en ASCII de N1 - 32
5º caracter en ASCII de N1 - 31
6º caracter en ASCII de N1 - 32
7º caracter en ASCII de N1 - 31
8º caracter en ASCII de N1 - 32
9º caracter en ASCII de N1 - 31
10º caracter en ASCII de N1 - 32

Este número aparentemente no se usa para nada... :-S

Después de esto, hay una constante que se compara con un número que se genera a partir de otro numero constante dentro del crackme, y no son iguales, por ende, NUNCA VAN A SER IGUALES (sospecho que este crackme es una modificación del primero...)

658245853514=>Constante

[(658245853514*5)+(658245853514/3)]*9=31595800968672

33 xor 4f = 7c= |
31 xor 4f = 7e= ~
35 xor 4f = 7a= z
39 xor 4f = 76= v
35 xor 4f = 7a= z
38 xor 4f = 77= w
30 xor 4f = 7f= .
30 xor 4f = 7f= .
39 xor 4f = 76= v
36 xor 4f = 79= y
38 xor 4f = 77= w
36 xor 4f = 79= y
37 xor 4f = 78= x
32 xor 4f = 7d= }

Por último Tenemos una comparación de nuestro serial (1234567890) con una cadena de caracteres raros que supongo que es la que hace que largue el cuadro de texto con el mensaje "casi pero no", pero no la probé porque la verdad que no se como escribir esos "cuadraditos"

Bueno, como últimas palabras, voy a pedir encarecidamente que para los próximos que no pongas comparaciones con esas cadenas tan raras :-P. podes hacer más difíciles las cosas pero usa números y letras que conozcamos y no esos caracteres raros

Al parecer el otro crackme esta comprimido con neolite, nunca lo vi, así que supongo que va a ser entretenido

Cualquier duda, error o acotación, posteen

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Reto Programación « 1 2 »
Programación General
Oblivi0n 10 6,144 Último mensaje 22 Diciembre 2010, 00:09 am
por ace332
[RETO] Sql injection
Nivel Web
cur3n79 3 4,221 Último mensaje 12 Febrero 2011, 14:24 pm
por xassiz~
[RETO] GetMaskColor
Programación Visual Basic
LeandroA 2 2,414 Último mensaje 26 Marzo 2011, 00:19 am
por LeandroA
los reto a un reto muy dificil
Desafíos - Wargames
elshaker 2 4,317 Último mensaje 2 Enero 2013, 00:12 am
por kaiserr
Reto algoritmo mezcla cifras y letras (RETO REMUNERADO)
Desafíos - Wargames
kingMezlo 3 5,089 Último mensaje 31 Diciembre 2013, 19:47 pm
por #Aitor
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines