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

Programa Kryptel v3.62 W95 / W98 / NT
Descripción Programa para encriptado de ficheros
Tipo Shareware
Tipo de Tutorial [X]Original, []Adaptación, []Aplicación, []Traducción
Url http://inv.co.nz
Protección Time Limit de 30 días
Dificultad 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
Herramientas SoftIce v4.0 (opcional), W32dasm v8.9, UltraEdit v6.20b
Objetivo Registrar el progamilla en diez minutos
Cracker CRaCX
Fecha 27 de Mayo de 2000

INTRODUCCION

Bueno, pues aquí estoy con un nuevo tutorial para principiantes. Espero que el del ReadIris se haya entendido y haya sido útil.

Kryptel 3.62 es un software de encriptación de datos (su nombre ya lo dice...) que según sus autores protege con un algoritmo muy difícil de romper (ellos dicen imposible :-) )cualquier archivo que tengamos y al que no queremos que nadie tenga acceso. La encriptación se hace en función de una clave tan complicada como nosotros queramos, con la ventaja de que el interface es muy sencillo y se parece al explorador de Windows.

Ya que se trata de un programa de encriptado, se supone que la protección será interesante y enrevesada ¿no?. Un programador capaz de hacer algo así también sabrá proteger su software...

AL ATAQUE

Pues eso, instalemos el Kryptel en nuestro ordenador y ejecutémoslo como siempre... Aparece la típica pantallita que nos dice que es una versión de evaluación, que nos quedan 30 días de prueba y esas cosas. Damos a OK y jugamos un poco con el programilla... parece útil para esconder ciertas cosillas de los curiosos.

Hacemos lo de siempre, adelantar el reloj dos o tres meses y ver que pasa.... Sale una pantalla que dice que ha caducado y que no quiere volver a funcionar mientras no le introduzcas un serial válido. Ahora podemos hacer dos cosas: buscarnos el serial o buscamos la comprobación que le dice que lo hemos registrado... Personalmente prefiero la segunda porque es más rápido y deja más tiempo para hacer otras cosillas...

PRIMERA SORPRESA:

Cómo el programa ya ha caducado, volvamos a poner el reloj del ordenador en hora para evitar problemas con otras aplicaciones. Por curiosidad ejecutamos otra vez el brw.exe y vemos que aún nos quedan 30 días de prueba (¿? ...si había caducado...); genial, sólo mira la fecha y la compara con algo, pero no escribe en ningún sitio que ha caducado, con sólo cambiar la fecha ya funciona siempre. :-)

SEGUNDA SORPRESA:

Bueno, no puede ser tan fácil... seguro que tiene truco en algún sitio, así que vamos a desensamblarlo con el WDasm y ver las SRef para ver que podemos hacer por ahí ( nos interesan las que dicen "Wrong registration code" (para los que no sepan inglis pitinglis "Código de registro incorrecto") y la que dice "The evaluation period has expired" ("El período de evaluación ha expirado"). Haciendo doble click sobre ellas aparecemos en el código que transcribo editad o a continuación:


:00404106 FF1578484100 Call dword ptr [00414878]

:0040410C A17C234100 mov eax, dword ptr [0041237C]

:00404111 390578234100 cmp dword ptr [00412378], eax

:00404117 7510 jne 00404129<- ¡OOPS! Caliente caliente

:00404119 85C0 test eax, eax

:0040411B 750C jne 00404129<- ¡Otra vez!

:0040411D C6059034410001 mov byte ptr [00413490], 01<-Se parece a un flag...

:00404124 E9D5000000 jmp 004041FE<- Nunca formará la MessageBoxa si llega hasta aquí ahora.

:00404129 8B0D742B4100 mov ecx, dword ptr [00412B74] <- Rutina que se ejecuta cuando no estamos registados

:0040412F 8B155C2B4100 mov edx, dword ptr [00412B5C]

:00404135 3BCA cmp ecx, edx

:00404137 7F6D jg 004041A6 <- Salta si ecx es mayor que edx (superados los 30 días)

:00404139 A1702B4100 mov eax, dword ptr [00412B70]

:0040413E 7C08 jl 00404148 <-Salto normal si no ha caducado

:00404140 3B05582B4100 cmp eax, dword ptr [00412B58]

:00404146 775E ja 004041A6 <- Cuidadín con esta dirección

:00404148 8B1D582B4100 mov ebx, dword ptr [00412B58]

:0040414E 2BD8 sub ebx, eax

:00404150 8BF2 mov esi, edx

:00404152 1BF1 sbb esi, ecx

:00404154 BF92170000 mov edi, 00001792

:00404159 3BF7 cmp esi, edi

:0040415B 7F49 jg 004041A6<- Salta si esi es mayor que edi ( segunda comprobación de superados los 30 días por si has superado la primera )

:0040415D 7C08 jl 00404167<-Salto normal si no ha caducado (pero lleva el flag a 0 -> versión evaluación)

:0040415F 81FB008064F8 cmp ebx, F8648000

:00404165 773F ja 004041A6 <- Última comprobación que nos lleva a esta dirección

:00404167 2B05582B4100 sub eax, dword ptr [00412B58]

*************

* Reference To: USER32.PostMessageA, Ord:01B1h

|

:0040419E FF1538474100 Call dword ptr [00414738]

:004041A4 EB58 jmp 004041FE

*************

* Possible Reference to String Resource ID=00570: "The evaluation period has expired! <- Aquí está la referencia

Please, register the sof"

*************

:004041D2 683A020000 push 0000023A

* Reference To: USER32.MessageBoxA, Ord:0195h

:004041F8 FF158C474100 Call dword ptr [0041478C]


Ahora llega el momento de pensar un ratito... sabemos seguro que si se ejecutan las llamadas a PostMessageA y MessageBoxa no vamos a ningún lado, así que habrá que buscar hacia arriba algo que le diga que no vaya a esa dirección o a sus cercanías... ( jn , jnz , jg , jge, ja y similares). Este método es el típico "de libro", y aparece en muchos programas shareware y en algunas aplicaciones comerciales (échale un vistazo a la Demo del Vegas Pro de Sonic Foundry y verás..)
. Creo que no hace falta decir lo que hay que hacer con esos dos saltos condicionales, así que carga el UltraEdit y cambia esos 75 tan feos por algo más bonito, no sé.. un 90 quizás (NOP).

Fijaros en la instrucción que aparece señalada en verde antes del salto incondicional. Lo que hace es poner un uno en esa dirección de memoria señalando que estamos registrados y que hemos pagado por el programa, si cambias el 01 por 00 con el SoftIce mira lo que pasa... A ese tipo de instrucciones es a lo que se le llama flag, y más o menos funciona como un semáforo 0 = rojo y 1 = verde.. :-)...

