Nota:
Dejo para el final el lenguaje que menos me gusta y el que menos he tocado,
pues suelo huir de instalar en mi PC programas en visual basic al igual que
he evitado los crackmes en vb.
No pretendo levantar la típica polémica sobre vb que podemos ver en todos los
foros de programación, simplemente le tengo manía por que a la hora de
desensamblar me resulta confuso y me pierdo.
Quizás si hubiera empezado desensamblando crackmes en vb ahora serian mis
favoritos, pero la verdad el desensamblado de otros lenguajes se me hace mas
comprensible.
Quede claro que es cuestión de gusto y quizá también de limitación personal,
a lo mejor según vaya aprendiendo este tema del cracking los crackmes en
visual basic acaban convirtiéndose en mis favoritos.
Podría explicar lo de las Dlls de visual basic y que estos programas (vb)
dependen de ellas para su ejecución, también podría escribir un listado de
todas las APIs necesarias, pero seria prácticamente un copy – paste de
tutoriales de otros crackers que controlan el tema y que en mi opinión
deberíais leer.
Antes que copiar a nadie para rellenar espacio en este capitulo y quedar de
put@ madre demostrando mis falsos conocimientos en el tema prefiero
recomendaros que leáis tutoriales de otros crackers como por ejemplo Coco,
donde se explica el tema del crack en visual basic.
Yo seguiré aquí mi línea de explicar lo más claramente posible lo que aprendí
por mis propias y pocas experiencias sobre el crack en visual basic.
Esto aunque suene a disculpa es la intencion de este curso : aprender juntos.
Estos crackmes de alfa me vinieron al pelo para esta introducción al crack en
vb, gracias Alfa.
Crackme 3 de Alfa
El típico crackme con numero y nombre, lo mejor para ir viendo poco a poco
este tema.

Lo cargamos en Olly y vamos a ir directamente a cazarlo por medio de las
llamadas a las APIs
Utilizaremos una de las APIs mas comunes para cazar nombres: vbaStrCmp (String Compare –
comparar cadenas de texto)
Con control + N set breakpoint on every reference en la API __vbaStrCmp

Pulsamos F9 e introducimos nombre y serial y pulsamos el botón registrarse
Olly para en uno de los BPs
Vemos la llamada a la API y en registers nuestro numero
Registers -> 
Pulsamos F9 otra vez y un poco más abajo la segunda parada donde vemos
nuestro nombre
Registers -> 
F9 por tercera vez y vemos en registers dos cadenas en unicode, parece la
típica comparación de seriales verdadero / falso
Registers -> 
Lo probamos

Intentándolo con Smartcheck
Configuración de Smartcheck
Es un paso necesario tener bien configurado el Smartcheck, sobra decir que la
configuración del programa que os voy a mostrar la saque de un tutorial de un
gran Cracker: Ricardo Narvaja
Lo adapte haciendo pruebas a mi versión y tal como lo muestro a mi me
funciona, no obstante tened en cuenta mi poca experiencia con vb
Utilizo la versión 6.2
En Error detection marcamos

Pulsamos el botón Advanced… y en Advanced Settings

Pestaña reporting todo marcado menos el movimiento del raton (al Raton hay
que dejarle siempre libertad para moverse sin controlar sus movimientos, je
je)

Bien una vez marcadas estas opciones lo guardamos para que siempre que
arranquemos Smartcheck no tengamos que volverlas a marcar
Cargamos el crackme 3 de alfa en Smartcheck y pulsamos play (run) 
Aparece el crackme ejecutándose, rellenamos los edit y pulsamos el botón
registrarse

Fijaros que una vez que hemos pulsado el botón nos aparece el cartel malo y
en el reporte abajo a la izquierda _Click
Smartcheck va grabando todo lo que ocurre al ejecutarse el programa y también
todos nuestros movimientos

Aceptamos que somos malos crackers – en mi caso sin dudarlo – y pulsamos stop

Antes de hacer nada más desplegamos View y marcamos como en la imagen las
casillas Arguments, Sequence Numbers y Suppressed
Errors
Antes de cerrar este menú haced click en Show All
Events

Siempre que abramos un
programa con Smartcheck deberemos marcar una vez que hemos pulsado stop y
antes de analizarlo la opcion
Show All Events
las otras 3 (arguments, sequence y suppressed) se quedan grabadas, pero esta
no, asi que la marcaremos siempre al abrir un programa, pues sino no veremos
todos los eventos.
Arriba en el edit escribid el numero malo y picad en la primera imagen de los
prismáticos o edit - find

Smart para aquí y vemos el API vbastrcmp con nuestro numero y debajo nuestro
nombre

Seguimos buscando con F3 o los prismáticos (y yo que pensaba que estos solo
servian para ver a la vecina en bolas) y paramos aquí donde compara nuestro
numero con otra String, el serial verdadero que vimos en Olly, lo vemos
también en la ventana de la derecha
 
Fue un crackme fácil de resolver, a mi altura, para no romperme el coco y
verlo clarito.
Crackme 5 de Alfa
Otro facilito para ir pillando el rollo a vb
Lo cargamos en Olly y ponemos BP en todas las vbaStrCmp

F9 y escribimos nuestro pass

Probamos y Olly para

