Blazor Web App
Le applicazioni Blazor possono essere protette con Babel Obfuscator, con diversi vantaggi. Uno dei principali vantaggi delle pagine Razor di Blazor è la possibilità di combinare markup HTML e codice C#, ottenendo un codice più conciso e leggibile. È particolarmente utile per gli sviluppatori che conoscono meglio C# e preferiscono usarlo direttamente anziché affidarsi a JavaScript o ad altri linguaggi di front-end.
L’offuscamento può rinominare classi, metodi e variabili per nasconderne i nomi originali, rendendo più difficile per i potenziali attaccanti capire e modificare il codice. Nel caso di un’applicazione Blazor, offuscare le pagine Razor può anche impedire agli utenti finali di visualizzare o manipolare il codice HTML e C#, aggiungendo un ulteriore strato di sicurezza.
Il repository GitHub all’indirizzo https://github.com/dotnet/blazor-samples contiene diverse applicazioni di esempio che mostrano varie funzionalità e capacità della tecnologia Blazor. Useremo uno di questi esempi per mostrare come integrare in modo efficace Babel Obfuscator per offuscare un’applicazione web Blazor.
git clone https://github.com/dotnet/blazor-samplesPer iniziare con gli esempi di app Blazor, puoi clonare il repository del progetto disponibile su GitHub. Dopo aver clonato il repository, spostati nella cartella 7.0\BlazorServerSignalRApp e apri con Visual Studio il file di progetto BlazorServerSignalRApp.csproj.
Se hai la licenza Company, puoi offuscare l’applicazione durante il processo di build aggiungendo un riferimento al pacchetto NuGet Babel.Obfuscator. L’offuscamento diventa così più semplice e lineare e ti permette di proteggere l’applicazione in modo più efficace.
Apri il file di progetto facendo doppio clic sul nodo del progetto BlazorServerSignalRApp nella finestra Solution Explorer e aggiungi il seguente frammento di codice MSBuild prima del tag di chiusura </Project>.
<UsingTask TaskName="Babel" AssemblyName="Babel.Build, Version=10.0.0.0, Culture=neutral, PublicKeyToken=138d17b5bd621ab7" />
<Target Name="Obfuscate" AfterTargets="Compile">
<Babel InputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" OutputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" ObfuscateTypes="true" ObfuscateEvents="true" ObfuscateMethods="true" ObfuscateProperties="true" ObfuscateFields="true" VirtualFunctions="true" UnicodeNormalization="false" FlattenNamespaces="true" StringEncryption="hash" ResourceEncryption="true" ControlFLowObfuscation="if=on;switch=on;case=on;call=on" ControlFLowIterations="3" />
</Target>Salva il file e ricompila la soluzione. Durante il processo di build, Babel Obfuscator viene eseguito automaticamente ed elabora l’assembly target. Puoi provare l’applicazione offuscata premendo F5 per avviare il debugger di Visual Studio.

Applicazione Blazor Server SignalR
In Blazor ogni pagina web è un componente Razor implementato come file .razor, che combina HTML e codice C#. Quando il componente viene compilato, Visual Studio genera una classe pubblica che corrisponde al componente Razor, e questa classe viene usata per costruire la pagina web nel browser. Per impostazione predefinita, Babel Obfuscator non rinomina i simboli visibili dall’esterno, per non compromettere l’interfaccia pubblica dell’assembly. Di conseguenza le classi pubbliche che corrispondono alle pagine web Blazor non vengono offuscate.
Puoi però proteggere queste pagine web configurando Babel Obfuscator con le regole XML in modo da offuscare le classi in modo esplicito. Così impedisci l’accesso e la modifica non autorizzati del tuo codice e rendi più difficile per gli attaccanti sottoporre a reverse engineering o sottrarre la logica della tua applicazione.
Per creare una regola XML che protegga il code-behind delle pagine Razor con Babel Obfuscator, devi prima aprire l’assembly dell’applicazione con uno strumento di ispezione .NET a tua scelta. Puoi usare strumenti come ILSpy, DotPeek o dnSpy, che permettono di decompilare l’assembly ed esaminarne il contenuto. Una volta aperto l’assembly, cerca la classe che rappresenta il code-behind della pagina Razor da proteggere: ha lo stesso nome della pagina Razor e si trova nel namespace il cui nome termina con Pages o Shared.

BlazorServerSignalRApp disassemblato
Una volta individuata la classe, puoi creare una regola XML per Babel Obfuscator che si applica alle classi da offuscare. La regola XML deve specificare il nome del namespace che vuoi proteggere. In questo caso
Crea un nuovo elemento di progetto XML con il nome babelRules.xml e aggiungi la regola seguente:
<?xml version="1.0" encoding="utf-8" ?>
<Rules>
<Rule name="rule1" feature="renaming" exclude="false">
<Target>Classes</Target>
<Pattern>*</Pattern>
<Namespace>BlazorServerSignalRApp.Pages,BlazorServerSignalRApp.Shared</Namespace>
</Rule>
</Rules>Poi aggiungi il file babelRules.xml al task Babel come segue:
<Babel RulesFiles="$(ProjectDir)babelRules.xml" ... />Esegui la build ed esamina l’assembly target appena generato.

BlazorServerSignalRApp disassemblato
Le classi pubbliche corrispondenti alle pagine web non sono più visibili.
Configurare Babel Obfuscator con le regole XML permette un controllo granulare su quali classi offuscare e su come rinominarle, offrendoti maggiore flessibilità e più possibilità di personalizzazione.
In genere puoi usare la funzionalità Publish di Visual Studio per distribuire l’applicazione in una cartella. Dopo aver pubblicato l’app, puoi eseguire il file BlazorServerSignalRApp.exe per avviare l’applicazione. In questo modo puoi provare l’applicazione offuscata e verificare che funzioni come previsto.
L’applicazione di esempio con Babel Obfuscator già integrato può essere scaricata qui .