|
|
 |
ESTUDIO
COLECTIVO DE DESPROTECCIONES
Última Actualizacion:
25/10/2001
|
 |
|
Programa |
Como crackear por
Estado+Porcino
Capítulo 3
Corta historia del tiempo.
Norton Crashguard Deluxe 3.0
|
W95 / W98 / NT |
Descripción |
Proteccion del sistema |
Tipo |
Trial de 30 dias |
Tipo de Tutorial |
[X]Original, []Adaptación,
[]Aplicación, []Traducción |
Url |
http://www.symantec.com |
Protección |
Cinderella. Time
Limit 30 Dias |
Dificultad |
1) Principiante,
2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista |
Herramientas |
W32dasm8.X, SoftIce |
Objetivo |
Simular estar registrados. |
Cracker |
Estado+Porcino |
Grupo |
Whiskey
Kon Tekila |
Fecha |
Mayo 1998 |
INDICE |
INTRODUCCIÓN
TIPOS DE
PROTECCIONES TEMPORALES
UN POCO DE
TEORÍA
EN BUSCA
DE LA FRASE MÁGICA
EL REGISTRO
DEL SISTEMA
COMO CRACKEAR
Norton CrashGuard Deluxe 3.0:
- PRIMERA EXPLORACIÓN.
- PRIMERA SORPRESA.
- SEGUNDA SORPRESA.
- LA APROXIMACIÓN
DIFÍCIL:
- AL ATAQUEEEEEEEEEEEEEE
- LA FECHA DE CADUCIDAD
- CHECKSUMS PARAINOCOS
- CHECKSUMS HASTA EN LA SOPA
- LA MISMA PROTECCIÓN EN TODOS SITIOS
- LA APROXIMACIÓN
FÁCIL:
- REUNIENDO LAS PIEZAS
- LA COMPRA VIRTUAL
- MODIFICANDO EL REGISTRO
- MODIFICACIÓN DE LA VARIABLE DEL REGISTRO DEL SISTEMA
MORALEJA
|
INTRODUCCION |
¡Saludos Familia!
Bastante tiempo desde mi último artículo, lo sé, pero
ya estamos de vuelta. Nos ocuparemos ahora de las protecciones
temporales, veremos un poco de teoría y lo aprendido lo
aplicaremos al programa Norton CrashGuard Deluxe 3.0 desde
dos puntos de vista, el temporal y el de la password pa
registrarse.
|
TIPOS
DE PROTECCIONES TEMPORALES |
Demos un peque repaso a los
diferentes esquemas de protección temporal que nos podemos
encontrar (recomiendo la lectura del Capítulo 4.1 de +ORC
)
- CINDERELLA. El programa funciona durante una cierto periodo
de días (digamos 15 días) comenzando desde la fecha de instalación.
- BEST_BEFORE. El programa funciona durante una cierto período
de tiempo independientemente de la fecha de instalación. El
programa caduca el 30/12/97.
- COUNTDOWN. El programa funciona sólo durante unos minutos
o unos segundos.
- QUIVER. El programa funciona sólo durante un número determinado
de ejecuciones. Realmente no es una protección temporal, pero
su esquema de protección se parece mucho al de los otros tres
tipos. |
UN
POCO DE TEORIA |
Analizemos como funciona una
protección temporal.
Los "inteligentes programadores" ofertan sus productos completos
al público con ridículas protecciones.
Le colocan una fecha de caducidad, pasada la cual, el programa
no funciona. Esta idea la utilizan sobretodo las grandes compañías
como Micro$oft, Corel, o Symantec.
La idea es distribuir masivamenete sus productos aprovechando
los estupendos canales de distribución que ofrecen las revistas
de Soft. Una vez inundado el mercado, el usuario disfrutará
del producto, se acostumbrará a él, hasta que le sea indispensable
y tenga que comprarlo a un precio desorbitado . Esta táctica
no es nueva, sino preguntad a algún camello, o como la CIA
distribuyo la heroína entre el Black Power.
Pensemos un poco. ¿Cómo conoce el programa que ya ha caducado
el período de evaluación?.
Supongamos que tenemos una evaluación e 15 días e instalamos
nuestro programa el 1 de febrero.
Sumando la fecha de instalación (1 Febrero) más el período
de prueba se obtiene la fecha de caducidad:15 febrero (El
día en el que lo instalas cuenta como día hábil).
El programa, lo primero que calcula es si la fecha actual
es menor o igual que la fecha de caducidad, y en tal caso,
se ejecuta normalmente.
Si es mayor, dará un bonito mensaje "El período de evaluación
ha expirado".
Una cosa está clara, el programa debe guardar alguna de las
dos fechas siguientes (o las dos):
A - Fecha de Instalación y el período de evaluación.
B - Fecha de caducidad.
Lo normal es la opción B. Al instalarse el programa, se calcula
la fecha de caducidad y se guarda en algún sitio. Normalmente
se guarda en el registro del sistema bajo algún nombre estúpido,
aunque se puede guardar en el win.ini, system.ini, fichero
oculto, o algún fichero que parezca inofensivo. Lo cierto
es que debe guardarlo.
Existe una variante, y es que la fecha de caducidad esté dentro
del ejecutable. Un ejemplo lo tenemos en la evaluación del
Hotmetal 4.0., del tipo BEST_BEFORE, que dentro de su ejecutable
aparecía 31/12/97. Madre de Mitra, qué estúpidos pueden llegar
a ser los zombi-programadores. Dependiendo de la pericia del
programador la fecha de caducidad puede estar o no encriptada
para ocultarla de la vista del usuario y para que sea difícil
modificarla. Resumiendo, el programa debe guardar la fecha
de caducidad y comprobarla al inicio del programa con la fecha
actual.
Ya sabemos de donde saca la fecha de cadudidad, pero, ¿de
dónde saca la fecha actual?. Normalmente (el 99% de las veces)
se extrae con una llamada a la función getlocaltimeo o getsystemtime.
Pero se puede extraer viendo la fecha de algún fichero que
se modifique periódicamente como el system.dat o el bootlog.txt.
Los puntos de ataque a este esquema son claros:
- Atacar en el cálculo de la fecha de caducidad.
En vez de sumar 15 días sumamos 15 siglos. Esta aproximación
es difícil por que el cálculo se realiza una única vez, generalmente
en la instalación.
- Modificar la fecha de caducidad.
Si la fecha está encriptada, necesitaríamos construir un algoritmo
de encriptación para la nueva fecha que deseemos introducir.
Por lo que en general, puede ser complicado.
- Forzar la caducidad del programa. Se analizan los mensajes
que da el programa y a partir de ellos se le sigue la pista
hacia atrás. Es una táctica muy utilizada.
- Atacar en la comprobación de la fecha actual y la fecha
de caducidad. Simplemente modifica la comprobación para que
siempre estemos en el período de evaluación. Esta es una opción
elegante.
Alguien podría pensar que si se echa pa trás el reloj de W95,
la protección temporal se elimina. Para evitar esta "trampilla",
los programadores colocan código como el siguiente:
SI está activada la marca de caducidad ENTONCES el programa
ha caducado y se finaliza el programa
DE LO CONTRARIO SI fechaActual>fechaCAducidad ENTONCES activar
marca de caducidad
Como veis si os pasais de la fecha de caducidad, se activa
una marca que impedirá que se ejecute el programa aunque modifiquéis
el reloj. Esta marca se guarda en los mismos sitios donde
se guarda la fecha de caducidad.
A veces, la protección temporal queda eliminada introduciendo
una palabra clave, por lo que a veces es más rápido atacar
por la password.
Para averiguar el fichero que contiene la protección temporal,
se puede usar el SoftIce y poner un bpx getlocaltime, o bien
una nueva técnica, muy útil no sólo para protecciones temporales.
Veámosla. |
EN
BUSCA DE LA FRASE MAGICA |
Todos los mensajes de un programa,
los de error, los de felicitación, los de aviso, no son más
que cadenas de caracteres que deben de residir en un fichero.
Para protecciones temporales es útil buscar mensajes como
'expire', 'demo', 'evaluation'. Si localizamos estos mensajes
habremos localizado, generalmente, el fichero que contiene
la protección y podemos desensamblarlo o pasarle el Softice.
Extendiendo esta idea, basta con buscar los mensajes 'unregistered',
'register' para localizar el programa con la protección en
esquemas por palabra clave. Recomiendo una herramienta excelente
para buscar cadenas, es el programa sr32.exe, Search & Replace
for Win 3x 95/NT, Funduc Software, Inc. (www.funduc.com).
Bajáoslo y crackearlo, tiene una bonita y sencillota protección
del tipo CINDERELLA. |
EL
REGISTRO DEL SISTEMA |
El Registro del Sistema no es
má que un fichero gigante (system.dat) donde W95 y el esto
de los programas dejan sus miserias, osea, sus variables,
sus parámetros de configuración, su fecha de caducidad, sus
marcas de caducidad. Muchos cracks sólo necesitan modificar
adecuadamente el system.dat Es muy conveniente que le echéis
un vistazo, aprenderéis mucho y podréis modificar muchos de
los parámetros del Windoze. Para editar el registro, se utiliza
normalmente el programa regedit.exe que encontrareis en vuestro
directorio de Windows. Recomiendo que lo ejecutéis con el
parámetro /v ,osease, c:\windows\regedit /v |
COMO
CRACKEAR NORTON CRASHGUARD DELUXE |
Objetivo: Norton CrashGuard Deluxe 3.0.
Versión: 3.0
Nombre del ejecutable: ncgd3w95.exe
Website: http://www.symantec.com
Tamaño del ejecutable: 11.964.671 bytes.
Tipo de protección: Cinderella.
Dificultad: Medio.
Tiempo de crackeo: 2 horas.
Herramientas: W32dasm8.X, SoftIce.
En esta ocasión, nuestro objetivo es una gran y abominable
compañia, la Symantec y uno de sus muchos y abominables
producto: Norton CrashGuard Deluxe 3.0 Básicamente, el programa
consigue, en algunas ocasiones, que las aplicaciones que
se cuelgan no bloqueen al Windoze. Cosa de agradecer dado
el alto índice de siniestralidad de las aplicaciones y del
propio Windoze. Además de tener una B.D de información sobre
el PC, una antivirus ... Se protege con protección temporal
CINDERELLA de 30 días.
|
LA
PRIMERA EXPLORACION |
Instalamos el programa y antes
de finalizar la instalación ya nos pide que nos registremos,
mal asunto, quieren cobrar antes de que probemos su producto,
su codicia de palpa ante incluso de ver el programa.
Una vez instalado, nos ha metido a escondidas varias cosas:
- Una Dll con un extraño nombre: 30vfv6vn.sys situada en el
raiz de la unidad c: El nombre varía en cada instalación,
sólo permanece fijo *fv6vn.sys, los 3 primeros caracteres
son variables. Sospecho que sólo es un indicador para ver
si el programa ya ha sido instalado.
- Una aplicación en el arranque del Windoze Norton CrashGuard
Deluxe Autocheck. Si pulsais CRTL+ALT+SUPR podreis ver la
aplicación por dos veces con el nombre de checkup Su misión
es detectar cualquier cambio en el reloj del sistema para
bloquear inmediatamente la aplicación si nos pasamos de la
fecha de caducidad.
Además se crean dos directorios Norton CrashGuard y Norton
CrashGuard Deluxe y nos aparece un bonito icono en el escritorio
del Windoze con forma de escudo y con el original nombre de
Norton CrashGuard Deluxe. Y si por si fuera poco, dos iconos
en la barra de tareas, la aplicación propiamemte dicha (escudo
gris con una N en azul) y una historia de los cuelges de los
programas (un reondel con una marca de verificación).
Si pulsamos en el icono del escritorio nos aparece una ventana
donde nos dice que nos compremos INMEDIATAMENTE la aplicación
a un precio fabuloso, $45.95, (unas 7.000 pelas) En la parte
inferior aparecen el número de días que restan para el programa
deje de funcionar. Además aparecen unos bonitos botones en
los que nos podemos registrar por Internet, probar el producto
o cancelar. Si probamos el producto, aparece la ventana principal
con todas pas opciones. Si elegimos la opción de registro,
aparece una pantalla donde introducimos nuestros datos y nuestra
tarjeta de crédito. |
PRIMERA
SORPRESA |
El sistema de pago no es de
la propia Symantec, sino de la empresa Release Software Corporation:http://www.releasesoft.com)
y su programa SalesAgen. Es la primera vez y veo que Symantec
no controle todos los aspectos de una aplicación.
|
SEGUNDA
SORPRESA |
El fichero a estudiar es el
Norton CrashGuard\cgmain.exe (229.376 bytes) por una simple
razón, tiene el único fichero que tiene el icono que el del
programa principal que aparece en la barra de tareas. Pero,
en el mismo directorio aparece un extraño fichero llamado
cgmain.dl_ (743.936 bytes). Mu raro, una librería aparentemente
comprimida (y por tanto no utilizada) con un tamaño más grande
que el ejecutable. Por que no está descomprimida la librería,
¿quizás por que no estamos registrados? :-) Además aparece
un ejecutable llamado cgmaipop.exe , cuyo nombre es mu parecido
al fichero del programa que estamos analizando cgmain.exe
y tiene un icono que tiene las letras RS, que curioso, justo
las Iniciales del la empresa que dedica a comercializar el
producto: Release Software. Si intentamos ejecutar cgmaipop.exe
aparece que está preparando el Software. PREPARANDO?, ¿es
que hay que precalentar los programas antes de instalarlos?.
Luego aparece un mensaje de error indicando que no podemos
ejecutar la aplicación, ¿quizás por que no estamos registrados?
:-)
Por si fuera poco, aparece otro fichero cgmaitky.dll (257.977)
con un nombre muy parecido al de la aplicación que queremos
estudiar y aproximadamente con el mismo tamaño. Y el colmo,
en el otro directorio, donde reside el menú de la aplicación
Norton CrashGuard Deluxe\CGDeluxe.exe aparecen los ficheros
CGDelpop.exe con el logo RS y CGDeltky.dll. Análogamente para
Norton CrashGuard Deluxe\checkup.exe (el programa de testeo
de la fecha del sistema) CheckUp.dl_,Checktky.dll
Todo esto huele a chamusquina, seguro que estos ficheros tienen
algo que ver a la hora de registrar el programa, y como veremos
en la segunda pate del artículo, tienen que ver y MUCHO. |
LA
APROXIMACION DIFICIL |
AL
ATAQUEEEEEEEEEEEEEE
Podríamos analizar esos extraños ficheros que han aparecido,
y lo haremos en la segunda parte del artículo. Ahora atacaremos
formalmente a Norton CrashGuard\cgmain.exe para analizar su
esquema CINDERELLA de 30 días.
Desensamblamos el programa con el w32dsam y obtenmos 3.5 MB
de fichero. En las funciones importadas encontramos Addr:00045CC8
hint(00F5) Name: GetLocalTime . Bien, bien, asi que, aparentemente,
está usando la tipica rutina para obtener la fecha del sistema.
Si vemos quien la utiliza, estaremos en plena rutina de comprobación
de fecha: fechaActual>fecha de caducidad?
Solamente aparece la función getlocaltime que es utilizada
una vez en el programa(¿por qué lo ponen tan fácil?)
* Referenced by a CALL at Addresses:
|:0040D5B4 , :0040DA44 , :0040DD3F; La rutina es llamada 3 veces
:0041E200 81ECCC000000 sub esp, 000000CC
:0041E206 8D442410 lea eax, dword ptr [esp+10]
:0041E20A 50 push eax
* Reference To: KERNEL32.GetLocalTime, Ord:00F5h
|
:0041E20B FF15BC544400 Call dword ptr [004454BC]
:0041E211 8D4C2400 lea ecx, dword ptr [esp]
:0041E215 51 push ecx
* Reference To: KERNEL32.GetSystemTime, Ord:0135h
|
:0041E216 FF15B8544400 Call dword ptr [004454B8]
.....
Además aparece la llamada tambien a GetSystemTime.
Tras la llamada a GetSystemTime los valores de año, mes, día,....
son extraídos de la pila y guardados en los registros :0041E21
mov dx, word ptr [esp+0A] De los registros pasan a unas variables
globales :0041E2AA mov dword ptr [0042F7F0], edx
Recordad, cualquier posición de memoria fija como [0042F7F0],
es utilizada como variable global por el programa. Despues
se reintroducen en la pila el año, el mes, el día,.... y se
llama a la rutina :0041E310 call 00423420.
En esta rutina es donde se realiza la encriptación de la fecha,al
finalizar, devuelve en eax la fecha encriptada y además de
guardarse en :0041E323 mov dword ptr [ecx], eax
Es más, las tres llamadas a :0041E200 obtendrán en eax la
fecha encriptada de vuelta por call 00423420. Nos os voy a
aburrir con diciendo como es la rutina de encriptación. Simplemente
decir que utiliza la siguiente fórmula :
t=seconds+(secondsMinute*minutes)+(secondsHour*hour)+(secondsDay*day)+
(secondsDay*daysMonth[month])+(secondsYear*(year-1900))+(secondsDay*(((year-1900)-1)/4));
fin=(t+fixValue);
Siempre es más fácil comparar un número que comparar años,
días, meses,... por eso la fecha se transforma en un número.
He construido un pequeño programa NORTON.EXE en C que realiza
todo el proceso de encriptación de la fecha. Este programa
esta incluido con la version en formato
*.doc[eporc3.zip - MISSING] de este texto. Los fuentes de estos programas puedes
bajarlos aqui.
Bien, lo lógico, es que una vez encriptada la fecha se compruebe
con la fecha de caducidad que debe estar encriptada. Si analizamos
las tres llamadas a :0041E200 tenemos:
* La llamada desde :0040D5B4, se limita a guardar la fecha
encriptada :0040D641 mov dword ptr [esi+000002AC], eax
* La llamada desde :0040DA44, :0040DD3F hacen prácticamente
lo mismo, mueven la fecha encriptada que estaba en eax a un
registro, hacen una llamada a call 40DC40 y despues comprueban
la fecha encriptada con [edi+00000284]
En concreto para la llamada desde :0040DD3F
:0040DD4B mov ebx, eax
:0040DD62 push ebx
:0040DD63 call 0040DC40
:0040DD7B cmp dword ptr [edi+00000284], ebx
:0040DDBF ja 0040DDE4
En concreto para la llamada desde :0040DA44
:0040DA54 mov edi, eax
:0040DA5F push edi
:0040DA60 call 0040DC40
:0040DAB2 cmp dword ptr [ebx+00000284], edi
:0040DAB8 ja 0040DACE
Esto suena a una doble comprobación temporal, serán desconfiados
estos chicos.
¿Pero que hace la llamada a call 0040DC40?, para ello cerramos
el cgmain.exe: botón derecho sobre el icono de la N y el escudo
y exit. Abrimos el loader del Softice y seleccionamos Norton
CrashGuard\cgmain.exe y ponemos un bpx 40DC40 y lanzamos el
programa. Aparecemos en el Softice, pulsamos F10 y vemos que
ha sido llamada desde :40DD63. Cerramos el cgmain.exe otra
vez, ponemos el softice un bpx 40DD63 y lanzamos el programa
y prestamos atención a ebx que es el que contiene la fecha
encriptada.
La llamada a call 0040DC40 simplemente realiza la siguiente
comprobación
:0040DC56 cmp edx, eax; compara fechaAnterior,fechaActual
:0040DC58 ja 0040DC64; Salta si eres un mal chico.
fechaAnterior es la fecha encriptada el la que se arrancó
por última vez el programa, fechaActual es la fecha encriptada
obtenida de :0041E200. Es una simple comprobación para ver
si hemos echado para atrás el reloj.
La comprobación
cmp dword ptr [ebx+00000284], edi; Análogamente cmp dword
ptr [edi+00000284], ebx
ja 0040DACE; Análogamente ja 0040DDE4 Comprueba fechaCaducidad
> fechaActual Si es mayor estamos en el período de prueba.
LA FECHA DE CADUCIDAD
La pregunta es, ¿de donde se guarda la fecha de caducidad
encriptada? .Poniendo un bpr ebx+00000284 ebx+00000284+5 descubrimos
que la fecha de encriptación se guarda en el registro del
sistema y es recuperada por la llamada a la función :40BD89
RegqueryValueEXA. En concreto, se guarda en HKEY_CLASSES_ROOT\Ultxfile\Format\MSHAEZDOC\write
En mi caso, el valor de write es:
01 02 03 04 05 06 07 08
01 00 00 00 05 B7 FF FF F8
02 00 00 00 00 00 00 10 00
03 08 00 00 00 08 00 00 00
04 00 00 00 06 B3 36 71 A1
05 FB 0F 81 A5 20 80 00 06
06 B7 9F A9 A0 00 00 00 00
07 00 00 00 06 B3 36 71 A0
08 C3 28 00 00 18 00 00 00
09 00 00 00 00 00
La fecha de caducidad está en write(5,7) hasta write(6,5)
ambos inclusive. Lo curioso, es que la fecha está codificada,
por ejemplo si la fecha de caducidad es 0034F5F3D6 se guarda
en write 0006B79FA9A000. La rutina de encriptación está en
:40C0D6 y se basa en la operación or
:0040C0D6 8A18 mov bl, byte ptr [eax]
:0040C0D8 8A11 mov dl, byte ptr [ecx]
:0040C0DA C0E305 shl bl, 05
:0040C0DD 48 dec eax
:0040C0DE C0EA03 shr dl, 03
:0040C0E1 49 dec ecx
:0040C0E2 0ADA or bl, dl
:0040C0E4 4E dec esi
:0040C0E5 885101 mov byte ptr [ecx+01], dl
:0040C0E8 885901 mov byte ptr [ecx+01], bl
He creado dos programas DECODE que decodifica el valor de
write y CODE que codifica un valor de fecha para introducirlo
en write.
CHECKSUMS PARAINOCOS
Los puntos de ataque son claros
1.- Parchear las comprobaciones en el ejecutable.
2.- Introducir una fecha caducidad en el año 30000.
1.- Si parcheamos el programa, se produce un error tan gordo
que se casca windows. Esto se puede deber a que hemos crackeado
mal obien exite un checksum. Para salir de dudas, basta con
modificar alguna cadena de caracteres del ejecutable original
Por ejemplo "not be run in DOS mode" lo pasamos a "not be
RUN in DOS mode", si se casca es que hay un checksum, como
en este caso.
Un checksum es una comprobación para ver si el ejecutable
se ha modificado, normalmente se realiza sumando (XOR) los
bytes del ejecutable y guardando este valor algún sitio (ejecutable,
registro del sistema). El programa al arrancar suma (XOR)
los bytes del ejecutable actual y comprueba la suma con el
valor que tenía guardado. Si hay algún problema es que un
virus o un cracker ha modificado el programa y esto nunca
es bueno para el programador.
En el caso del Norton CrashGuard Deluxe 3.0, el checksum se
realiza de otra forma. Os acordais del fichero cgmaitky.dll,
si hombre ese que nos parecía tan sospechoso. Pos bien, guarda
todos los bytes del cgmain.exe encriptados (de ahí que tuvieran
un tamaño tan parecido ambos ficheros). La rutina de checksum,simplemente
consiste en coger de 16 en 16 los bytes del cgmain.exe encriptarlos
y ver si son iguales a 16 bytes del fichero cgmaitky.dll.
Si existe alguna diferencia se produce un error de protección
general y se casca todo.
Para complicarlo todo, las rutinas de comprobación (ver si
los 16 bytes del ejecutable son iguales a los 16 bytes del
cgmaitky.dll) no están metidas en un bucle, sino que estan
a lo extenso. Es decir, hay una rutina de comprobación para
los 16 primeros bytes, otra disinta para los 16 siguientes.
Si queremos parchear el checksum, habrá que modificar unas
30 comprobaciones. Es curioso, pero existe un flag que desactiva
la llamada al checksum :0040862D jne 00408695 si obligamos
a saltar siempre, evitamos el checksum. PERO, ¿POR QUE EXISTE
UN FLAG PARA EVITAR EL CHECKSUM?, ¿es que el programa cgmain.exe
va a modificarse? Como veremos más tarde, así ocurrirá.
2.- Con el programa NORTON se crea la fecha de caducidad que
queremos, con el programa CODE se encripta y ya sólo hay que
introducir el resultado en HKEY_CLASSES_ROOT\Ultxfile\Format\MSHAEZDOC\write
en las posiciones write(5,7),write(6,5)
CHECKSUMS HASTA EN LA SOPA
Cuando la fecha de caducidad ha vencido, el programa deja
de funcionar parcialmente, si analizamos el porqué descubrimos
que el byte [esi+00000568] controla todo el meollo. En concreto,
Si [esi+00000568] = 02 You cannot Run this Application
Si [esi+00000568] = 20 Your computer application source has
changed
Si [esi+00000568] = 08 Your free trial period is over
Si [esi+00000568] = 04 OK
Pero, ¿cómo se rellena este byte?. Siguiendo la pista hacia
atrás descubrimos que se carga a partir de HKEY_CLASSES_ROOT\Ultxfile\Format\MSHAEZDOC\open
00 01 02 03 04 05 06 07 1 00 00 00 00 30 00 00 00 2 00 00
00 00 00 00 10 00 3 08 08 00 00 20 00 00 00 4 00 00 00 00
00 00 00 00
En concreto de write(3,4). Hay que tener cuidado por que está
encriptado, así que hay que utilizar el programa DECODE. Osea
, si en write(3,4)=20 indica que al desencriptarlo [esi+00000568]=4.
Si write(3,4)=40 la fecha de caducidad ha vencido.
Si ha pasado la fecha de caducidad y asignamos write(3,4)=20,
el programa replica diciendo que hemos trampeado los recursos.
¿QUE PASA AQUÍ?.
Mu facil, HAY UN CHECKSUM en la sección HKEY_CLASSES_ROOT\Ultxfile\Format\MSHAEZDOC\open.
Estos es paranoico, un checksum en el propio registro del
sistema. En concreto, el checksum está en write(1,4). Se deja
como ejercicio localizar y destruir este checksum.
LA MISMA PROTECCIÓN EN TODOS
SITIOS
Aunque parezca increíble, los ficheros CGDeluxe.exe y CheckUp.exe
tienen exactamente la misma protección que cgmain.exe y además
en los mismos offset, osea en las mismas direcciones de memoria.
Esto es extremadamente extraño, así que adoptaremos otra vía
de ataque. |
LA
APROXIMACION FACIL |
Veamos lo que tenemos:
- Unos ficheros extraños asociados a los ficheros importantes.
Sabemos la función de uno de ellos los *tky.dll sirven de
checksum, pero y el resto para que sirven?
- Un flag que desactiva el checksum del ejecutable.
- Unos misteriosos fichero ejecutables con el logo RS que
dicen que tiene que prepara el Sotware.
Nos centraremos en los ejecutables con los logos RS.
REUNIENDO LAS PIEZAS
Para cada utilidad , p.e. CGDeluxe.EXE existe un fichero,
CGDeltky.dll, que realiza funciones de checksum (como ya vimos),
una librería de un gran tamaño , CGDeluxe.dl_ ,y un ejecutable
CGDelpop.exe que "prepara el Software".
No hay que ser un lince para darse cuenta que CGDelpop.exe
"prepara" de alguna forma CGDeluxe.dl_ para aportar toda la
funcionalidad a CGDeluxe.EXE. Esta "preparación" sólo se realiza
cuando estamos registrados.
Por tanto, se parte de un archivo ejecutable de un tamaño
inferior a la versión completa del programa. Una vez realizado
el proceso de compra se activa otro ejecutable que convierte
la versión de prueba en versión completa .
Todas las demás utilidades que acompañan al Norton CrashGuard
Deluxe tienen el mismo proceso (CheckUP.exe ->Checkpop.exe,
Checkup.dl_, Checktky.dll) (Cgmaipop.exe ->cgmain.exe, cgmaitky.dll)
LA COMPRA VIRTUAL
Nos centraremos en el asistente (CGDeluxe.EXE) de compra que
vimos en nuestra "Primera Aproximación" : Doble click en el
escudo con la N que hay en el escritorio y al pulsar el botón
Buy Now (comprar ahora) aparece el asistente de compra.
Este será nuestro punto de entrada. Si pensamos un poco observaremos
que la aplicación que lanza el proceso de compra debe saber
si la compra ha tenido éxito o no. Por tanto, será por aquí
por donde centremos nuestros esfuerzos . Además debe de anunciar
de alguna forma al resto de utilidades que la compra ha tenido
éxito para que ellas también se "preparen" Analizaremos el
ejecutable CGDeluxe.exe (que el que se lanza al pulsar el
icono del escritorio) y observaremos como "compra".
Nada mejor que usar un desensamblador para investigar el programa
CGDeluxe.exe (224 Kb). Una vez aparece el listado observamos
que hace uso de la librería comercial RSAGNT32.DLL (encargada
de realizar la compra virtual) y que existen un referencias
a funciones tales como SAInitialize, startSalesAgent. Estas
van a ser nuestras funciones de aproximación.
Pulsamos en el botón de Imported Functions (Imp Fn) y hacemos
doble click en la línea de rsagnt32.startSalesAgent.
Aparecerá en el listado lo siguiente:
* Reference To: rsagnt32.startSalesAgent, Ord:000Eh
:00407834 E807F30000 Call 00416B40 ß Llamada al asistente
:00407839 83C408 add esp, 00000008
:0040783C 66833D0425430000 cmp word ptr [00432504], 0000
:00407844 742B je 00407871
Echamos un vistazo hacia arriba y hacia abajo del listado
y vemos que nos encontramos en un bloque de código que se
encarga de cargar, iniciar, ejecutar, terminar el asistente
de compra Buscamos donde puede empezar el bloque. Y un poco
mas arriba encontramos:
///////////// INICIO DE BLOQUE ////////////////
* Referenced by a CALL at Address:
:00406752 ßdesde aquí es llamado el bloque del asistente de compra
:004077B0 A1B07B4300 mov eax, dword ptr [00437BB0]
:004077B5 53 push ebx
: :
: :
* Reference To: rsagnt32.startSalesAgent, Ord:000Eh ß Aquí hemos comenzado la busqueda
:00407834 E807F30000 Call 00416B40 ß Llamada al asistente
:00407839 83C408 add esp, 00000008
:0040783C 66833D0425430000 cmp word ptr [00432504], 0000
:00407844 742B je 00407871
:00407846 BFE0A54300 mov edi, 0043A5E0
: :
: :
:00407878 5F pop edi
:00407879 5E pop esi
:0040787A 5B pop ebx
:0040787B C3 ret
///////////// FIN DE BLOQUE ////////////////
Ahora una vez que conocemos desde donde hemos llamado al bloque,
usamos el menu Goto à Goto Code Location y escribimos el desplazamiento
406752. Aquí observamos lo siguiente:
* Possible Reference to String Resource ID=00001: "Turnkexe"
:00406748 C705C826430001000000 mov dword ptr [004326C8], 00000001
:00406752 E859100000 call 004077B0 ß Entrada en el bloque anterior
:00406757 66392D04254300 cmp word ptr [00432504], bp
:0040675E 0F84F4010000 je 00406958
:00406764 BF34254300 mov edi, 00432534
Ummmm…. Aquí ya tenemos una bonita dirección de memoria (variable
global) para usar con Softice.Pero antes añadamos la librería
RSAGNT32.DLL. al la lista de dll que sabe manejar el Softice.
Abrimos el Symbol Loader de Softice y en el menu Edità Softice
Initialization SettingsàExports añadimos RSAGNT32.DLL. Abrimos
el Symbol Loader y cargamos (Load) el programa CGDeluxe.exe.
Ya en el SoftIce:
Bpx 406752
Bpx startSalesAgent
Pulsamos F5 y cuando aparezca la ventana de "Welcome to Symantec
Trialware" pulsamos sobre el botón "Buy Now". Aparecer en
el Softice en el primer breakpoint Bpx 406752
Seguimos ejecutando, paramos en la función startSalesAgent
cs:00407834 E807F30000 Call rsagnt32!startSalesAgent ß Asistente de compra
cs:00407839 83C408 add esp, 00000008
cs:0040783C 66833D0425430000 cmp word ptr [00432504], 0000
cs:00407844 742B je 00407871 ß si salta, has comprado
Nopeamos el asistente de compra. Esto es, sustituimos la llamada
por instrucciones inonfesivas. En : 00407834 90 90 90 90 90
Si estudiamos je 00407871 y hacemos que no vaya a la dirección
407871 aparece una ventana contándonos que se ha grabado un
archivo llamado Rslicens.txt pero esto no hace que se active
el proceso de compra, este nos es el camino.
Otra comparación interesante se encuentra después de la rutina
de entrada al bloque
cs:00406752 E859100000 call 004077B0 ß Bloque anterior cs:00406757
66392D04254300 cmp [00432504], bp ßComparación Interesante
cs:0040675E 0F84F4010000 je 00406958 cs:00406764 BF34254300
mov edi, 00432534
Cuando nos encontremos sobre la dirección cs:0040675E cambiamos
el flag de cero que estará activada (Z) y la colocamos a desactivada
(z). Ahora el programa seguirá en cs:00406764. Pulsemos F5
y veamos que ocurre.
Ha aparecido una ventana que nos dice que esperemos mientras
nuestro programa esta siendo preparado (Please wait while
your software is being prepared). Al fin, se "PREPARA EL SOFTWARE"
Nota: Si el proceso anterior se repite muchas veces conviene
que cerremos todos los programas que tengamos activo e incluso
el mismo Norton Crashguard que tengamos en la barra de tareas.
Una vez completado este proceso habremos comprado virtualmente
el Norton crashguard Deluxe.
Observaremos que han desaparecido los ficheros CGDeluxe.dl_
y CGDeltky.dll y han aparecido dos archivos de licencia RSLICENS.txt
y LICENSE.xxxxxx (números de licencia) Este proceso realizado
en tiempo real con el Softice no trae ningún problema… pero
a la hora de hacer los parches no encontraremos problemas
con los checksum .Pero..TRANQUILOS QUE TODO TIENE SOLUCION.
MODIFICANDO EL REGISTRO
Usaremos una herramienta muy útil para los crackers el programa
Regmonitor (si no lo tienes consíguelo) .Observamos unas variables
que lee el programa (no registrado) al principio y tenemos:
HKCR\ultxfile\Format\MSHAEZDC\write /* Esta nos suena */
HKCR\ultxfile\Format\MSHAEZDC\xlate
HKCR\ultxfile\Format\MSHAEZDC\open /* Esta nos suena*/
Bien, basta comparar los valores antes y después de "preparar"
el software, para darse cuenta que la única modificación la
realiza en open. Cuando está registrado su valor es:
HKEY_CLASSES_ROOT \ultxfile\Format\MSHAEZDC\open
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 10 00
08 08 00 00 10 00 00 00 - 00 00 00 00 00 00 00 00
Esta es la forma en que se comunica al resto de utilidades
que la compra ya ha tenido éxito.
Y YA ESTÁ, basta con introducir este valor en el registro
para que quede registrado el Norton CrashGuard Deluxe 3.0
MSHAEZDC corresponde al programa en cuestión a comprar. Usando
el regmonitor vemos que clave busca el programa a desproteger
y anotamos el código (MSHAEZDC).
Esta táctica se ha probado con éxito con las siguientes aplicaciones
protegidas por la compañía Release Software Corporation :
Norton utilities, Norton Uninstaller, Norton Antivirus, Xing
MPEG Encoder,
Creando un archivo de registro ya tenemos hecho un crack no
destructivo ya que no modifica ningún ejecutable.
----------------------------------- Cortar por aquí ---------------------------------------------------
REGEDIT4
; (c) ESTADO+PORCINO 1998
; Modificación de registro para Norton Crash Guard Deluxe
; Mr.Red & otras hierbas
;
[HKEY_CLASSES_ROOT\ultxfile\Format\MSHAEZDC]
"open"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,10,00,08,08,00,00,10,00,00,00,00,00,00,00,00,00,00,00
----------------------------------- Cortar por aquí ---------------------------------------------------
Para los demás programas que usan esta protección tenemos:
Xing MPEG Encoder códigoà MSHVEMAV
Norton Utilities códigoà MSHVEM0E
Norton Unisntaller códigoà MSHW2EHL
Bueno ha sido largo pero ha merecido la pena. |
MORALEJA |
Si quieres poner una puerta,
procura que no sea de papel.
Es el colmo de la incompetencia. Confías la venta de tu producto
a un empresa que proporciona una protección ridícula que no
vende tu producto si no que prácticamente lo regala. Por que
no invertir la millonada que Symantec habrá pagado a Release
Software Corporation encontrar a unos buenos programadores
en ensamblador que hicieran una protección decente.Además,
esta compañía protege y vende productos de más empresas a
parte de Symantec.
Basta pasarse por su web http://www.releasesoft.com y comprobar
lo orgullosos que están de sus clientes.
Realmente, no creo que esta compañía dure mucho.
La importancia de este artículo radica en que se ha conseguido
solventar con éxito la protección de una casa de Software
dedicada a proteger y vender. Quedan a nuestros pies cientos
de programas , con una protección de papel, gracias a la incompetencia
de una avariciosa compañía. Mejor sería que diera los programas
gratis, y de dejara de hacer el ridículo.
Mr.PinK & WKT ( WHISKEY KON TEKILA )
Esperamos vuestras opiniones, sugerencias y ensayos en
estadoporcino@hotmail.com
En breve analizaremos tipos de protecciones mucho más
interesantes.
Recordad bebed de la fuente, buscad a +ORC
en la red.
|
[
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 |
|
|
|
|
|