Wert- und Arrayverschlüsselung
Konstante Werte und Arrays, die inline in Ihrem Code deklariert sind, enthalten oft sensible Informationen, etwa Schlüssel für die Datenverschlüsselung oder andere kritische Daten, die Sie vor Disassemblern und vor Reverse Engineering verbergen möchten. Babel Obfuscator bietet eine Funktion, die diese konstanten Werte und Arrays verschlüsselt und Ihre sensiblen Informationen so mit einer zusätzlichen Schutzebene versieht.
Babel Obfuscator bietet Konfigurationsoptionen, mit denen Sie Inline-Werte verschiedener Datentypen verschlüsseln können, darunter int32, int64, single, double und Arrays. Mit diesen Optionen erhöhen Sie die Sicherheit Ihres Codes, indem Sie gezielt diese Arten von Werten verschlüsseln.
Die Verschlüsselung von int32- und int64-Werten schützt numerische Daten dieser Typen, etwa ganze Zahlen oder lange ganze Zahlen, vor unbefugtem Zugriff. Ebenso schützt die Verschlüsselung von single- und double-Werten Gleitkommazahlen, etwa Dezimalzahlen oder reelle Zahlen. Wenn Sie diese Inline-Werte verschlüsseln, lassen sich sensible numerische Daten in Ihrem Code nicht mehr ohne Weiteres entziffern oder ändern.
Außerdem kann Babel Obfuscator Arrays verschlüsseln, die inline in Ihrem Code deklariert sind. Arrays sind Sammlungen von Elementen, und ihre Verschlüsselung trägt dazu bei, die Vertraulichkeit und die Integrität der enthaltenen Daten zu wahren. Diese zusätzliche Verschlüsselungsebene verhindert, dass Angreifer Einblick in den Inhalt Ihrer Arrays erhalten, selbst wenn es ihnen gelingt, Ihren Code zu analysieren oder zu dekompilieren.
Dieser Abschnitt behandelt:
- Funktionsweise
- Unterstützte Werte: welche Konstanten und Arrays verschlüsselt werden und welche unverändert bleiben
- Konfiguration: CLI, MSBuild und Babel Desktop
- Leistung und Deobfuskierungsresistenz
Funktionsweise
Beim Build entfernt Babel die Konstante aus dem Methodenrumpf und ersetzt sie durch einen Tabellenzugriff: Die literale ldc-Anweisung wird so umgeschrieben, dass der Wert aus einer in die Assembly eingebetteten verschlüsselten Tabelle geholt und zur Laufzeit bei Bedarf entschlüsselt wird. Numerische Konstanten (int32, int64, single, double) werden je Typ gesammelt und in diese Tabelle verschlüsselt, und jeder ursprüngliche Ladevorgang wird zu einem kleinen Aufruf, der den entschlüsselten Wert zurückgibt. Inline-Arrays werden ähnlich behandelt: Die Initialisierungsdaten des Arrays, die normalerweise als Klartext-Blob in der Assembly liegen, werden verschlüsselt und zur Laufzeit wieder aufgebaut.
Im Ergebnis sieht ein Decompiler im IL-Code nicht mehr die echten Zahlen oder Arrayinhalte, sondern nur Indizes in eine undurchsichtige, verschlüsselte Tabelle. Die Werte werden verzögert entschlüsselt, während Ihr Code läuft, das Verhalten bleibt also unverändert.
Bereitstellung auf Hosts im FIPS-Modus? Verschlüsselte Werte und Arrays werden zur Laufzeit über den Kryptografieanbieter der Plattform entschlüsselt. Ein Container auf einem Host im FIPS-Modus ohne zertifizierten OpenSSL-FIPS-Anbieter kann deshalb beim Start fehlschlagen. Ursache und Lösung beschreibt die Seite FIPS-Konformität.
Beachten Sie, dass die Wert- und Arrayverschlüsselung wegen der Ver- und Entschlüsselung zur Laufzeit die Leistung geringfügig beeinträchtigen kann. Wägen Sie deshalb Sicherheit und Leistung je nach den Anforderungen Ihrer Anwendung sorgfältig gegeneinander ab, siehe Leistung.