Karpoff Spanish Tutor

Programa: Macromedia Flash 4


 

PROTECCION: Sales Agent 3.1.2. - 30 días de prueba
Descripcion: Programa para crear gráficos vectoriales
Dificultad: Aficionado 
DOWNLOAD: http://www.macromedia.com
Herramientas: SoftIce v3.23 + IceDump 4, Procdump 32, PE Splitter de R!sc (o similar)
CRACKER: Gádix   FECHA: 7/03/2000 - Revisado 20/05/2000

 

 INTRODUCCION

Veremos la inutilidad (si no se toman las medidas adecuadas) de encriptar el ejecutable principal y meter en otro la protección.

 

 AL ATAKE

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:

flash4.gif (5501 bytes)
 

 

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 a Karpoff por su fantástica página y en general a todos los comparten sus conocimientos en Ingeniería Inversa.

Por último os invito a visitar mi nueva página Web. Apetecible, para los que quieran aprender crackear, sobretodo JUEGOS (programas también). También os puede interesar la sección de cómo proteger vuestros propios programas. Espero vuestra colaboración!!!

http://www.ctv.es/USERS/gadix

Erratas, dudas y demás en:

gadix@ctv.es 

 

Karpoff Spanish Tutor: Pagina dedicada a la dibulgacion de informacion en Castellano, sobre Ingenieria Inversa y Programacion. Email "Colabora con tus Proyectos"
www.000webhost.com