Code Virtualization

Code virtualization convierte tus métodos en un formato de instrucciones propio ejecutado por una virtual machine embebida, haciendo extremadamente difícil la ingeniería inversa.

  • .NET.NET
TL;DR

Code virtualization transforma un método en un bytecode propio que solo entiende una virtual machine embebida en tu aplicación. Ya no queda código estándar que decompilar. Un atacante tiene que hacer ingeniería inversa primero de la propia virtual machine y luego del bytecode que ejecuta. Es la ofuscación más fuerte que ofrece Shield.

Definición

¿Qué es code virtualization?

Code virtualization es la técnica de ofuscación más avanzada. En lugar de transformar tu código, lo reemplaza. Un método protegido se convierte en un conjunto de instrucciones propio que ninguna herramienta estándar entiende.

Esas instrucciones propias las ejecuta una virtual machine embebida en tu aplicación. El método original ya no existe en ninguna forma estándar, así que no queda nada con lo que pueda trabajar un decompilador normal.

Para recuperar la lógica, un atacante tiene que hacer ingeniería inversa primero de la virtual machine, entender su conjunto de instrucciones propio y, solo después, interpretar el bytecode. Es un esfuerzo mucho mayor que analizar código ofuscado normal, por eso la virtualización se reserva para la lógica más sensible.

Mecanismo

Cómo funciona code virtualization

Code virtualization sustituye el código estándar por un equivalente virtualizado:

  • Bytecode propio. El método se compila a un conjunto de instrucciones propio y único de la protección.

  • Virtual machine embebida. Una virtual machine que entiende ese conjunto de instrucciones se embebe en la aplicación.

  • Ejecución en runtime. En tiempo de ejecución, la virtual machine ejecuta el bytecode propio y produce el comportamiento original.

No hay un camino de código estándar que pueda seguir un decompilador, solo la virtual machine y su bytecode propio.

Ejemplo

Ejemplo de code virtualization

El mismo método Decrypt, abierto en un decompilador. Code virtualization cambia lo que el decompilador puede recuperar.

Sin virtualization

Un decompilador lee el método protegido y, aun ofuscado, produce código en una forma estándar que un atacante puede estudiar línea a línea.

Con virtualization

El cuerpo del método es bytecode propio para una virtual machine embebida. Solo la signature sobrevive en forma estándar, así que el decompilador recupera una cáscara vacía.

Sin virtualization
public string Decrypt(byte[] payload, byte[] key)
{
    return Crypto.AesDecrypt(payload, key);
}
Con virtualization
public string Decrypt(object[] args) { }

Casos de uso

Cuándo usar code virtualization

Code virtualization tiene un coste en runtime mayor que otras protecciones, así que se aplica de forma selectiva. Es especialmente útil para:

  • Los métodos más sensibles: licensing, criptografía, algoritmos clave.
  • Lógica donde la ingeniería inversa debe volverse impracticable, no solo lenta.
  • Código de alto valor que justifica el trade-off de rendimiento.

Es la capa superior de una defensa. Aplica name obfuscation, string encryption y control flow obfuscation de forma amplia, y reserva la virtualización para los pocos métodos que más importan.

Disponibilidad por plataforma

Code virtualization y la plataforma .NET

  • .NET

    Virtualización de métodos a bytecode propio ejecutado por una virtual machine embebida. Es la protección más fuerte del set de Shield para .NET.

Preguntas frecuentes

¿Qué es code virtualization?
Code virtualization es una técnica de ofuscación avanzada que convierte un método en bytecode propio ejecutado por una virtual machine embebida, así no queda código estándar que un decompilador pueda interpretar.
¿Code virtualization afecta al rendimiento?
Sí, más que otras protecciones, porque el código virtualizado se ejecuta a través de una virtual machine. Por eso se aplica de forma selectiva a los métodos más sensibles.
¿Por qué se considera code virtualization la ofuscación más fuerte?
Porque un atacante tiene que hacer ingeniería inversa primero de la virtual machine y de su conjunto de instrucciones propio antes de poder siquiera empezar a interpretar la lógica protegida.
¿Debo virtualizar toda mi aplicación?
No. La virtualización conviene reservarla para los métodos más sensibles. Aplica protecciones más ligeras de forma amplia y la virtualización donde más importa.
¿Qué plataformas soportan code virtualization?
ByteHide Shield ofrece code virtualization para .NET.
+10.000 desarrolladores y empresas protegen sus aplicaciones con ByteHide

Protege tu aplicación con
ByteHide Shield

Code virtualization es una de las más de 20 protecciones de ByteHide Shield. Aplícala a los métodos más sensibles de tu aplicación .NET.

ByteHide runtime dashboard showing live threat monitoring and protection metrics