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.gitEl 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.