Encontrar el serial en Crackme hecho en VB

Iniciado por ViCrack€r, 17 Agosto 2005, 21:42 PM

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

ViCrack€r

Hola, estoy intentando crackear un crackme hecho en VB, utilizo el Olly y hago lo siguiente:
- El crackme tiene un cuadro de texto, debajo un botón y debajo un cuadro de texto en el que pone bien o mal si se hacierta el serial o no.
Sigo un tutorial de Coco en el que se explica que VB utiliza generalmente los registro EAX, ECX y EDX, y en el Olly se puede buscar el valor de estos.
Hay que hacer FIND COMMAND (control + F) y probar con alguna de estas CALL:
Visual Basic 5.0

CALL [EAX+000000A0]
CALL [EDX+000000A0]
CALL [ECX+000000A4]

Visual Basic 6.0

CALL [EAX+000000A0]
CALL [ECX+000000A0]

Poner un bp, F9 y tracear hasta llegar a:
API: MSVBVM60.__vbaVarTstEq (comparar cadenas)
entrar en esta Call ,tracear y donde pone PUSH 0, hacer CLIC DERECHO sobre el registro EAX,EDX o ECX (según que call se ha utilizado de las que estan escritas arriba) - FOLLOW IN STACK, y en la ventana STACK debería de poner el valor.
He probado esto con los registros EAX, ECX y EDX, pero no lo he conseguido.  ???
Si alguien puede corregir algo de lo que he escrito o escribir algún otro procedimiento, estaré muy agradecido.

Saludos.  ::)

ViCrack€r