La razón de elegir esos puntos para poner nuestro parche es porque los demás condicionales que hay por debajo son los encargados de verificar las fechas del ordenador y otra interna del programa (almacenadas en ecx y edx que da la impresión de que están encriptadas..), si la primera es mayor salta a 4041A6 y nos deja sin programa, sino continúa y aún hace dos verificaciones más antes de llevarnos a 4041FE con el flag puesto a 0 (no estamos registrados). Si hubiésemos parcheado más abajo en los jg para que nunca saltase a 4041A6 lo único que habríamos hecho es conseguir que nunca mostrara la pantalla de caducidad ni dejara de funcionar, pero seguiría siendo una versión de evaluación.

Ok, ahora con el brw.exe parcheado vamos a ejecutarlo. Ya no aparece la nag que recuerda que es una versión de evaluación... y ya no aparece lo de Evaluation Copy en la ventana.... !, vamos al About y dice que la copia está licenciada a alguien... Como se puede ver la comprobación de si estamos registrados o no y si la fecha es correcta o no están juntas y pegaditas a la línea que nos avisa que ha caducado ...

Bueno, pues sólo nos queda buscar la forma de meter nuestro nombre en el About. Lo ponemos en el Kryptel.ini y listo, pero visto lo visto, vamos a echar un vistazo al codigo que nos dice que el serial no es válido:

:004012A2 E87D000000 call 00401324

:004012A7 83C40C add esp, 0000000C

:004012AA 84C0 test al, al

:004012AC 752D jne 004012DB <-Más de lo mismo

:004012AE 6810200000 push 00002010

* Possible StringData Ref from Data Obj ->"Registration Error"| <-Caption de la MessageBoxA

:004012B3 682C214100 push 0041212C

* Possible StringData Ref from Data Obj ->"Wrong registration code." <- El string de marras

:004012B8 68D0204100 push 004120D0

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0040127C(U)

:004012BD FF7508 push [ebp+08]

* Reference To: USER32.MessageBoxA, Ord:0195h

 

Sobra decir lo que hay que hacer para que acepte cualquier cosa que le metas..... Si sigues mirando hacia arriba hay un código exactamente igual para el nombre.

RESUMIENDO:

Para conseguir que el Kryptel nos reconozca como usuarios registrados hay que anular los dos saltos condicionales en 404117 y 404124, y para que nos admita cuaquier serial el que hay en 4010AC convertirlo en un salto incondicional. Fin de la historia del Kryptel.

REFLEXIONES:

Un software de encriptación que dice ser indescifrable, por lo menos debería dar algo más de trabajo, al suponerse que el programador tiene conocimientos suficientes para proteger como Dios manda su programa. De todas las protecciones que he tratado en el poco tiempo que llevo en esto, está es la más fácil de cascar con diferencia.., pero se agradece que aún haya software así para pasar el tiempo y que los newbies aprendamos... no todo van a ser achivos PE, VBox y antidebuggers (últimamente las pillo todas juntas ...).

AGRADECIMIENTOS:

A WKT por poner a disposición de todo el mundo el ECD, a KUT por su Forum, a ArcangeL por ayudarme con el Vbox y a todos los que ponéis a disposición de los demás vuestro conocimiento...

Próximamente : Protección de Allaire HomeSite 4.5 y creación de un loader con RPP.

[ 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