F9 y Olly para de nuevo y vemos en unicode dos nombres: Roman y Fernando (en
los anteriores capítulos veíamos las strings que nos interesaban en ascii)

Abrámoslo con Smartcheck y busquemos nuestro serial como lo hicimos con el
crackme anterior
Si no podéis encontrar el serial será por que tengáis desmarcadas alguna de
la opciones que marcamos al configurar, marcadlas y guardad los cambios.
Llegamos a un punto en que lo compara con Roman y en la línea siguiente con
Fernando

Cerramos Smartcheck y probamos con los dos nombres
 
Así me gusta que sigamos en mi línea.
Crackme 4 de Alfa
Este nos lo intenta poner un poco más difícil apurándonos con el tiempo, pero
vemos que es lo mismo

Con olly
Control + N y BP set breakpoint on every reference en __vbaStrComp
F9 y para observamos la linea que hay justo encima de donde paro (00401E89) y vemos
la palabra secreto

Con smartcheck find 15151515

El único problema para resolver este crackme esta en vuestra rapidez para
escribir la palabra secreto.
Crackme 1 de Alfa
Carguémoslo y busquemos en Olly vbaStrCmp

No lo encontramos, pero tenemos otra forma de cazar el serial utilizaremos
__vbaVarTstEq
Ponemos los BPs como anteriormente

F9, escribimos nuestro numero y para aquí, como no vemos nada alrededor
entramos en el call 00401DDF con F7

Aparecemos aquí y empezamos a bajar pulsando F7 y solo F7 despacio,
de la misma forma que en capitulos anteriores trazabamos con F8

Llegamos aquí y vemos en el Stack el numerito 1633
Stack -> 
Seguimos con F7 hasta que en esta dirección (fijaros que no pertenece al
programa sino al modulo OLEAUT32) vemos en registers lo que parece la
comparación de siempre entre nuestro serial y el bueno
Registers -> 
Lo probamos como serial pero no funciona
Me habré equivocado, vuelvo a repetir la operación y al llegar al mismo punto
veo otro serial distinto
Registers -> 
Ahora seguro que si, además justo debajo de donde veo eso hay algo que parece
una comparación de strings en 7716B889
VarBstrCmp
Introduzco 1639 y tampoco es el serial correcto
Empiezo a mosquearme y pienso que alfa habrá introducido una rutina para
cambiar el serial, alguna de esas operaciones matemáticas que odio por que
soy torpe y me vuelvo loco intentando averiguar que c#ñ# hacen.
Pienso que es su primer crackme y que no pudo tener tan mala idea, empiezo a
utilizar la intuición que es lo único que me queda en estos casos y después
de unas cuantas pruebas salta la chispa.
Mirad la solución

Toma como serial la hora / minutos del sistema
Si pasamos ese minuto y probamos el serial no funciona, hay que introducir la
hora y los minutos exactos, menos mal que en el fondo Alfa fue un buen tipo y
no utilizo lo segundos también

Con Smartcheck
Busco mi serial pero ahora no lo pilla el crackme este de los huevos !!!

Estoy hundido en la más profunda miseria pues no conozco el funcionamiento de
Smartcheck y ademas soy un crackeador novato.
Intento una a la desesperada pero como siempre confiando en la intuición

Nada, claro es lógico probare con __vbaVarTstEq que es lo
que utilice para sacar el serial con Olly
Ahora si veo 1724

Bueno muchos “crackers de verdad” como yo digo se habrán echado unas risas a
costa de este capitulo, lo importante es que veáis como sin conocimientos de
un lenguaje de programación y apenas conocimientos de crackeo, con un par de
APIs sacadas de algún tuto de un algún maestro, con un poco de lógica y
siguiendo vuestro instinto se puede conseguir el serial.
Nags
Lo poco que se sobre eliminar Nags en vb lo aprendí de los tutos de Coco - si
estáis interesados en vb empezad por leerle a el – aquí os dejo un pequeño
apunte sobre eliminar Nags.
Crackme Nag de Alfa creado a propósito para el curso (gracias again)
Al ejecutar el crackme aparece una Nag y cuando lo cerramos otra

Sigo los pasos que aprendí de Coco botón derecho Search for – All
constants

Escribo 2B0 y pulso OK para buscar

Hay un push y un call, me centro en el call y pongo un BP

Mas abajo veo el final de este tramo de código, un retn en la
dirección 402120

Y mas arriba el principio de este tramo del código en 402040 aquí hago
control + R para ver desde donde es llamado este tramo del código donde se genera
la Nag

Y Olly me envía a 401AAA

Ahora cambiare la dirección del salto para que vaya directamente al
retn 402120 y evite la aparición del Nag

Guardad cambios y probad, crackme resuelto solo con buscar esa constante y
cambiando el valor de un salto
Como no me gusta solo copiar de otros investigue un poco y probé a hacerlo de
otra forma: nopear el call 4020DF
Lo probé y me funciono sin tener que buscar el JMP y cambiarlo.

Esta forma es “experimental” y no
se si funcionara siempre.
Fin del capitulo, no fue tan desagradable como pensaba.
Gracias en especial a Coco por sus tutoriales de visual basic de donde he
aprendido lo poco que se de cracking en vb y por enesima vez a Alfa por sus
crackmes.
|