Skip to Content
Nuova versione 12 disponibile 🎉
ObfuscatorTask MSBuild

Task MSBuild

Babel Obfuscator si integra facilmente con MSBuild per inserire l'offuscamento nel tuo processo di build.

Il task Babel di MSBuild è disponibile con qualsiasi edizione della licenza di Babel Obfuscator e può essere aggiunto a qualsiasi progetto MSBuild inserendo l’elemento UsingTask appropriato nel file XML del progetto MSBuild:

<UsingTask TaskName="Babel" AssemblyName="Babel.Build, Version=10.0.0.0, Culture=neutral, PublicKeyToken=138d17b5bd621ab7" />

L’attributo AssemblyName indica il nome completo del componente .NET Babel.Build.dll installato nella Global Assembly Cache.

La proprietà Version di AssemblyName va impostata sulla versione del prodotto attualmente installata. Per esempio, se hai installato la versione x.y.z.w:

Version=x.y.z.0

Il numero di revisione w va sempre impostato a 0.

Se non vuoi usare il nome completo dell’assembly, puoi fare riferimento al componente Babel.Build.dll tramite il percorso completo, come segue:

<UsingTask TaskName="Babel" AssemblyFile="<Full path to Babel.Build.dll>" />

Una volta referenziato l’assembly Babel.Build, puoi usare il task Babel per avviare Babel Obfuscator su un determinato assembly target:

<Target Name="AfterBuild"> <Babel InputFile="$(TargetPath)" OutputFile="$(TargetPath)" /> </Target>

Il task Babel definito sopra viene eseguito dopo la build per offuscare l’assembly target, sostituendolo con quello offuscato elaborato da Babel.

Il target “AfterBuild” è un target MSBuild  ben noto, definito nella pipeline di build, e viene usato di solito per aggiungere i task da eseguire una volta completata la build, quando tutti i binari si trovano nella cartella di output della build definita dalla variabile MSBuild  $(TargetPath).

Per esempio, il task Babel citato in precedenza viene eseguito dopo la build per offuscare l’assembly target indicato dalla variabile $(TargetPath), sostituendolo con la versione offuscata elaborata da Babel.

I target AfterBuild e Compile

Negli SDK .NET più recenti sono stati introdotti alcuni task di ottimizzazione aggiuntivi, eseguiti prima del task “AfterBuild” e dopo il passo di compilazione, che avviene durante il task “Compile”. Il task “Compile” è distinto da “AfterBuild”, che è soltanto un segnaposto nella pipeline di build, pensato per essere ridefinito da processi di build esterni. Il task “Compile” è il passo in cui avviene effettivamente la compilazione e non può essere sostituito da task definiti dall’utente.

Poiché l’offuscamento va eseguito dopo il task “Compile” e prima di qualsiasi ottimizzazione successiva effettuata dal sistema di build, devi inserire il task di offuscamento Babel subito dopo il passo “Compile”. Puoi farlo con l’attributo AfterTargets dei target MSBuild, come mostrato di seguito:

<Target Name="Obfuscate" AfterTargets="Compile"> <Babel InputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" OutputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" /> </Target>

Questa configurazione garantisce che l’offuscamento venga applicato all’output compilato prima che vengano eseguite altre ottimizzazioni della build.

È importante notare che le proprietà InputFile e OutputFile non sono impostate su TargetPath perché, in questa fase del processo di build, l’assembly compilato non è ancora stato copiato nella posizione indicata da TargetPath. Si trova invece in una cartella di build intermedia, $(IntermediateOutputPath), che fa da origine per tutti i passi di build successivi.

Questa cartella intermedia contiene l’assembly e gli altri artefatti prodotti durante la fase di compilazione, e consente di eseguire vari task, offuscamento compreso, sull’output compilato prima che la build finale sia completata. Indicando il percorso intermedio, hai la certezza che l’offuscamento venga applicato alla versione corretta dell’assembly, così com’è prima di qualsiasi copia o elaborazione aggiuntiva che potrebbe alterare l’output della build.

Questo approccio non solo snellisce il processo di build, ma garantisce anche che l’output offuscato venga generato correttamente e sia pronto per eventuali task di ottimizzazione o passi di distribuzione successivi.

Configurare il task Babel

Il task Babel offre diverse proprietà che puoi configurare per adattare il processo di offuscamento alle tue esigenze. L’elenco completo di queste proprietà si trova nella sezione Riferimento del task Babel della documentazione. Per impostazione predefinita, il task Babel abilita solo la ridenominazione dei simboli, che modifica i nomi di classi, metodi e altri simboli del codice per renderne più difficile il reverse engineering.

