Herramientas:
W32dasm VB
SmartCheck 6.03
Editor Hexadecimal (el que mas os guste yo usare Hex Workshop v2.54)
Atakes:
Con el SmartCheck localizaremos un Serial Number valido en cuestion de segundos,
Con el W32dasmVB haremos que finalizada la evaluacion el programa siga funcionando,
para ello localizaremos la rutina de fin de evaluacion y la modificaremos en beneficio
nuestro.
Tenemos 21 dias de evaluacion en esos 21 dias podemos evaluar el programa sin restricciones y sin Nag, tenemos la posibilidad de registrarnos mediante el tipico NAME: COMPANI: REGKEY:
Parte 1
SmartCheck 6.03
Abrimos el SmartCheck y Lo configuramos como muestran los
gif. Con la Opcion open seleccionamos el ejecutable dlopper.exe

|
|
| | |
OPEN
CASILLA DE BUSQUEDA
| START END
MOSTRAR TODOS LOS EVENTOS
Es importante que tengais la barra de herramientas con los botones pulsados que se ven en la imagen, una vez cargado doppler.exe pulsamos la casilla start, inmediatamente se empieza a ejecutar nuestra victima pero ni se imagina que le estamos viendo las tripas. Si habeis configurado el SmartCheck como os sugeri, mientras se ejecuta el programa aparecera una ventana de error que dice asi
Numega SmartChec Error Detectted pulsais la opcion
Acknowledge tantas veces como os aparezca.
Bueno el programa esta iniciado solo tenemos que meter los datos de registro en Help\Enter Key
Meteis los datos que os de la gana yo puse.
NAME: karpoff
COMP: kk
S/N : 8493
Pulsamos OK y nos escupe el mensage
Invalid Code!! Aceptamos y vamos al SmartCheck y pulsamos la casilla End, por que aunque el programa ha terminado de ejecutarse sigue creando eventos y no es lo mismo buscar un S/N en 200 lineas de codigo que en 20000.
Bueno para localizar el S/N correcto yo hago lo siguiente, bien lo localizo mediante la funcion
__VbaStrCmp, __VbaStrComp o introduciendo en la casilla de busqueda el S/N falso las dos opciones son utiles, la primera es la funcion utilizada generalmente por Visual Basic para comparar los datos que hemos metido con los correctos y la segunda nos situa donde se encuentra el S/N que hemos metido y luego rastreando es facil encontrar el S/N correcto, en este caso utilizo la primera opcion osea que metemos en la casilla de busqueda
vbastrcmp y pulsamos Enter
2 veces, en este caso el S/N aparecio enseguida.

