Autor
|
Tema: Encontrar el serial en Crackme hecho en VB (Leído 5,520 veces)
|
ViCrack€r
Desconectado
Mensajes: 49
|
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.
|
|
|
En línea
|
|
|
|
ViCrack€r
Desconectado
Mensajes: 49
|
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.
|
|
|
En línea
|
|
|
|
|
4rS3NI(
Desconectado
Mensajes: 75
FraGa... keep growing
|
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 ( ) 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 . 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
|
|
|
En línea
|
|
|
|
ViCrack€r
Desconectado
Mensajes: 49
|
Hola 4rS3NI(, muchas gracias por encontrar el serial y explicar de forma clara como lo has hecho. 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.
|
|
|
En línea
|
|
|
|
xkill
Desconectado
Mensajes: 9
|
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!
|
|
|
En línea
|
Muchas cosas, conociéndolas bien, con el consentimiento de uno, pueden funcionar de manera contraria. William Shakespeare. Inclusive el software
|
|
|
ViCrack€r
Desconectado
Mensajes: 49
|
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.
|
|
|
En línea
|
|
|
|
|
|