Instalamos el programa (recomiendo instalarlo
con MagicEye, Removit o similar, pues la instalación nos esconderá
algún fichero, que el desinstalador de Windows no eliminará).
Vamos al directorio donde lo hemos instalado. Ejecutamos el único
ejecutable que hay, que es Flash.exe (Umm!!, que raro sólo ocupa
unos 200Kb). Nos sale una pantalla que nos dice que si queremos comprar
ahora el producto, probarlo o salir. Pues vamos a probarlo. Ui, que majo.....
Bueno, sin cerrar Flash, abrimos ProcDump32 y
miramos las tareas que hay abiertas en este momento. Justo debajo de Flash.exe
vemos otra tarea: Flash.tty. Si miramos en el explorador vemos que "flash.tty",
ya tiene un tamaño un poco más normal (4 Mb). Lo editamos
y vemos que empieza por la cadena "MZ". Esto tiene toda la pinta de ejecutable.
Lo copiamos con otro nombre. Por ejemplo, "algo.exe". Lo ejecutamos y Windows
pega uno de sus habituales "petardones". Esto pasa porque está
encriptado.
Pensemos. Cuando ejecutamos flash.exe y le damos a probar el producto,
este debe desencriptar flash.tty en la memoria.
La pregunta es: ¿está todo el ejecutable encriptado o
por el contrario sólo está encriptada alguna sección? Que esté todo el
ejecutable lo descartamos, porque al menos la cabecera del ejecutable está
intacta (¿recordáis la cadena "MZ"?). Ahora queda saber cuáles son
las secciones encriptadas. Para ello abrimos "flash.tty" con
ProcDump y le damos a Sections:

De
paso nos apuntamos el Entry Point (el punto de entrada) que es: 0014D930
+ Image Base= 0014D930 + 00400000 = 0054D930 Ahora
viene lo realmente importante. Hay que poner un breakpoint de acceso a memoria (BPM)
en cualquier punto de todas las secciones. Lo más fácil es ponerlo al
principio de cada sección. Haremos el ejemplo de la sección ".text": Una
vez dentro del proceso (flash.tty) y ponemos en la línea de comandos del Sice: bpm
401000 W bpx 0054D930 Vamos
a ver un poquito el porqué de estos breakpoints: Bpm
es un tipo especial de breakpoint para accesos a memoria. 401000
= Virtual Offset de la sección ".text" + Image Base (400000)
(recordad que la suma es en hexadecimal) W (write)-
nos interesa que nos avise el Sice sólo cuando se escriba en esa
dirección de memoria. BPX 0054D930 - Nos
interesa saber cuándo empieza a ejecutarse "Flash.tty", puesto que
hay secciones como ".data" que cambian en tiempo de ejecución. Ponemos
los breakpoints (BPM) correspondientes a cada sección y...vemos que sólo la
sección ".text" cae en la trampa para osos (recordad, ANTES
del Entry Point de "Flash.tty"). Tenemos dos opciones: volcar la sección
con ProcDump o con el Sice parcheado con IceDump. Os explicaré las
dos formas:
MÉTODO
1: Usando
PROCDUMP (pa los que no tengan PE Splitter o IceDump)
Ejecutamos flash.exe (el de 200 Kb, se supone
que todavía no estamos registrados), le damos a probar el producto.
Abrimos ProcDump y en la lista de tareas sobre "flash.tty" le damos al
botón derecho del ratón y seleccionamos "Process Infos". Ahora le
damos a "Sections" y sobre ".text" le damos a "Save section to disk" y
le llamamos, por ejemplo, "text.bin". Copia "flash.tty" a
"algo.exe". En
ProcDump le damos a "PE Editor" y seleccionamos "algo.exe". De nuevo le
damos a "Sections". Sobre ".text" pulsamos en "Load section from disk".
Escogemos "text.bin". Le damos a OK. Ahora (IMPORTANTE!) en "Apply changes
method", pulsamos en "To PE file". OK otra vez y voilá, ya tenemos
Flash 4 de por vida.
MÉTODO
2: Usando IceDump
Primeramente usamos PE Splitter (o cualquier programa
que nos divida los ficheros en secciones) con "flash.tty".
Abrimos ProcDump y la damos a "PE Editor". Seleccionamos "flash.tty". Nos
apuntamos el valor de "Image Base" (400000). Le damos a "Sections". Nos
apuntamos el valor de "Virtual Offset" (1000) y de "Raw Size" (271200),
ambos de la sección ".text".
Primero voy a explicar cómo funciona el
comando
PAGEIN modificado:
PAGEIN 1 2 3
1 = Virtual Offset de ".text" + Image Base
(400000)
2 = Raw size de ".text"
3 = un nombre de fichero cualquiera
Arrancamos "flash.exe". Ahora nos tenemos que
meter dentro del código de Flash (flash.tty). Para ello (hay muchas más
formas de hacerlo) ponemos un breakpoint en CreateWindowExA, le damos al menú de Help, About
Flash y nuestro todopoderoso SoftIce salta. Dos veces a F12
y ya estamos dentro de Flash. Ahora ponemos:
PAGEIN 401000 271200 c:\text.bin
Ya tenemos la sección ".text" desencriptada.
Si todavía no habías usado PE Splitter con "flash.tty", hazlo
ahora. Para obtener el ejecutable totalmente funcional, ponemos:
copy /b a.r!sc.bin + text.bin + c.r!sc.bin + d.r!sc.bin
+ e.r!sc.bin + f.r!sc.bin + g.r!sc.bin gadix.exe
De nuevo, tenemos Flash 4 de por vida.
CUESTIONES
ESTÉTICAS
El programa ya no caduca, pero en el menú
About no aparece nuestro nombre como registrados. Lo que sí sale
es "Serial Number: FLW400-67963-17145-20486". Si trazamos con RegMon vemos
que este número lo lee de HKEY_LOCAL_MACHINE\Software\Macromedia\Flash\4\Registration\Serial
Number. Vamos a borrar esta clave, a ver que sucede (expórtala primero,
para mayor seguridad). Nos sale una ventana pidiendo nuestro nombre, organización
y un número de serie. Esta parte de la protección no
es del Sales Agent, sino de la propia Macromedia. No nos vamos a complicar
la vida. Metemos un nombre y organización cualquiera y como serial
el que habíamos borrado antes del registro. Perfecto, nos acepta
el serial. Pero, ¿porqué nos da Macromedia un serial válido?
Pues para poder entrar durante los 30 días de evaluación.
Una vez nos registramos con Sales Agent, éste nos borra el serial.
Pero al no habernos registrado, el nº de serie válido permanece
en el registro. Fijaos hasta que punto llega la inteligencia de los
programadores de Macromedia. Para curiosos: Aunque el
tiempo de evaluación haya expirado, poned un breakpoint en DialogBoxParamA.
Arrancad el programa. Cuando salte el breakpoint, pulsad F12. Ahora pulsar en "Cancel". Volveréis al
Sice. Poned a
uno el
valor de EAX (r eax 1). Pulsad F5,y.....Flash se ejecuta
normalmente!!! Una prueba más de la desastrosidad del Sales Agent.
Al tratarse de una protección
genérica, posiblemente (no he tenido la ocasión de probar
más programas con esta protección), con desencriptar la
sección ".text", quedarán en nuestras manos un montón de programas
más.
Una protección más
echada al traste... Este tute se lo dedico
especialmente a Estado+Porcino y a todos los colores de [WkT!] y en general a
todos los comparten sus conocimientos en Ingeniería Inversa.
Erratas,
dudas y demás en:
gadix@ctv.es
|