|
|
 |
ESTUDIO COLECTIVO DE DESPROTECCIONES
Última Actualizacion:
25/10/2001
|
 |
|
Programa |
Ulead Video Studio v3.0 |
W95 / W98 / NT |
Descripción |
Edición de vídeo |
Tipo |
Trial de 15 días con algunas otras limitaciones |
Tipo de Tutorial |
[X]Original, []Adaptación, []Aplicación, []Traducción |
Url |
http://www.ulead.com |
Protección |
Nag Screen, Time Limit 15 Días y otras limitaciones |
Dificultad |
1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista |
Herramientas |
SoftIce v3.25 |
Objetivo |
Que el programa funcione sin restricciones |
Cracker |
Mr.Orange [WkT!] |
Grupo |
Whiskey Kon Tekila |
Fecha |
14 de Septiembre de 1999 |
INTRODUCCION
|
Vídeo Studio 3.0 es una aplicación que permite editar clips de vídeo en formatos AVI
y MPEG. La aplicación te permite también capturar vídeo mediante una cámara digital
o una tarjeta capturadora de vídeo.
Es una versión tryout que tiene las siguientes limitaciones:
- Solamente funciona durante 15 días.
- Limita la duración de los videos a 30 segundos.
- Solo se permite 35 transacciones por vídeo.
|
AL ATAQUE
|
Empecemos pues...
Ejecutemos a nuestro amigo y probemos el programa. He creado un vídeo muy chulo, pero
ocupa más de 30 segundos y cuando lo intento guardar en formato AVI me dice que no quiere.
Esto no quedara quedara así, mira que plantarme cara!! :))
La ventana que aparece tiene toda la pinta de ser un MessageBox, por lo que ponemos el cebo
en las funciones MessageBoxA y MessageBoxExA
a ver si pica. VAYA!!!! No ha picado
Entonces probaremos a poner un breakpoint cuando se destruya la ventana. Para ello
ejecutamos el comando bmsg 020C wm_destroy, recuerda
que 020c es el handle de la ventana y seguramente tu no tendrás el mismo, por lo
que tendrás que averiguarlo (se puede averiguar con el comando hwnd).
Probamos nuestro nuevo cebo y.... BINGO, el SoftICE ha despertado, jejee
Después de unos cuantos F12 aparecemos aquí:
0044678A mov ecx, eax
0044678C call ds:??PCuTime@@QBEHV0@@Z ; CuTime::operator>=(CuTime)
00446792 test eax, eax <-- Que interesante.
00446794 jz 004467AA
00446796 push ebx
00446797 push 8291h
0044679C push ebx
0044679D call 004149C0
004467A2 add esp, 0Ch <-- Tu vuelves aqui.
004467A5 jmp 00447033
004467AA mov eax, 004B2310
Bien, aquí tenemos algo interesante. :))
En la línea 0044678C se llama a la función PCuTime@@QBEHV0@@Z,
que según parece sirve para calcular si un vídeo dura mas o igual que otro. Pero lo
que a nosotros nos interesa es la línea 00446794, donde salta o no (tenemos que hacer que
salte para quitar esta limitación, por lo que tenemos varias opciones:
- Cambiar el jz por un jmp
- Cambiar el test eax, eax por un xor eax, eax
Si optamos por la primera, cuando saltemos eax valdrá 1 y si cogemos la segunda
eax valdrá 0. yo me he decidido por la segunda, ya que en este caso eax=0 que es
lo que debería de devolver al call anterior si el vídeo tuviera menos de 30 segundos.
Es posible que esto no influya en nada, pero quizás el autor utilice el valor de eax
para algo y se estropee nuestro vídeo, así que por si las moscas....
|
Siguiente objetivo.
|
Bien, ahora ya podemos hacer producciones más largas, pero todavía tenemos mas problemas.
El programa caduca a los 15 días (o no te acordabas). Veamos como se comporta pasado
este tiempo. Adelantemos el reloj 2 meses (mas vale que sobre, no??) y ejecutemos el
programa. Vaya, aparece una ventana muy fea diciendo que ha caducado:
Vamos a actuar igual que antes: poniendo un breakpoint cuando se cierre la ventana (recuerda
que es el evento wm_destroy). Y tras un par de F12 llegamos aquí:
0041A35C push ecx
0041A35D push eax
0041A35E call j_ulcCheckLegality
0041A363 test eax, eax <-- Tu vuelves aqui.
0041A365 jz short loc_41A3A0
0041A367 cmp [esp+1E8h+var_70], 515h
0041A372 jnz short loc_41A382
0041A374 push offset aTrial
0041A379 lea ecx, [esp+1ECh+var_1DC]
Bien, según parece hemos regresado un una función llamada CheckLegality.
que es la que comprueba el tiempo transcurrido (porque el programador no aprende y por lo menos esconde
lo que hace la función con otro nombre menos significativo??).
Veamos que es lo que hace esta función (se encuentra en el la DLL u32cfg.dll):
; S u b r o u t i n e
; Attributes: bp-based frame
public ulcCheckLegality
ulcCheckLegality proc near
arg_0 = dword ptr 8
arg_4 = dword ptr 0Ch
4EB05E40 push ebp
4EB05E41 mov ebp, esp
4EB05E43 push 0
4EB05E45 push 1
4EB05E47 mov eax, [ebp+arg_4]
4EB05E4A push eax
4EB05E4B mov ecx, [ebp+arg_0]
4EB05E4E push ecx
4EB05E4F call GetModuleInfo
4EB05E54 add esp, 10h
4EB05E57 neg eax
4EB05E59 sbb eax, eax
4EB05E5B neg eax
4EB05E5D pop ebp
4EB05E5E retn 8
ulcCheckLegality endp
Si jugamos un poco con esta función, nos damos cuenta que el call de la línea 4EB05E4F
es el que muestra la ventana y devuelve en eax 0 (si nos fijamos un poco nos daremos
cuenta que debería de devolver 1 para que todo fuera como deseamos). Así que retocamos
la función con los siguientes cambios:
- La línea 4EB05E4F la sustituimos por nops (tantos como sea necesario). Así quitamos la ventana tan fea.
- Necesitamos que se devuelva 1 en eax, por lo que sustituimos las líneas 4EB05E57 a 4EB05E5B por un mov eax, 1 y tantos nops como sea necesario.
Con esto conseguimos engañar al programa. :))
|
Una ultima palabra.
|
Ha sido fácil, no?
Con estos cambios el programa ya no caduca y podemos hacer los videos tan largos como
queramos.
Pero me he dado cuenta que con solo el ultimo cambio, el programa no se queja de que
los videos superan los 30 segundos, y tampoco me ha puesto ninguna pega al poner mas
de 35 transacciones, por lo que supongo que con solo parchear la función ulcCheckLegality
el programa funcionará correctamente.
|
[ 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 |
|
|
|
|
|