Skip to Content
Nueva versión 12 disponible 🎉
ObfuscatorCifrado de códigoCifrado vinculado a la licencia

Cifrado de código vinculado a la licencia

Este ejemplo hace que una función protegida dependa criptográficamente de una licencia válida mediante la combinación de dos tecnologías de Babel: el cifrado de código MSIL cifra el cuerpo de un método sensible, y Babel Licensing guarda la contraseña de descifrado, cifrada a su vez, dentro de una licencia firmada y vinculada al hardware. La máquina virtual de Babel pide la contraseña a la aplicación mediante un hook get password, que solo la devuelve después de validar la licencia. Eliminar o eludir la comprobación de la licencia no basta: sin una licencia válida no hay contraseña, y sin la contraseña el código cifrado no puede ejecutarse.

Para usar este ejemplo necesita una licencia de sitio de Babel Obfuscator (ediciones Ultimate, Server o Data Center) y Babel Licensing. El código fuente está disponible en GitHub:

git clone https://github.com/babelfornet/license-bound-encryption-console-example.git

El método sensible se marca para que Babel conserve el cuerpo cifrado dentro del ensamblado y pida su contraseña en tiempo de ejecución:

[Obfuscation(Feature = "msil encryption:internal=true;source=core;password=...")] public static int Compute(int a, int b) { /* protected body */ } [Obfuscation(Feature = "msil encryption get password")] internal static string GetSourcePassword(string source) { // Validate the license and return the password only when it is valid. }

La contraseña del código nunca aparece en claro en el binario distribuido. Se escribe (cifrada con un secreto del proveedor de software) en un campo de la licencia, y en tiempo de ejecución solo se recupera de una licencia con firma válida y vinculada al equipo actual. Un proyecto complementario, LicenseGenerator, emite la licencia.

Valid license -> Compute(7, 5) = 147 (the encrypted method runs) Missing / tampered -> Protected computation blocked (the BVM cannot decrypt the method)

Este es el patrón en el que se basa el control de funciones del propio Babel; consulte Cifrado de código vinculado a la licencia en el manual de Cifrado de código para ver la explicación completa, y Licencias basadas en funciones para ver una variante con varias funciones.

Last updated on