Per accedere alle funzionalità di offuscamento più avanzate, come l’offuscamento del flusso di controllo, la cifratura delle stringhe e altre tecniche sofisticate, serve una licenza valida. Senza una licenza valida, il task Babel funziona in modalità demo, limitata alla ridenominazione dei simboli. Inoltre, gli assembly offuscati in modalità demo smettono di funzionare dopo una data precisa, indicata nel log di build dal codice di avviso W00000. Per esempio:

Warning [W00000]: This is an evaluation version, the obfuscated assembly will no longer work after 15/08/2024 17:16:27

Ottenere e applicare una licenza valida sblocca tutte le funzionalità di offuscamento di Babel e rimuove ogni limitazione, così gli assembly offuscati funzionano senza scadenza.

<Target Name="Obfuscate" AfterTargets="Compile"> <Babel InputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" OutputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" ControlFlowObfuscation="goto=on;if=on;switch=on;case=on;call=on;true" ControlFlowIterations="3" StringEncryption="hash" ResourceEncryption="true" /> </Target>

In questo modo la tua applicazione beneficia di una protezione completa, che tutela la tua proprietà intellettuale e il codice sorgente da accessi non autorizzati e manomissioni.

Prestazioni della build in Visual Studio con gli analizzatori di codice

In Visual Studio gli analizzatori di codice sono strettamente integrati nel flusso di sviluppo. Vengono eseguiti continuamente in background per darti un riscontro in tempo reale nell’editor di Visual Studio, che rende più agevole la scrittura del codice evidenziando i potenziali problemi mentre digiti. Questa funzionalità ha però un costo: avvia il processo di build a ogni iterazione, e questo può creare colli di bottiglia nelle prestazioni, soprattutto se della build fanno parte task come l’offuscamento di Babel.

Per evitare un overhead inutile, puoi modificare la configurazione di MSBuild in modo che il task di offuscamento Babel venga eseguito solo durante la build completa (cioè quando compili davvero la soluzione) e non durante le build in fase di progettazione eseguite in background dagli analizzatori. Ecco come fare:

<Target Name="Obfuscate" AfterTargets="Compile" Condition="'$(DesignTimeBuild)' != 'true'"> <Babel … /> </Target>

Aggiungendo Condition=”’$(DesignTimeBuild)’ != ‘true’”, il target Obfuscate viene saltato durante le build in fase di progettazione (i processi in background usati dagli analizzatori di codice). Questa modifica riduce in modo significativo il tempo di CPU consumato durante le normali sessioni di programmazione, senza effetti sul processo di build finale. L’offuscamento viene comunque eseguito quando serve, cioè durante la build effettiva del progetto.

Il task Babel e il pacchetto NuGet di Babel Obfuscator

Il pacchetto NuGet di Babel Obfuscator, disponibile con l’edizione Ultimate, semplifica l’integrazione del task Babel nella pipeline di build. Una volta referenziato in un progetto .NET, il pacchetto inserisce automaticamente il task Babel nel punto appropriato del processo di build, senza bisogno di configurazione manuale. Gli sviluppatori non devono quindi aggiungere esplicitamente la direttiva Using per il task Babel né inserire a mano il task Babel nello script di build.

Il pacchetto determina la posizione corretta del task Babel in base al tipo di progetto e alla versione dell’SDK .NET in uso. Grazie a questo automatismo l’offuscamento avviene nella fase ottimale della pipeline di build, qualunque siano le configurazioni di build e i requisiti specifici dei diversi tipi di progetto. Un’integrazione così semplificata riduce il rischio di errori e permette agli sviluppatori di applicare l’offuscamento senza conoscere a fondo i dettagli della pipeline di build.

Vantaggi principali del pacchetto NuGet di Babel Obfuscator

1. Gestione automatica: il pacchetto NuGet di Babel Obfuscator è progettato per gestire l’offuscamento durante il processo di build, in modo che venga eseguito solo nelle build complete e saltato nelle build in fase di progettazione usate dagli analizzatori.

2. Carico di CPU ridotto: saltando automaticamente il passo di offuscamento durante le build in background, il pacchetto aiuta a preservare le prestazioni del sistema, riduce il carico inutile sulla CPU e permette a Visual Studio di funzionare in modo più fluido durante lo sviluppo.

3. Configurazione semplificata: non devi modificare a mano i tuoi script MSBuild. Il pacchetto si integra nel progetto e gestisce tutto in background, facendoti risparmiare tempo e riducendo la complessità.

4. Risultati coerenti: l’offuscamento viene applicato sempre e solo nelle fasi finali della build, così il tuo codice è protetto senza interferire con il lavoro di sviluppo quotidiano.

Inoltre, il pacchetto NuGet di Babel Obfuscator mantiene la coerenza tra i progetti e assicura che tutti i passi necessari per l’offuscamento siano implementati correttamente, qualunque sia la complessità del progetto o la familiarità del team con il processo. Questo è particolarmente utile nei progetti o nei team più grandi, dove mantenere uniformi i processi di build può essere difficile.

Last updated on