Skip to Content
Neue Version 12 verfügbar 🎉
ObfuscatorCodeverschlüsselungEinen Algorithmus schützen

Einen Algorithmus mit Codeverschlüsselung schützen

Ein proprietärer Algorithmus ist oft das Wertvollste in einer Assembly, und zugleich das, was sich am leichtesten direkt aus einem Decompiler entnehmen lässt. Dieses Beispiel wendet mit dem NuGet-Paket von Babel Obfuscator die MSIL-Codeverschlüsselung über eine einzige MSBuild-Eigenschaft auf eine Scoring-Engine an. Es ist die einfachste Einrichtung der Codeverschlüsselung: ohne Babel Licensing und ohne Lizenz zur Laufzeit, denn die Standard-Codeverschlüsselung bettet den Schlüssel in die Binärdatei ein, und die geschützte Anwendung läuft eigenständig.

Für dieses Beispiel brauchen Sie eine Standortlizenz für Babel Obfuscator (Edition Ultimate, Server oder Data Center). Der Quellcode ist auf GitHub verfügbar:

git clone https://github.com/babelfornet/code-encryption-nuget-example.git

Der geschützte Code ist ein proprietärer Scoring-Algorithmus (src/AlgorithmApp/ScoringEngine.cs), also die Art von geistigem Eigentum, die kein Wettbewerber aus einem Decompiler entnehmen soll:

internal static class ScoringEngine { public static int Score(int recency, int frequency, int monetary) { int r = Bucket(recency, 3, 12, 30); int f = Bucket(frequency, 2, 5, 12); int m = Bucket(monetary, 50, 250, 1000); return Normalize(r * 25 + f * 17 + m * 11); // vendor's secret weighting } // Bucket / Normalize … }

Nach der Verschlüsselung sind die Rümpfe von Score, Bucket und Normalize aus dem IL-Code verschwunden und werden nur zur Laufzeit von der Babel Virtual Machine wiederhergestellt. Das Konsolenprojekt AlgorithmApp verschlüsselt den sensiblen Typ in der Konfiguration Release:

<ItemGroup Condition="'$(Configuration)' == 'Release'"> <PackageReference Include="Babel.Obfuscator" Version="12.0.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> </ItemGroup> <PropertyGroup Condition="'$(Configuration)' == 'Release'"> <MsilEncryption>AlgorithmApp\.ScoringEngine::.*</MsilEncryption> <BabelWarningsAsErrors>W00000</BabelWarningsAsErrors> </PropertyGroup>

MsilEncryption ist ein regulärer Ausdruck, der die zu verschlüsselnden Methoden auswählt, hier alle Methoden des Typs ScoringEngine. Babel schreibt diese Methodenrümpfe in eigene verschlüsselte Anweisungen um, die nur die Babel Virtual Machine ausführen kann. Das ist die Standard-Codeverschlüsselung (ohne <Source>). Eine Babel-Lizenz ist daher nur beim Build erforderlich, und die geschützte Anwendung läuft eigenständig.

Ein Build des Beispiels in Release verschlüsselt die drei Scoring-Methoden bei identischer Programmausgabe, und der IL-Code des Algorithmus ist in der Assembly nicht mehr vorhanden. Wie sich der verschlüsselte Code nur mit einer gültigen Lizenz freischalten lässt, sodass es nicht genügt, die Lizenzprüfung zu entfernen, zeigen die folgenden Lizenzierungsbeispiele.

Last updated on