.NET MAUI verschleiern
Babel Obfuscator kann eine Anwendung für .NET MAUI (Multi-platform App UI) verschleiern, indem es die kompilierte Assembly-Datei (zum Beispiel eine DLL oder EXE) mit seiner Verschleierungs-Engine verarbeitet. Die Verschleierung verändert die kompilierte Assembly so, dass der Code schwerer zu verstehen und per Reverse Engineering zu analysieren ist, während die Funktionalität der Anwendung erhalten bleibt.
Wenn Sie eine .NET-MAUI-Anwendung mit Babel Obfuscator verschleiern, empfiehlt es sich, die neueste Version des Obfuscators zu verwenden und die bewährten Vorgehensweisen der Verschleierung zu befolgen: den gesamten Code und alle Ressourcen verschleiern, wichtige Namen über Ausschlüsse unverändert lassen und die verschleierte Anwendung testen, um sicherzustellen, dass sie weiterhin korrekt funktioniert.
Wir verwenden die MAUI-Beispielanwendung TwoPaneView, die auf GitHub unter https://github.com/dotnet/maui-samples zum Herunterladen bereitsteht.
git clone https://github.com/dotnet/maui-samplesDiese Beispielanwendungen zeigen verschiedene Funktionen des MAUI-Frameworks und sind ein guter Ausgangspunkt für eigene MAUI-Anwendungen.
Die Babel-Aufgabe konfigurieren
Beispiel-Repository klonen
Klonen Sie das Repository des Projekts von GitHub und speichern Sie es auf Ihrem lokalen Rechner.
Beispielprojekt öffnen
Wechseln Sie im Repository in den Ordner 7.0 und darin nach UserInterface/Views/TwoPaneView. Öffnen Sie in diesem Ordner die Projektmappendatei TwoPaneViewSample.sln.
Projektdatei öffnen
Wenn die Projektmappe in Visual Studio geöffnet ist, doppelklicken Sie auf den Projektknoten TwoPaneViewSample im Fenster „Solution Explorer“ (Projektmappen-Explorer). Dadurch wird die Projektdatei im Editor von Visual Studio geöffnet.
MSBuild-Anweisungen für Babel hinzufügen
Fügen Sie der Projektdatei die erforderlichen MSBuild-Anweisungen an. Sie teilen Babel Obfuscator mit, wie der Code des Projekts verschleiert wird.
<UsingTask TaskName="Babel" AssemblyName="Babel.Build, Version=10.0.0.0, Culture=neutral, PublicKeyToken=138d17b5bd621ab7" />
<Target Name="Obfuscate" AfterTargets="Compile">
<ItemGroup>
<_BabelSearchDirectories Include="@(ReferencePathWithRefAssemblies->'%(rootdir)%(directory)')" Condition="'%(Extension)' == '.dll'" />
<BabelSearchDirectories Include="@(_BabelSearchDirectories->Distinct())" />
</ItemGroup>
<Babel InputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" OutputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" SearchDirectories="@(BabelSearchDirectories)" GenerateDebug="true" ObfuscateTypes="true" ObfuscateEvents="true" ObfuscateMethods="true" ObfuscateProperties="true" ObfuscateFields="true" ObfuscateXaml="true" VirtualFunctions="true" UnicodeNormalization="false" FlattenNamespaces="true" StringEncryption="hash" ResourceEncryption="true" ControlFLowObfuscation="if=on;switch=on;case=on;call=on" ControlFLowIterations="3" />
</Target>Die Elementgruppe @BabelSearchDirectories definiert für Babel Obfuscator eine Liste von Verzeichnissen, die bei der Verschleierung durchsucht werden, um die im Projekt verwendeten Assembly-Referenzen aufzulösen.
Diese Liste entsteht, indem die Suchverzeichnisse aus der Liste der vom Projekt referenzierten Assemblys entnommen werden. Babel Obfuscator ermittelt anhand der Metadaten der referenzierten Assemblys den Speicherort ihrer Abhängigkeiten und fügt diese Verzeichnisse der Liste @BabelSearchDirectories hinzu. So findet der Obfuscator alle Dateien, die er braucht, um den Code des Projekts erfolgreich zu verschleiern.
Projekt erstellen und ausführen
Jetzt können Sie die verschleierte .NET-MAUI-Anwendung kompilieren und ausführen.

Die MAUI-Beispielanwendung TwoPaneView
Das NuGet-Paket verwenden
Wer die Edition Ultimate, Server oder Data Center hat, kann das NuGet-Paket Babel.Obfuscator unter Windows, macOS und Linux verwenden. Die Konfiguration wird dadurch einfacher: Sie fügen nur die Verschleierungseinstellungen von Babel hinzu und müssen keine weiteren Buildelemente konfigurieren. Mit dem NuGet-Paket kommen Sie ohne die Babel-Aufgabe aus und vereinfachen die Konfiguration Ihrer Projekte.
- Fügen Sie dem Projekt TwoPaneViewSample das Paket Babel.Obfuscator.nupkg hinzu.
- Setzen Sie in der Projektdatei von TwoPaneViewSample die folgenden Eigenschaften:
<PropertyGroup>
<StringEncryption>hash</StringEncryption>
<ResourceEncryption>true</ResourceEncryption>
<ObfuscateXaml>true</ObfuscateXaml>
<ControlFlowObfuscation>if=on;switch=on;case=on;call=on</ControlFlowObfuscation>
<ControlFlowIterations>3</ControlFlowIterations>
</PropertyGroup>Das Beispielprojekt mit den bereits enthaltenen Anweisungen für die Babel-Aufgabe können Sie hier herunterladen.
Linkverhalten bei .NET-MAUI-Apps für iOS
Beim Erstellen einer .NET-MAUI-App verkleinert ein Linker (ILLink) die App, indem er ungenutzten Code entfernt. Er behält nur die notwendigen Methoden, Eigenschaften, Felder, Ereignisse, Strukturen und Klassen.
ILLink unterstützt für .NET-MAUI-Apps unter iOS und Mac Catalyst drei Modi:
- Don’t link (nicht verknüpfen): Alle Optimierungen des Linkers sind ausgeschaltet.
- Link SDK assemblies only (nur SDK-Assemblys verknüpfen): Nur die SDK-Assemblys werden optimiert, indem ungenutzte Typen und Member entfernt werden. Ihre eigenen Assemblys bleiben unverändert.
- Link all assemblies (alle Assemblys verknüpfen): Dieser Modus wendet Optimierungen an, die die App durch Änderungen am Zwischencode verkleinern.
Eine mit Babel Obfuscator verschleierte Assembly enthält dynamischen Code und komplexe Strukturen, die ILLink nicht erkennt. Aggressive Optimierungen wie Link all assemblies können daher die Funktion der App beeinträchtigen.
Um mögliche Probleme mit ILLink bei verschleierten Assemblys zu vermeiden, empfiehlt es sich, den ILLink-Modus auf „Link SDK assemblies only“ einzustellen.