Offuscare .NET MAUI
Babel Obfuscator può offuscare un’applicazione .NET MAUI (Multi-platform App UI) elaborando con il suo motore di offuscamento il file dell’assembly compilato (per esempio una DLL o un EXE). Il processo di offuscamento modifica l’assembly compilato per rendere il codice più difficile da capire e da sottoporre a reverse engineering, preservando al tempo stesso il funzionamento dell’applicazione.
Quando offuschi un’applicazione .NET MAUI con Babel Obfuscator, è consigliabile usare la versione più recente dell’offuscatore e seguire le procedure consigliate per l’offuscamento: offuscare tutto il codice e le risorse, mantenere intatti i nomi importanti tramite le esclusioni e provare l’applicazione offuscata per verificare che funzioni ancora correttamente.
Useremo l’applicazione MAUI di esempio TwoPaneView, scaricabile da GitHub https://github.com/dotnet/maui-samples .
git clone https://github.com/dotnet/maui-samplesQueste applicazioni di esempio sono pensate per mostrare varie funzionalitĂ del framework MAUI e sono un buon punto di partenza per creare applicazioni MAUI personalizzate.
Configurare il task Babel
Clona il repository di esempio
Clona il repository del progetto da GitHub e salvalo sul tuo computer.
Apri il progetto di esempio
Nel repository spostati nella cartella 7.0, poi al suo interno in UserInterface/Views/TwoPaneView. Apri il file della soluzione TwoPaneViewSample.sln che si trova in questa cartella.
Apri il file di progetto
Una volta aperta la soluzione in Visual Studio, fai doppio clic sul nodo del progetto TwoPaneViewSample nella finestra Solution Explorer. Il file di progetto si apre nell’editor di Visual Studio.
Aggiungi le istruzioni MSBuild di Babel
Aggiungi in fondo al file di progetto le istruzioni MSBuild necessarie. Indicano a Babel Obfuscator come offuscare il codice del progetto.
<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>Nel contesto di Babel Obfuscator, il gruppo di elementi @BabelSearchDirectories definisce un elenco di cartelle in cui il processo di offuscamento cerca per risolvere i riferimenti agli assembly usati nel progetto.
L’elenco viene generato estraendo le cartelle di ricerca dall’elenco degli assembly referenziati dal progetto. Babel Obfuscator esamina i metadati degli assembly referenziati per determinare la posizione delle loro dipendenze e aggiunge quelle cartelle all’elenco @BabelSearchDirectories. In questo modo l’offuscatore trova tutti i file che gli servono per offuscare correttamente il codice del progetto.
Compila ed esegui il progetto
Ora puoi compilare ed eseguire l’applicazione .NET MAUI offuscata.

Applicazione MAUI di esempio TwoPaneView
Usare il pacchetto NuGet
Il pacchetto NuGet Babel.Obfuscator può essere usato su Windows, macOS e Linux da chi ha l’edizione Ultimate, Server o Data Center. La configurazione diventa più semplice, perché ti basta aggiungere le impostazioni di offuscamento proprie di Babel senza doverti occupare degli altri elementi della build. Con il pacchetto NuGet puoi fare a meno del task Babel e semplificare la configurazione dei tuoi progetti.
- Aggiungi Babel.Obfuscator.nupkg al progetto TwoPaneViewSample.
- Imposta le seguenti proprietĂ nel file di progetto di TwoPaneViewSample:
<PropertyGroup>
<StringEncryption>hash</StringEncryption>
<ResourceEncryption>true</ResourceEncryption>
<ObfuscateXaml>true</ObfuscateXaml>
<ControlFlowObfuscation>if=on;switch=on;case=on;call=on</ControlFlowObfuscation>
<ControlFlowIterations>3</ControlFlowIterations>
</PropertyGroup>Il progetto di esempio con le istruzioni del task Babel già incluse può essere scaricato qui .
Comportamento del linker per le app .NET MAUI iOS
Durante la build di un’app .NET MAUI, un linker (ILLink) riduce al minimo le dimensioni dell’app rimuovendo il codice non usato. Mantiene solo i metodi, le proprietà , i campi, gli eventi, le struct e le classi essenziali.
ILLink supporta tre modalitĂ per le app .NET MAUI su iOS e Mac Catalyst:
- Don’t link: tutte le ottimizzazioni del linker sono disattivate.
- Link SDK assemblies only: vengono ottimizzati solo gli assembly dell’SDK, rimuovendo i tipi e i membri non usati, mentre i tuoi assembly restano inalterati.
- Link all assemblies: questa modalità applica ottimizzazioni che riducono al minimo le dimensioni dell’app modificando il codice intermedio.
Un assembly offuscato con Babel Obfuscator contiene codice dinamico e strutture complesse che ILLink non riesce a rilevare. Di conseguenza, ottimizzazioni aggressive come Link all assemblies possono compromettere il funzionamento dell’app.
Per evitare possibili problemi con ILLink quando usi assembly offuscati, è consigliabile impostare la modalità di ILLink su “Link SDK assemblies only”.