|
|

Última Versión: 1.3 |
Última Actualización:
1.3.8.0 | Actualizado Día:
22-Dec-2008
|

Code Virtualizer es un potente sistema de ofuscación para ayudar a los desarrolladores de software a proteger las áreas de código más importante de sus aplicaciones contra la Ingeniería Inversa , sin requerir recursos extras del sistema.
Code Virtualizer convertirá su código original (formado por instrucciones Intel x86) en Instrucciones Virtuales que serán sólo entendidas e interpretadas por una máquina virtual interna. Esas Instrucciones Virtuales y la Máquina Virtual interna generada, serán únicas para cada aplicación protegida, evitando un ataque general sobre Code Virtualizer.
Code Virtualizer puede proteger las áreas de código más importante en cualquier archivo PE , como Ejecutables (EXEs), system services, DLLs , OCXs , Controles ActiveX , Salva Pantallas y Drivers de dispositivos (Device Drivers).

Cuando se esté creando una aplicación, el Compilador compilará su código fuente en distintos ficheros objetos compuestos de código máquina. Estos ficheros objetos serán enlazados en una fase posterior para crear la aplicación final.

Figura 1:
Compilación del código fuente
Cuando un atacante intente atacar una aplicación compilada, usará un descompilador para ayudarle a transformar el código máquina en un lenguaje más fácil de entender, como lenguaje ensamblador u otro lenguaje de más alto nivel. Una vez que se haya transformado el código máquina a un lenguaje más fácil de entender, el atacante empezará su estudio sobre la aplicación a atacar.

Figura 2:
Fases en la descompilación de una aplicación
Cuando el atacante haya recolectado información suficiente sobre la aplicación a atacar, podrá modificar la ejecución de la aplicación compilada tal y como desee. Por ejemplo, un atacante podría interceptar la rutina que chequea si una aplicación está o no registrada y forzar a la aplicación a que se mantenga registrada continuamente.

La virtualización de código consiste en la transformación de código binario para un procesador específico en código binario totalmente distinto que puede ser entendido por otro procesador. En otras palabras, el juego de instrucciones que un procesador es capaz de entender es totalmente traducido a un nuevo juego de instrucciones que será entendido por otro procesador. La siguiente figura representa la transformación de un bloque de instrucciones de Intel x86 en un nuevo juego de instrucciones para otro procesador (específicamente un procesador RISC de 32 bits):

Figura 3: Transformación de x86 a CPU RISC 32-bit
Code Virtualizer puede generar múltiples tipos de máquinas virtuales con distinto juego de instrucciones en cada una, lo que significa que un mismo bloque de instrucciones de Intel x86 puede ser convertido en diferentes juegos de instrucciones, evitando que un atacante llegue a reconocer cualquier instrucción transformada a partir de una instrucción Intel x86. La siguiente figura representa cómo un bloque de instrucciones de Intel x86 es convertido a un diferente juego de instrucciones para distintos procesadores o máquinas virtuales.

Figura 4: Transformación de x86 a múltiples CPUs Imaginarias
Cuando un atacante intente descompilar un bloque de código que fue protegido por Code Virtualizer, no encontrará las instrucciones originales en Intel x86, sino instrucciones totalmente desconocidas y que no podrá descompilar con ninguna herramienta. Esto forzará al atacante a tener que realizar el arduo trabajo de estudiar cómo es ejecutada cada instrucción y cómo funciona la máquina virtual que procesa esas instrucciones en esa aplicación específica. Code Virtualizer ofusca totalmente la forma en la que las instrucciones virtuales son ejecutadas y dificulta extraordinariamente el traceo sobre la máquina virtual generada para evitar el estudio de ella y cómo son ejecutadas las instrucciones.

Code Virtualizer puede usarse con facilidad en aplicaciones Windows de 32 y 64 bits y también sobre Drivers de dispositivos (Device Drivers). Simplemente hay que seleccionar en el código fuente las secciones que desean ser protegidas con Code Virtualizer. El siguiente ejemplo muestra cómo insertar Code Virtualizer dentro de una aplicación en lenguaje C.
#include <stdio.h>
#include "VirtualizerSDK.h"
void main()
{
VIRTUALIZER_START // the area to protect starts here
printf("Hello World");
VIRTUALIZER_END // end of area to protect
} |
Las macros VIRTUALIZER_START/VIRTUALIZER_END son macros vacías que no interfieren en la ejecución de la aplicación original, por lo que pueden utilizarse con comodidad mientras testea su aplicación sin proteger. En la fase de protección es cuando Code Virtualizer reconocerá esas macros y protegerá el código que existe dentro de ellas, convirtiendo las instrucciones originales (Intel x86) en instrucciones totalmente distintas y que pueden ser ejecutadas por una máquina virtual específica.
La siguiente figura muestra la diferencia entre la aplicación original y la aplicación protegida con Code Virtualizer:

Figura 5: Aplicación Original frente a Aplicación Protegida
Como muestra la figura, Code Virtualizer necesita incluir la máquina virtual generada dentro de la aplicación protegida con el fin de poder emular las instrucciones virtuales cuando necesitan ser ejecutadas. El tamaño de la máquina virtual puede variar entre 10 y 30 Kb (dependiendo de la complejidad seleccionada), lo cual no tiene un gran impacto sobre el tamaño final de la aplicación protegida.

Code Virtualizer es una poderosa tecnología que evita a posibles atacantes la forma de estudiar las rutinas que decida proteger, como por ejemplo las rutinas que validan un número serie para su aplicación. También modifica ligeramente la cabecera de las aplicaciones protegidas, lo cual significa que la aplicación protegida podría ser comprimida o reprotegida sin problemas por otro protector software.
Si usted es un desarrollador de Drivers de dispositivos (Device Drivers) y se ha sentido desplazado en el mundo de la protección por no poder protegerlos, Code Virtualizer ofrece la misma tecnología para proteger sus Drivers de dispositivos (tanto las versiones en 32 y 64 bits), así como sus aplicaciones y DLLs.
Pruebe Code Virtualizer hoy mismo y empiece a incluir la última tecnología en protección software en sus aplicaciones y Drivers de dispositivos, tanto para 32 como para 64 bits!
|