ESTUDIO COLECTIVO DE DESPROTECCIONES
WKT Tutorialz Site
WKT
Programa TogglePopDesk v1.1A W95 / W98 / NT
Descripción Toggle PopDesk es un programa que te permite tener todos tus iconos del escritorio cómodamente ordenados y a la vista con un solo click de ratón.
Tipo Trial de 30 dias
Url http://www.toggle.com
Protección Serial Number
Dificultad 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
Herramientas W32dasm v8.93, UltraEdit v6.10a
Objetivo Simular estar registrados y obtención de un número de Serie Válido
Cracker Mr.WhiTe
Fecha 7 de Septiembre de 1999

Introducci≤n
No hay mucho más que contar sobre este programa. Simplemente comentar que se aprecia una LEVE evolución en la protección empleada respecto a otros programas de www.toggle.com. Véase mi Tutorial sobre el Ping+.

Que miedo!
Newbies: Seguimos avanzando :o)
El esquema de protección empleado por el programador del PopDesk deja bastante que desear. Pero nos servirá como una excelente cobaya para dar nuestros primeros pasos en la Ingenieria Inversa. ¿Ansioso?, bien.... vamos allá.

Al Atake
Al abrir el programa nos aparece una ventana con 2 botones:
  1. Order Now
  2. Ok
Que bonito! una frasecita que nos cuenta cosas muy curiosas sobre la trepidante historia de la informática. Y cambia cada vez que cargamos el Popdesk. Vale vale!! para ya, ¿o es que piensas estar todo el dia leyendote las frasecitas? jeje :o) . No apetece mucho ¿verdad?, sigamos. Tenemos dos opciones, pulsar ok, con lo cual nos aparece un icono al lado del reloj del windows y despues de ir al menu Settings, pestaña Ordering vemos ke HAY Opcion de registro. Total, que daba igual pulsar Order Now al principio que acabariamos en el mismo sitio. :o)

Enter your Registration Code.

Ummmm, sabroso serial!! :o)

Podriamos cargar el SoftIce (Depurador) y poner alguno de los breakpoints típicos como "BPX HMEMCPY" , "BPX GETDLGITEMTEXTA" , "GETWINDOWTEXTA" .......etc Y esperar a que caiga el Oso en el cepo. Pero como no me apetece nada reiniciar el pc para cargar el SoftIce vamos a tirar de Wdasm 8.93 (Desensamblador)

Abrimos el Wdasm y cargamos el archivo TogglePOPDESK.exe Bien, bien......¿y ahora qué? Pues ahora una opción típica es buscar el mensaje de error que nos aparece al introducir un número de serie incorrecto. Total, que volvemos al PopDesk y metemos un numero a boleo. Paff!! ventanuco que nos dice: "The registration information you have entered is not valid......etc". Vamos a buscar ese texto con el wdasm. Pulsamos el botón de String References y en esa lista deberia estar. Nos aparece hacia el final. Pulsamos doble click sobre ella y vemos que nos lleva a:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404964(C)
|
:0040497D 6A10                    push 00000010

* Possible StringData Ref from Data Obj ->"The registration information you "
                                        ->"have entered is not valid."
                                  |
:0040497F 68CC844200              push 004284CC
:00404984 EB09                    jmp 0040498F



Estupendo, estamos sobre la pista. Lo que necesitamos es evitar que el programa llegue a este mensaje. Así que subimos un poco y miramos desde donde se llega aquí.
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404964(C)



:0040495A E831FAFFFF              call 00404390
:0040495F 83F801                  cmp eax, 00000001
:00404962 6A00                    push 00000000
:00404964 7517                    jne 0040497D
:00404966 6A40                    push 00000040

* Possible StringData Ref from Data Obj ->"Registration is Complete!"
                                  |
:00404968 685C854200              push 0042855C
:0040496D E86B6A0100              call 0041B3DD
:00404972 6A00                    push 00000000
:00404974 8BCE                    mov ecx, esi
:00404976 E8C9F90000              call 00414344
:0040497B EB17                    jmp 00404994



Como podemos observar, al mensaje de error se llega desde un salto condicional en:
:00404964 7517 jne 0040497D

Vaya vaya. Sera este? no se, vamos a cambiarlo para que Nunca Salte.
Nos situamos en la linea
:00404964 7517 jne 0040497D

Y apuntamos el OFFSET. Abrimos el archivo con el Ultraedit y pulsamos la tecla GOTO (ir a) y escribimos lo siguiente: "0x4964" con lo que aterrizamos de lleno en un 7517, que como ya te habras dado cuenta en el Wdasm, es el código de la instrucción jne (75) + El desplazamiento (17). Este desplazamiento es el número de bytes que debe saltar el programa para llegar a la siguiente instrucción.Contados siempre en hexadecimal, por supuesto.

Cambiamos 7517 jne por 9090 NOP NOP .
NOP es una instrucción cuya increible utilidad es NO HACER NADA.
Vamos a probar el programa, a ver si casca o que pasa. ummmmm, carga...... vamos a meterle un número de serie a boleo...... por ejemplo "65465487" mismamente :o) . Anda!! si esta registrado!!! joer ke facilón ¿no?. No me lo creo. Cerramos y volvemos a cargarlo a ver........ coño!, ¿que pasa? Pero si no esta registrado!!
¿Que ha pasado? Este es un error típico cuando se esta empezando en la Ingenieria Inversa. Lo que ha sucedido es que simplemente forzamos al programa a enseñarnos siempre la ventana de "Registration is Complete". Pero el programa realmente no esta registrado.
¿Por que?. Ahora lo veremos. ;o)

