Cifrado de integridad Ultimate
El cifrado de integridad vincula el cifrado de cadenas y el cifrado de código (MSIL) integrados de Babel al archivo de ensamblado exacto que Babel ha generado. Una cadena o un método cifrados de este modo se descifran correctamente solo cuando la aplicación se ejecuta desde ese archivo sin modificar; en cualquier otra copia (un binario parcheado, un byte editado con un editor hexadecimal, un archivo combinado con una compilación distinta), el descifrado falla, por lo que las cadenas y los métodos protegidos nunca se recuperan correctamente.
Sin él, el cifrado de cadenas y el cifrado MSIL protegen el contenido de lo que ocultan, pero el descifrador en sí funciona igual sin importar en qué archivo termine: un método o una cadena extraídos de su ensamblado y colocados en otro siguen descifrándose con normalidad allí. El cifrado de integridad cierra esa brecha vinculando el descifrado al propio archivo distribuido, de modo que basta con mover los datos protegidos a cualquier otro lugar para romperlo, sin que tenga que escribir ni mantener ningún código de detección.
El cifrado de integridad es una salvaguarda distinta de la detección de manipulación. La detección de manipulación reacciona: comprueba la imagen cargada y le permite ejecutar código personalizado (registrar el evento, mostrar un mensaje, salir) cuando no coincide. El cifrado de integridad no reacciona en absoluto; simplemente hace que los datos cifrados sean inutilizables fuera del archivo en el que se generaron. Las dos combinan bien: la detección de manipulación para una respuesta visible, el cifrado de integridad para que no quede nada que recuperar incluso sin ella.

Integrity Encryption se encuentra junto a String Encryption y MSIL Encryption en las propiedades del destino de Babel Desktop
Requisitos
- String Encryption o Code Encryption deben estar ya activados en el destino. El cifrado de integridad no tiene nada propio que proteger: solo vincula el descifrado de la función (o las dos) que tenga activada. Activarlo sin ninguna de las dos activada no hace nada.
- Solo ensamblados de escritorio .NET Framework 4+ o .NET/Core: una imagen PE cargable respaldada por un archivo. No se admite con publicación en un único archivo, recorte ni NativeAOT: esos modos de publicación no conservan el ensamblado como un archivo sencillo al que Babel pueda vincularse.
- El ensamblado no necesita un nombre seguro; si ya tiene uno, Babel también verifica la firma del nombre seguro como parte de la misma comprobación.
- Además de la edición Ultimate de Obfuscator, también se incluye con las ediciones Server y Data Center de Babel Licensing, que incorporan Obfuscator Ultimate.
Activar el cifrado de integridad
Línea de comandos
babel myapp.exe --integrityencryption --stringencryption trueTarea Babel de MSBuild
<PropertyGroup>
<IntegrityEncryption>true</IntegrityEncryption>
<StringEncryption>true</StringEncryption>
</PropertyGroup>
<Babel IntegrityEncryption="$(IntegrityEncryption)" StringEncryption="$(StringEncryption)" />Babel Desktop
Active Integrity Encryption junto a String Encryption o MSIL Encryption en la lista de opciones del destino. Babel Desktop señala el ajuste si ninguno de los dos cifrados está activo todavía, porque no habría nada que vincular.

El texto de ayuda del ajuste repite sus requisitos y su edición
Ejemplo
Un destino que ya cifra un espacio de nombres sensible con MSIL Encryption, con Integrity Encryption añadido para vincularlo:
<PropertyGroup>
<MsilEncryption>true</MsilEncryption>
<IntegrityEncryption>true</IntegrityEncryption>
</PropertyGroup>
<Babel MsilEncryption="$(MsilEncryption)" IntegrityEncryption="$(IntegrityEncryption)">
<XmlRules>
<Rules>
<Rule name="encrypt-licensing" feature="msil encryption" exclude="false">
<Target>Methods</Target>
<Pattern>ACME.Licensing.*::*</Pattern>
</Rule>
</Rules>
</XmlRules>
</Babel>La regla selecciona qué métodos protege MSIL Encryption: Integrity Encryption no cambia esa selección,
solo vincula el resultado al archivo de salida de esta compilación. Los métodos se seleccionan del mismo
modo con o sin él: un filtro de expresión regular o de comodines en el propio MsilEncryption, o una
regla XML como la anterior con feature="msil encryption". Sin un filtro ni una regla que coincida,
MsilEncryption activa la función pero no selecciona nada, de modo que Integrity Encryption tampoco
tiene nada que vincular.
Para tener en cuenta
- Es aditivo: activarlo no cambia qué cadenas o métodos se cifran, solo cómo se vincula su descifrado al archivo distribuido.
- Una compilación que ya incumple la limitación de archivo único, recorte o AOT de la detección de manipulación también omite el cifrado de integridad por la misma razón: las dos necesitan el ensamblado como un archivo cargable sencillo.
- Volver a compilar, volver a firmar o volver a combinar el ensamblado después de la ofuscación invalida la vinculación, igual que invalidaría un hash de detección de manipulación: aplique el cifrado de integridad como parte del paso de compilación de Babel que genera el archivo que distribuye, no antes de que un paso posterior lo modifique.
Consulte también
- Cifrado de cadenas y Cifrado de código (MSIL): las dos protecciones que vincula el cifrado de integridad.
- Detección de manipulación: una salvaguarda que reacciona y que combina bien con él.
- Reglas XML: cómo seleccionar qué métodos protege MSIL Encryption con
feature="msil encryption".