Integritätsgebundene Verschlüsselung Ultimate
Die integritätsgebundene Verschlüsselung bindet die integrierte Zeichenfolgenverschlüsselung und Codeverschlüsselung (MSIL) von Babel an genau die Assembly-Datei, die Babel erzeugt hat. Eine auf diese Weise verschlüsselte Zeichenfolge oder Methode wird nur dann korrekt entschlüsselt, wenn die Anwendung aus dieser unveränderten Datei läuft. Bei jeder anderen Kopie, etwa einer gepatchten Binärdatei, einem in einem Hex-Editor geänderten Byte oder einer mit einem anderen Build zusammengeführten Datei, schlägt die Entschlüsselung fehl, sodass die geschützten Zeichenfolgen und Methoden nie richtig zurückkommen.
Ohne sie schützen die Zeichenfolgen- und die MSIL-Verschlüsselung nur den Inhalt dessen, was sie verbergen. Die Entschlüsselungsroutine selbst arbeitet jedoch unabhängig davon, in welcher Datei sie landet: Eine Methode oder Zeichenfolge, die aus Ihrer Assembly entfernt und in eine andere eingefügt wird, lässt sich dort weiterhin ganz normal entschlüsseln. Die integritätsgebundene Verschlüsselung schließt diese Lücke, indem sie die Entschlüsselung an die ausgelieferte Datei selbst bindet, sodass es genügt, die geschützten Daten an einen anderen Ort zu verschieben, um sie unbrauchbar zu machen, ohne dass Sie eigenen Erkennungscode schreiben oder pflegen müssen.
Die integritätsgebundene Verschlüsselung ist ein anderes Schutzmittel als die Manipulationserkennung. Die Manipulationserkennung reagiert: Sie prüft das geladene Abbild und lässt Sie benutzerdefinierten Code ausführen, etwa das Ereignis protokollieren, eine Meldung anzeigen oder die Anwendung beenden, wenn es nicht übereinstimmt. Die integritätsgebundene Verschlüsselung reagiert dagegen überhaupt nicht: Sie macht die verschlüsselten Daten lediglich außerhalb der Datei unbrauchbar, in die sie eingebaut wurden. Beide lassen sich gut kombinieren: die Manipulationserkennung für eine sichtbare Reaktion, die integritätsgebundene Verschlüsselung, damit selbst ohne eine solche Reaktion nichts wiederherzustellen ist.

„Integrity Encryption“ liegt im Eigenschaftenbereich von Babel Desktop direkt neben „String Encryption“ und „MSIL Encryption“
Anforderungen
- Auf dem Ziel müssen bereits Zeichenfolgenverschlüsselung oder Codeverschlüsselung eingeschaltet sein. Die integritätsgebundene Verschlüsselung hat nichts Eigenes zu schützen: Sie bindet nur die Entschlüsselung der Funktion (oder der beiden Funktionen), die Sie eingeschaltet haben. Schalten Sie sie ein, ohne dass eine der beiden aktiv ist, bewirkt das nichts.
- Nur für Desktop-Assemblys ab .NET Framework 4 oder .NET/Core, also für ein dateigestütztes, ladbares PE-Abbild. Mit Einzeldateiveröffentlichung, Trimming oder NativeAOT wird sie nicht unterstützt: Diese Veröffentlichungsarten erhalten die Assembly nicht als einfache Datei, an die Babel binden kann.
- Die Assembly braucht keinen starken Namen. Hat sie bereits einen, prüft Babel im selben Vorgang auch die Signatur des starken Namens.
- Neben der Ultimate-Edition des Obfuscators ist sie auch in den Editionen Server und Data Center von Babel Licensing enthalten, die die Ultimate-Edition des Obfuscators mitbringen.
Integritätsgebundene Verschlüsselung einschalten
Befehlszeile
babel myapp.exe --integrityencryption --stringencryption trueMSBuild-Aufgabe Babel
<PropertyGroup>
<IntegrityEncryption>true</IntegrityEncryption>
<StringEncryption>true</StringEncryption>
</PropertyGroup>
<Babel IntegrityEncryption="$(IntegrityEncryption)" StringEncryption="$(StringEncryption)" />Babel Desktop
Schalten Sie in der Optionsliste des Ziels „Integrity Encryption“ neben „String Encryption“ oder „MSIL Encryption“ ein. Babel Desktop markiert die Einstellung, wenn noch keine der beiden Verschlüsselungen aktiv ist, weil es dann nichts zu binden gäbe.

Der Hilfetext der Einstellung wiederholt ihre Voraussetzungen und Edition
Beispiel
Ein Ziel, das mit der MSIL-Verschlüsselung bereits einen sensiblen Namespace verschlüsselt, mit hinzugefügter integritätsgebundener Verschlüsselung, um ihn zu binden:
<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>Die Regel legt fest, welche Methoden die MSIL-Verschlüsselung schützt. Die integritätsgebundene Verschlüsselung ändert diese
Auswahl nicht, sie bindet nur das Ergebnis an die Ausgabedatei dieses Builds. Die Methoden werden mit oder ohne sie auf dieselbe
Weise ausgewählt: über einen regulären Ausdruck oder einen Platzhalterfilter direkt in MsilEncryption, oder über eine
XML-Regel wie die oben gezeigte mit feature="msil encryption". Ohne Filter und ohne passende Regel schaltet MsilEncryption
die Funktion ein, wählt aber nichts aus, sodass die integritätsgebundene Verschlüsselung ebenfalls nichts zu binden hat.
Zu beachten
- Sie ist additiv: Das Einschalten ändert nicht, welche Zeichenfolgen oder Methoden verschlüsselt werden, sondern nur, wie ihre Entschlüsselung an die ausgelieferte Datei gebunden wird.
- Ein Build, der bereits an der Einschränkung der Manipulationserkennung für Einzeldateiveröffentlichung, Trimming oder AOT scheitert, überspringt aus demselben Grund auch die integritätsgebundene Verschlüsselung: Beide brauchen die Assembly als einfache, ladbare Datei.
- Wird die Assembly nach der Verschleierung neu erstellt, neu signiert oder erneut zusammengeführt, wird die Bindung ungültig, genauso wie dadurch ein Hash der Manipulationserkennung ungültig würde: Wenden Sie die integritätsgebundene Verschlüsselung als Teil des Babel-Build-Schritts an, der die ausgelieferte Datei erzeugt, nicht bevor ein späterer Schritt sie noch verändert.
Siehe auch
- Zeichenfolgenverschlüsselung und Codeverschlüsselung (MSIL): die beiden Schutzfunktionen, die die integritätsgebundene Verschlüsselung bindet.
- Manipulationserkennung: ein reagierendes Schutzmittel, das gut dazu passt.
- XML-Regeln: damit wählen Sie mit
feature="msil encryption"aus, welche Methoden die MSIL-Verschlüsselung schützt.