Volvemos al "death listing" o listado muerto.
:0040495A E831FAFFFF              call 00404390
:0040495F 83F801                  cmp eax, 00000001
:00404962 6A00                    push 00000000
:00404964 7517                    jne 0040497D
:00404966 6A40                    push 00000040

* Possible StringData Ref from Data Obj ->"Registration is Complete!"


Si te fijas bien, justo encima del salto condicional hay una comparación, que es precisamente la que condiciona el salto. Umm, compara el registro eax con el valor 1. Si no es 1 el programa saltara a la ventanita de error. Hemos forzado el salto para que nunca se produzca. Donde esta el fallo? En esa comparación. Sabemos que al regresar de la llamada a :00404390 el valor contenido en eax debe ser 1 para que nos aparezca la ventana de "Registration is Complete". Asi que debemos entrar en esa llamada y asegurarnos de que devuelva siempre un 1 en eax. ¿Por que? pues porque ese trozo de código (El que comienza en :00404390) puede ser llamado desde otras partes del programa. Ahi es donde nos comprueba si estamos o no estamos registrados correctamente.

* Referenced by a CALL at Address:
|:0040495A   
|
:00404390 6AFF                    push FFFFFFFF
:00404392 68B0EE4100              push 0041EEB0
:00404397 64A100000000            mov eax, dword ptr fs:[00000000]
:0040439D 50                      push eax
:0040439E 64892500000000          mov dword ptr fs:[00000000], esp
:004043A5 51                      push ecx
:004043A6 55                      push ebp
:004043A7 56                      push esi
:004043A8 57                      push edi
.
.
.
.


Vemos que este trozo de código solamente es llamado desde :0040495A. Asi que en esta ocasión no tendremos que asegurarnos de que el código llegue a una parte donde ponga un 1 en eax ni tampoco forzarlo nosotros. Nos basta con evitar el salto condicional que modificamos antes para asegurarnos de que no nos lleva a la ventana de error. Seguimos.
A primera vista no vemos nada que nos pueda ser útil. Asi que bajamos un poco hacia abajo a ver que hay. Llegamos a:

:0040445E 3BC6                    cmp eax, esi
:00404460 0F85CB000000            jne 00404531
:00404466 E854890100              call 0041CDBF 
:0040446B 8B4004                  mov eax, dword ptr [eax+04]
:0040446E 56                      push esi

* Possible StringData Ref from Data Obj ->"RegNumber"
                                  |
:0040446F 681C834200              push 0042831C



Ummm, ¿que es esto? Una bonita referencia al número de registro. Y justo encima un salto condicional que la evita.

:00404460 0F85CB000000            jne 00404531

¿Qué tal si evitamos ese salto? Procedemos como en el caso anterior. Nopeamos "0F85CB000000" y nos queda "909090909090".
Vamos a probar el programa, a ver si casca o que pasa. ummmmm, carga...... vamos a meterle un número de serie a boleo...... por ejemplo "65465487" mismamente :o). Hey!! esta vez si que estamos registrados. :o)

Genial, ahora vamos a ver donde guarda la información de registro. Porque el numero de serie seguramente lo guarde en alguna parte. Con lo breve que fue esto tiene toda la pinta de meterlo en el registro del windows. Efectivamente, Nuestro serial es almacenado en:
[HKEY_CURRENT_USER\Software\Toggle Software\TogglePOPDESK\Registration]
"LastTipTime"=dword:37d48d7a
"RegNumber"=dword:00c55800
"Name"="MR.WHITE [WKT!]"
"Company"="[WKT!]"


Ummm.....ESE NO ES EL NUMERO QUE NOSOTROS METIMOS!!!!
(Entre Paréntesis tienes el número en formato decimal)
Yo tengo el serial: 32865017
Que raro , que raro..... será el serial correcto? Será tan mala esta protección que hasta te regala el serial correcto??? JO-DER!!
Vamos a probar......Borramos la clave \Registration del registro y volvemos a cargar el programa. Estaba claro, ahora sigue unregistered. Renombramos el TogglePOPDESK.exe a TogglePOPDESK.crk y el TogglePOPDESK.bak que nos creo el Ultraedit a TogglePOPDESK.exe. Metemos el serial 32865017 y.....Voilá! Es el serial correcto!! :o) (deskojone total)

La protección de este programa es mínima, pero se aprecia una pequeña mejora respecto a otros programas de www.toggle.com. Quizá en próximos tutoriales veremos si el programador es consciente de su "ignorancia".

Creo que no hace falta que te recuerde el propósito de estos tutoriales. ¿no?

NOTA: Estos tutoriales pueden contener errores intencionados (puede ser que el autor se haya saltado la explicación de algún paso, errores en las direcciones de memoria......etc).
El objetivo es que aprendas a crackear y que tengas ideas propias. ;o)
  
*▒▒========-*-*-*-* P E R S O N A L   G R E E T Z *-*-*-*-========▒▒*
    Dasavant, Niabi, r00ster, ZEncrakz, Azrael, Klimpong, Zor       
    Conde-Vampiro, Mac-Crack, Killer_P, ASTAGA, Harvestr, Iczelion    
    JosephCo, Carpathia, Taylor, Tapu, Ivanopulo, EgoistE, Torn@do,     
    JUANDA, Leoworld, ReKiem, Neural_N, Netking, Russ97,
	    Mr.Pink and of course all WKT Members ;o)



*------------------*
|WHISKEY KON TEKILA|
|Mr.WhiTe [WkT!99] |
|http://wkt.tsx.org|
|http://ecd.tsx.org|
*------------------*


[ Entrada | Documentoz GenΘricoz | WKT TEAM Main Site ]
[ Todo el ECD | x Tipo de Protecci≤n | x Fecha de Publicaci≤n | x orden AlfabΘtico ]