Sigo sin encontrar el serial,  :-[ estas son las funciones que utiliza el crackme:

MSVBVM60.__vbaChkstk
MSVBVM60.__vbaExceptHandler
MSVBVM60.__vbaFPException
MSVBVM60.__vbaFreeObj
MSVBVM60.__vbaFreeStr
MSVBVM60.__vbaFreeVar
MSVBVM60.__vbaFreeVarList
MSVBVM60.__vbaHresultCheckObj
MSVBVM60.__vbaObjSet
MSVBVM60.__vbaVarAdd
MSVBVM60.__vbaVarCopy
MSVBVM60.__vbaVarMove
MSVBVM60.__vbaVarTstEq
MSVBVM60.__vbaVarTstNe
MSVBVM60._adj_fdiv_m16i
MSVBVM60._adj_fdiv_m32
MSVBVM60._adj_fdiv_m32i
MSVBVM60._adj_fdiv_m64
MSVBVM60._adj_fdiv_r
MSVBVM60._adj_fdivr_m16i
MSVBVM60._adj_fdivr_m32
MSVBVM60._adj_fdivr_m32i
MSVBVM60._adj_fdivr_m64
MSVBVM60._adj_fpatan
MSVBVM60._adj_fprem
MSVBVM60._adj_fprem1
MSVBVM60._adj_fptan
MSVBVM60._allmul
MSVBVM60._CIatan
MSVBVM60._CIcos
MSVBVM60._CIexp
MSVBVM60._CIlog
MSVBVM60._CIsin
MSVBVM60._CIsqrt
MSVBVM60._CItan
MSVBVM60.EVENT_SINK_AddRef
MSVBVM60.EVENT_SINK_QueryInterface
MSVBVM60.EVENT_SINK_Release
MSVBVM60.rtcMidCharVar
MSVBVM60.ThunRTMain


Yo he utilizado esta función para buscar el serial como he escrito arriba:
MSVBVM60.__vbaVarTstEq
¿En que otra función se podría encontrar el serial?

Conozco al creador del crackme y me ha dado una pista:
1- No ha utilizado IF- END IF para la comprobación del serial bueno con el malo.

2- Ha utilizado SELECT CASE- END SELECT
¿Puede esto haber complicado más encontrar el serial?

Cuando busco las referencias de cadenas de texto, me aparece algo sospechoso: ASCII "xxxx"".
No se porque me aparece asi, porque en otros crackmes aparece el serial, pero en este no.   ???
Espero vuestra ayuda.
Gracias de antemano.

Saludos.










ViCrack€r

Hola, aquí os dejo el enlace del Crackme #1 by P@KO:  ;D
http://s6.yousendit.com/d.aspx?id=1XTSWOQLNO66D0T9YXDJYTTEJD

Este enlace será funcional durante los siguientes 7 dias desde hoy.

Probad a crackearlo y si podeis encontrar el serial, poned la solución.  ;D

Saludos.


4rS3NI(

Buenas, antes que nada recordar que odio visual basic, por lo tanto mi entendimiento es bastante pobre, acepto cualquier corrección o sugerencia

ANALISIS PRELIMINAR

Abrimos el crackme y vemos un lugar para poner contraseña, un botón que se llama command1 ( :P) y otro lugar. Ponemos serial 234567890, presionamos botón y dice mal (para eso era la 2º caja). Abrimos el PEID y nos dice que no sta comprimido ni nada raro, abrimos Smart Check.

CRACKING...

Corremos el Crackme (desde ahora CM) ponemos serial chungo, click en command1 y cerramos el CM. El Smart check ha registrado todos los eventos, nos interesa el que dice _Click.Expandimos, y ponemos show all events en el menú view.

Mirando un poco vemos que hay muchas funciones sospechosas como _vbaVarTstEq entre otras, pero si agudizamos más la vista ( ::)) vamos a notar que una función (_vbaVarTstNe) engloba muchisimas "cosas". Nos vamos a View y tildamos "arguments" y vemos que al lado de la función dice String:"2" y después En Variant: Const Integer:1
En este punto sospecho que es una comparación de mi primer caracter con un 1 (porque dice const integer), lo que hago es volver a correr el CM pero esta vez pongo como primer caracter del serial una "a" y oh sorpresa, en _vbaVarTstNe nos dice String:"a" , Variant: Const Integer:1

Pero luego de eso tenemos la cadena mal y se acaba todo. Pensamos, pensamos y por lo primero que optamos es por hacer que el primer caracter de nuestro serial chungo sea 1.
Volvemos a correr el CM, ponemos 1234567890 y cuando vamos al Smart Check vemos que esta vez hay dos _vbaVarTstNe en la primera se compara 1 con 1 y en la segunda 2 con 3  :P. Lo que hacemos entonces es ir haciendo coincidir cada uno de los caracteres de nuestro serial con
el que nos va mostrando la función y deducimos que los caracteres que importan son los 4 primeros, es decir que no importa el serial que sea siempre y cuando contenga 4 caracteres determinados al principio

Entonces el serial es 1346********

Saludos

ViCrack€r

Hola 4rS3NI(, muchas gracias por encontrar el serial y explicar de forma clara como lo has hecho. ;D

Si alguien más sabe como encontrar el serial utilizando el Ollydbg o el SoftIce, que lo escriba si quiere, para poder saber que otras formas hay de conseguir el serial aparte del siempre útil SmartCheck.

Saludos.  ;D




xkill

Hola, yo lo hice de la siguiente manera:
Con el PEiD lo examine y me dice Microsoft Visual Basic 5.0 / 6.0, entonces lo descompilo con el w32dasm y el plugin para VB, ahí busco las str ref, en mi caso solo hay 3, VB5!, mal, y bien, doble clic en 'mal' y me manda a 004021DE, un poco arriba de eso veo que hay 4 referencias a este, o sea que desde 4 lugares distintos salta hacia acá:
401FC5, 40205E, 4020F7, 402190
Con el sice pongo un breakpoint en el primero 401FC5, un poco arriba de eso veo que antes de la llamada a vbaVarTstNe se mueven unos valores a la pila,

MOV DWORD PTR SS:[EBP-A4],1    <-- valores a comparar
MOV DWORD PTR SS:[EBP-AC],EDI      <-- valores a comparar
CALL DWORD PTR DS:[40107C]              <-- llamada a vbaVarTstNe
TEST AX,AX
JNZ 004021C5            <--Salto a mal

Lo que me lleva a pensar que el primer dato del serial es 1, luego en las restantes 3, siguiendo la misma técnica, se mueven los datos, 3, 4, 6, o sea que el serial es: 1346

Saludos!
Muchas cosas, conociéndolas bien, con el consentimiento de uno, pueden funcionar de manera contraria. William Shakespeare.
Inclusive el software ;)

ViCrack€r

Hola xkill, mucha gracias a ti también por escribir como lo has hecho, yo utilizo más el Ollydbg y he podido ver claramente como el programa hace la comprobación.

Saludos.  ;D