Sencillo no?? Vemos como se paro en la funcion
__vbaStrCmp y hay estan nuestros numeros
Nuestro S/N : 8493
S/N Correcto: 2E92F40
Pero ... SORPRESA!! Realmente este numero no me sirve ni a mi, por que si os fijais este programa genera un numero cada vez que lo ejecutamos e intentamos registrarnos, este numero lo podemos ver en la parte superior de la ventana de registro, y dependiendo de este numero genera el S/N valido pero solo para esa ejecucion, osea que si no introduces el S/N que has capturado en la misma ejecucion no te sirve de nada.
Asi que hay que repetir otra vez el proceso y sin cerrar el programa introducimos el serial capturado jejeje, o podemos pensar en otra forma de crackear el programa, esta vez haciendo un parcheo para que simule estar registrados (personalmente me gusta mas lo del parcheo que localizar el S/N)
Parte 2
W32dasm-VB & Editor Hex.
Bueno lo primero hacer una copia del ejecutable doppler.exe con el nombre por ejemplo doppler2.exe, desensamblamos doppler.exe con el W32dasm VB (el que muestra las String Ref. en Prog. visual basic) si no lo teneis lo podeis
descargar de mi pagina http://welcome.to/karpoff en la seccion herramientas, seguimos.. con el editor Hex editamos doppler2.exe y adelantamos la fecha de Windows 1 mes para trabajar con el programa expirado.
Ejecutamos el programa para ver que hace cuando esta caducado, y vemos que nos muestra un aviso diciendo que el programa ha expirado nos da la opcion de rellenar el registro
y si fallamos el programa no llega a ejecutarse.
ATAKE
Podemos localizar la rutina que se encarga de comprobar el S/N y manipularla o tambien podemos localizar la rutina que decide
si el programa esta caducado o no, y modificarla en beneficio nuestro, cual cogemos yo opto por la segunda, creo que la primera opcion es la que
siempre suelo mostrar en otros manuales asi que vamos a impedir que el programa caduque.
La teoria: a partir del mensaje de
programa expirado analizaremos el codigo y veremos donde y como toma la decision de que el programa no se ejecute por estar caducado, localizado esto pasaremos a modificar el codigo.
Estamos en el W32dasmVB con el programa desensamblado, pulsamos la boton de las Strg-Ref. y buscamos entre las cadenas de texto el mensaje de expiracion:
"Your 21-day trial period has expired. "
Hacemos doble clip y nos lleva directamente a:
* Possible StringData Ref from Code Obj ->"Your 21-day trial period has expired. "
|
00424E75 C78570FFFFFF18D04000 mov dword ptr [ebp+FFFFFF70],0040D018
-AQUIIIIIIII
Bueno analicemos el codigo para ver que coño pasa por que cuando pasan los 21 dias ya no funciona el programa.
* Reference To: MSVBVM50.__vbaFreeStr, Ord:0000h
|
:00424E1E FF1554E54200 Call dword ptr [0042E554]
:00424E24 6685F6
test si, si
:00424E27 0F843D010000 je 00424F6A
– el responsable
* Reference To: MSVBVM50.__vbaVarDup, Ord:0000h
|
:00424E2D 8B35E4E44200 mov esi, dword ptr [0042E4E4]
:00424E33 B804000280 mov eax, 80020004
:00424E38 BB0A000000 mov ebx, 0000000A
:00424E3D BF08000000 mov edi, 00000008
:00424E42 8D9558FFFFFF lea edx, dword ptr [ebp+FFFFFF58]
:00424E48 8D4D98 lea ecx, dword ptr [ebp-68]
:00424E4B 894580 mov dword ptr [ebp-80], eax
:00424E4E 899D78FFFFFF mov dword ptr [ebp+FFFFFF78], ebx
:00424E54 894590 mov dword ptr [ebp-70], eax
:00424E57 895D88 mov dword ptr [ebp-78], ebx
* Possible StringData Ref from Code Obj ->"Sorry!"
|
:00424E5A C78560FFFFFFB4BA4000 mov dword ptr [ebp+FFFFFF60], 0040BAB4
:00424E64 89BD58FFFFFF
mov dword ptr [ebp+FFFFFF58], edi
:00424E6A FFD6
call esi
:00424E6C 8D9568FFFFFF
lea edx, dword ptr [ebp+FFFFFF68]
:00424E72 8D4DA8
lea ecx, dword ptr [ebp-58]
Bueno esta bien sencillo no ?? Tenemos un bonito salto condicional en la direccion
00424E27 je 00424F6A .que hace esto?? Bueno mientras estamos dentro del periodo de evaluacion el salto condicional se ejecuta llevándonos a
00424F6A evitando asi el temible aviso de expiracion, pero cuando han pasado los 21 dias este salto es como si no estaria y al no ejecutarse
se encuentra de lleno con el mensage de expiracion y vamos fuera del programa, pues ya sabemos que tenemos que hacer lo vamos a convertir en un salto incondicional, que se ejecute siempre asi nunca nos mostrara el
Your 21-day tal tal... haber tenemos
00424E27 0F843D010000 je 00424F6A y queremos
00424E27
jmp 00424F6A
Como calculamos el valor en Hexa para que el salto nos lleve justo a la direccion de memoria que queremos
00424F6A Bueno con el propio W32dasm podemos hacerlo solo tenemos que pulsar CTRL+L para activar el debugger y hacer el parcheo en memoria, bueno pues eso pulsamos CTRL+L se abre la ventana de comandos y pulsamos load enseguida empieza el proceso de ejecucion y se abren numerosas ventanas pulsamos la opcion Goto Address y metemos la direccion de memoria del salto ouseaseeee
00424E27 aceptamos y el debugger nos situa justo en esa direccion ahora pulsamos Patch code y se abre una nueva ventana pues solo tenemos que meter los cambios que queremos hacer tecleamos
jmp 00424F6A y pulsamos Enter
Enseguida vereis justo debajo como se ha generado la el valor que necesitamos para cambiar el salto.
00424E27 E93E10000
JMP 00424F6A
Ahora solo nos queda llevar a cabo los cambios, localizamos la direccion del offset que la vemos en la barra inferior del W32dasm
24227 y vamos al Editor Hex
Donde cambiamos
0F843D010000 por E93E1000000
y ya esta probamos a ejecutar doppler2.exe y olee!! El programa funciona, hacemos algunas pruebas para asegurarnos de que el parcheo no afecte a otras funciones del programa.
Y todo esta en orden, pero podemos ser un poco mas elegantes y mejorar
el crack, si os fijais cuando arranca el programa vemos en el nag de presentacion
you have 0 dais tal tal podemos cambiar eso por lo que pondria si estariamos registrados, ale pues hacemos lo mismo que antes localizar la rutina responsable de que se imprima la frase, buscamos
you have en las string ref. y cliqueamos sobre la frase.
Y aquí tenemos toda la movidilla
:00424C2B FFD3 call ebx
:00424C2D 6685F6 test si, si
:00424C30 7410 je 00424C42
– este es el responsable
* Possible StringData Ref from Code Obj
->"written by Gary Calpo"
|
:00424C32 BABCCE4000 mov edx, 0040CEBC
:00424C37 8D4DD8 lea ecx, dword ptr [ebp-28]
* Reference To: MSVBVM50.__vbaStrCopy, Ord:0000h
|
:00424C3A FF15B4E44200 Call dword ptr [0042E4B4]
:00424C40 EB4A
jmp 00424C8C -- Importante
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00424C30(C)
|
* Possible StringData Ref from Code Obj ->"You have "
|
:00424C42 68ECCE4000 push 0040CEEC
:00424C47 E8542C0000 call 004278A0
:00424C4C 50
push eax
Haber, resumiendo!! tenemos un salto condicional en 00424C30 que si se ejecuta nos muestra los dias de evaluacion mediante el
You have y otro aviso similar que hay debajo de ese, bueno pues hagamos que no se ejecute el salto, y nunca llegara a
You have, ya que antes de llegar se encuentra con un salto incondicional en
00424C40 que nos saca volando, evitando que se impriman los avisos, osea que tenemos que inutilizar el salto condicional de
00424C30. cambiamos
00424C30 7410 je 00424C42 Por
00424C30 90 nop
00424C31 90 nop
localizamos la direccion de offset de nuestro salto 24030 y vamos al editor HEX cambiamos
7410 por 9090
Asunto solucionado, pero todavía se puede mejorar este crack evitando que se impriman avisos similares como en el about, pero eso lo dejo como deberes del manual.
Nada mas espero que os sirva de ayuda a todos los que empezais a crackear.
Y acordaros de restaurar la fecha de vuestro Windows.
saludos
karpoff /TNT!Cracker
|