Lizenzgebundene Codeverschlüsselung
Dieses Beispiel macht eine geschützte Funktion kryptografisch von einer gültigen Lizenz abhängig, indem es zwei Babel-Technologien kombiniert: Die MSIL-Codeverschlüsselung verschlüsselt den Rumpf einer sensiblen Methode, und Babel Licensing speichert das Passwort zur Entschlüsselung, selbst verschlüsselt, in einer signierten, hardwaregebundenen Lizenz. Die Babel Virtual Machine fragt die Anwendung über einen Hook get password nach dem Passwort, und dieser gibt es erst zurück, nachdem die Lizenz validiert wurde. Die Lizenzprüfung zu entfernen oder zu umgehen genügt nicht: Ohne gültige Lizenz gibt es kein Passwort, und ohne das Passwort kann der verschlüsselte Code nicht laufen.
Für dieses Beispiel brauchen Sie eine Standortlizenz für Babel Obfuscator (Edition Ultimate, Server oder Data Center) und Babel Licensing. Der Quellcode ist auf GitHub verfügbar:
git clone https://github.com/babelfornet/license-bound-encryption-console-example.gitDie sensible Methode ist so gekennzeichnet, dass Babel den verschlüsselten Rumpf in der Assembly belässt und zur Laufzeit nach seinem Passwort fragt:
[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.
}Das Passwort für den Code erscheint in der ausgelieferten Binärdatei nie im Klartext. Es wird (mit einem
Geheimnis des Herstellers verschlüsselt) in ein Lizenzfeld geschrieben und zur Laufzeit nur aus einer
gültig signierten Lizenz wiederhergestellt, die an den aktuellen Rechner gebunden ist. Ein
begleitendes Projekt LicenseGenerator stellt die Lizenz aus.
Valid license -> Compute(7, 5) = 147 (the encrypted method runs)
Missing / tampered -> Protected computation blocked (the BVM cannot decrypt the method)Nach diesem Prinzip schaltet Babel auch seine eigenen Funktionen frei. Die vollständige Erklärung finden Sie unter Lizenzgebundene Codeverschlüsselung im Handbuch zur Codeverschlüsselung, eine Variante mit mehreren Funktionen unter Funktionsbasierte Lizenzen.