Skip to Content
Nueva versión 12 disponible 🎉
ObfuscatorCifrado de códigoCódigo protegido por contraseña

Código protegido por contraseña

En algunos casos puede ser preferible mantener el código cifrado dentro del ensamblado ofuscado en lugar de almacenarlo en archivos externos. En ese caso, el acceso al código cifrado se protege con una contraseña, lo que reduce notablemente la cantidad de información necesaria para reconstruir el método y mantiene el mismo nivel de seguridad. Sin la contraseña, la máquina virtual de Babel (BVM) no puede reconstruir el método original, y el código cifrado resulta inútil. Este planteamiento ofrece un equilibrio entre seguridad y rendimiento, porque el código cifrado se almacena dentro del ensamblado y se accede a él rápidamente cuando hace falta.

Para definir qué código se cifra con una contraseña, hace falta una regla XML que especifique el método o el tipo que se va a cifrar, el nombre del origen y la contraseña. Este es un ejemplo de una regla de ese tipo:

<Rule name="encrypt algorithms" feature="msil encryption" exclude="false"> <Target>Methods</Target> <Pattern>ACME.Algorithms::*</Pattern> <Properties> <Source>algorithms</Source> <Password>mySecretPassword</Password> <Internal>true</Internal> </Properties> <Description>Encrypt code in the Algorithms class using a password.</Description> </Rule>

Observe que la regla contiene la propiedad Internal con el valor true, que indica a Babel que almacene el código cifrado dentro del ensamblado ofuscado y no en un archivo externo.

Como el código cifrado se almacena dentro del ensamblado ofuscado, no hace falta definir el método GetSourceStream para obtener la secuencia cifrada. En su lugar hay que declarar otro método, al que la BVM llama para obtener la contraseña necesaria para descifrar y ejecutar el método.

[Obfuscation(Feature="msil encryption get password")] internal static string GetSourcePassword(string source)

En tiempo de ejecución, la BVM llama a GetSourcePassword con el nombre del origen de datos cifrados asociado a los métodos cifrados (en este caso, «algorithms»). El método GetSourcePassword debe devolver la contraseña que descifra el código de bytes del origen de datos solicitado. Después, la BVM puede ejecutar el método solicitado.

En lugar de devolver una contraseña fija, el hook puede devolver un valor leído de la licencia del cliente, de modo que una función protegida solo se desbloquee para los usuarios con licencia. Consulte Cifrado de código vinculado a la licencia.

Last updated on