ESTUDIO COLECTIVO DE DESPROTECCIONES
WKT Tutorialz Site
WKT
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
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!]
Fecha 14 de Septiembre de 1999

Introducci≤n
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:
  1. Solamente funciona durante 15 días.
  2. Limita la duraci≤n de los videos a 30 segundos.
  3. Solo se permite 35 transacciones por vídeo.

Al Atake
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:

  1. Cambiar el jz por un jmp
  2. 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:

  1. La línea 4EB05E4F la sustituimos por nops (tantos como sea necesario). Así quitamos la ventana tan fea.
  2. 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 | Documentoz GenΘricoz | WKT TEAM Main Site ]
[ Todo el ECD | x Tipo de Protecci≤n | x Fecha de Publicaci≤n | x orden AlfabΘtico ]