ESTUDIO COLECTIVO DE DESPROTECCIONES
Última Actualizacion: 25/10/2001

Programa Drive Doppler v1.20 RC 2 W95 / W98 / NT
Descripción Utilidad para crear y restaurar imagenes del disco duro
Tipo Shareware 21 dias
Tipo de Tutorial [X]Original, []Adaptación, []Aplicación, []Traducción
Url http://www.pinoyware.com
Protección Time Limit 21 Dias
Dificultad 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
Herramientas SmartCheck 6.03, W32dasm-VB, Editor Hex
Objetivo Encontrar un S/N Valido. Evitar que el programa Expire
Cracker Karpoff
Grupo TnT!
Fecha 20 de Noviembre de 1999

INTRODUCCION

Hola gentes!!  en este proyecto intentare explicar dos formas de crackear un mismo programa con diferentes herramientas, vamos a utilizar el SmartCheck, este es un debugger para Visual Basic creado por Numega(como todo lo de Numega excelente), es muy importante tener bien configurada esta herramienta para que nos muestre lo que queremos ver. Para configurar el smartcheck adjunto unos gif sacados de un manual que no encuentro en este momento, pero con los gif no teneis ningun problema. AQUÍ

A pesar de lo que podáis pensar esta herramienta es muy fácil de usar si el objetivo es sacar un Serial Number valido,  el tema se complica si se quieren seguir algún proceso especifico etc. 

 

AL ATAQUE

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

Si teneis alguna duda. kf_karpoff@hotmail.com

[ Entrada | Documentos Genéricos | WkT! Web Site ]
[ Todo el ECD | x Tipo de Protección | x Fecha de Publicación | x Orden Alfabético ]
(c) Whiskey Kon Tekila [WkT!] - The Original Spanish Reversers.
Si necesitas contactar con
nosotros , lee esto antes e infórmate de cómo puedes ayudarnos