Skip to Content
Nouvelle version 12 disponible 🎉
ObfuscatorTĂąche MSBuild

TĂąche MSBuild

Babel Obfuscator s’intĂšgre facilement Ă  MSBuild pour dĂ©ployer l’obfuscation dans votre processus de build.

La tĂąche MSBuild Babel est disponible avec toutes les Ă©ditions de licence de Babel Obfuscator et peut ĂȘtre ajoutĂ©e Ă  tout projet MSBuild en insĂ©rant l’élĂ©ment UsingTask appropriĂ© dans le fichier XML du projet MSBuild :

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

L’attribut AssemblyName dĂ©signe le nom complet du composant .NET Babel.Build.dll installĂ© dans le Global Assembly Cache.

La propriĂ©tĂ© Version d’AssemblyName doit correspondre Ă  la version du produit actuellement installĂ©e. Par exemple, si vous avez installĂ© la version x.y.z.w :

Version=x.y.z.0

Le numĂ©ro de rĂ©vision w doit toujours ĂȘtre 0.

Si vous ne souhaitez pas utiliser le nom complet de l’assembly, vous pouvez rĂ©fĂ©rencer le composant Babel.Build.dll par son chemin complet, comme suit :

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

Une fois l’assembly Babel.Build rĂ©fĂ©rencĂ©, vous pouvez utiliser la tĂąche Babel pour lancer Babel Obfuscator sur un assembly cible donné :

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

La tĂąche Babel dĂ©finie ci-dessus s’exĂ©cute aprĂšs le build pour obfusquer l’assembly cible, qu’elle remplace par l’assembly obfusquĂ© produit par Babel.

La cible « AfterBuild » est une cible MSBuild  bien connue, définie dans le pipeline de build. Elle sert en général à ajouter des tùches exécutées une fois le build terminé, lorsque tous les binaires se trouvent dans le dossier de sortie du build défini par la variable MSBuild  $(TargetPath).

Par exemple, la tĂąche Babel prĂ©sentĂ©e plus haut s’exĂ©cute aprĂšs le build pour obfusquer l’assembly cible dĂ©signĂ© par la variable $(TargetPath) et le remplace par la version obfusquĂ©e produite par Babel.

Cibles AfterBuild et Compile

Les SDK .NET rĂ©cents ont introduit des tĂąches d’optimisation supplĂ©mentaires, qui interviennent avant la tĂąche « AfterBuild » et aprĂšs l’étape de compilation, laquelle a lieu pendant la tĂąche « Compile ». La tĂąche « Compile » se distingue de « AfterBuild », qui n’est qu’un emplacement rĂ©servĂ© dans le pipeline de build, destinĂ© Ă  ĂȘtre redĂ©fini par des processus de build externes. La tĂąche « Compile » est l’étape oĂč la compilation a rĂ©ellement lieu, et elle ne peut pas ĂȘtre remplacĂ©e par des tĂąches dĂ©finies par l’utilisateur.

Comme l’obfuscation doit avoir lieu aprĂšs la tĂąche « Compile » et avant toute optimisation ultĂ©rieure effectuĂ©e par le systĂšme de build, la tĂąche d’obfuscation Babel doit ĂȘtre insĂ©rĂ©e immĂ©diatement aprĂšs l’étape « Compile ». Vous pouvez le faire avec l’attribut de cible MSBuild AfterTargets, comme ci-dessous :

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

Cette configuration garantit que l’obfuscation s’applique Ă  la sortie compilĂ©e avant toute autre optimisation du build.

Notez que les propriĂ©tĂ©s InputFile et OutputFile ne sont pas rĂ©glĂ©es sur TargetPath, car Ă  ce stade du build l’assembly compilĂ© n’a pas encore Ă©tĂ© copiĂ© Ă  l’emplacement TargetPath. Il se trouve dans un dossier de build intermĂ©diaire, $(IntermediateOutputPath), qui sert de source Ă  toutes les Ă©tapes suivantes du build.

Ce dossier intermĂ©diaire contient l’assembly et les autres artefacts produits pendant la phase de compilation, ce qui permet Ă  diffĂ©rentes tĂąches, dont l’obfuscation, de s’appliquer Ă  la sortie compilĂ©e avant la fin du build. En indiquant le chemin intermĂ©diaire, vous faites en sorte que l’obfuscation s’applique Ă  la bonne version de l’assembly, telle qu’elle existe avant toute copie ou tout traitement supplĂ©mentaire susceptible de modifier la sortie du build.

Cette approche simplifie le processus de build et garantit que la sortie obfusquĂ©e est correctement gĂ©nĂ©rĂ©e et prĂȘte pour les tĂąches d’optimisation ou les Ă©tapes de dĂ©ploiement qui suivent.

Configurer la tĂąche Babel

La tĂąche Babel offre de nombreuses propriĂ©tĂ©s qui permettent d’adapter l’obfuscation Ă  vos besoins. La liste complĂšte de ces propriĂ©tĂ©s figure dans la section RĂ©fĂ©rence de la tĂąche Babel de la documentation. Par dĂ©faut, la tĂąche Babel n’active que le renommage des symboles, qui modifie les noms des classes, des mĂ©thodes et des autres symboles du code pour rendre la rĂ©tro-ingĂ©nierie plus difficile.

Les fonctionnalitĂ©s d’obfuscation plus avancĂ©es, telles que l’obfuscation du flux de contrĂŽle, le chiffrement des chaĂźnes et d’autres techniques Ă©laborĂ©es, nĂ©cessitent une licence valide. Sans licence valide, la tĂąche Babel fonctionne en mode d’évaluation, limitĂ© au renommage des symboles. En outre, les assemblies obfusquĂ©s en mode d’évaluation cessent de fonctionner aprĂšs une date donnĂ©e, comme l’indique le code d’avertissement W00000 dans le journal du build. Par exemple :

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

L’obtention et l’installation d’une licence valide donnent accĂšs Ă  toutes les fonctionnalitĂ©s d’obfuscation de Babel et lĂšvent toutes les limites : les assemblies obfusquĂ©s s’exĂ©cutent alors sans date d’expiration.

<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>

Votre application bĂ©nĂ©ficie ainsi d’une protection complĂšte, qui prĂ©serve votre propriĂ©tĂ© intellectuelle et votre code source contre les accĂšs non autorisĂ©s et la falsification.

Performances du build dans Visual Studio avec les analyseurs de code

Dans Visual Studio, les analyseurs de code sont Ă©troitement intĂ©grĂ©s au flux de travail de dĂ©veloppement. Ils s’exĂ©cutent en permanence en arriĂšre-plan pour fournir un retour en temps rĂ©el dans l’éditeur de Visual Studio et signalent les problĂšmes potentiels au fil de la saisie. Cette fonctionnalitĂ© implique toutefois un compromis : elle dĂ©clenche le processus de build Ă  chaque itĂ©ration, ce qui peut crĂ©er des goulets d’étranglement, en particulier si des tĂąches comme l’obfuscation Babel font partie du build.

Pour Ă©viter ce surcoĂ»t inutile, vous pouvez modifier votre configuration MSBuild afin que la tĂąche d’obfuscation Babel ne s’exĂ©cute que pendant le build complet (c’est-Ă -dire lorsque vous gĂ©nĂ©rez rĂ©ellement la solution) et non pendant les builds au moment de la conception que les analyseurs lancent en arriĂšre-plan. Voici comment procĂ©der :

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

En ajoutant Condition=”’$(DesignTimeBuild)’ != ‘true’”, vous faites en sorte que la cible Obfuscate soit ignorĂ©e pendant les builds au moment de la conception (les processus d’arriĂšre-plan qu’utilisent les analyseurs de code). Cette modification rĂ©duit nettement le temps processeur consommĂ© pendant les sessions de codage habituelles, sans incidence sur votre build final. L’obfuscation s’exĂ©cute toujours quand elle est nĂ©cessaire, c’est-Ă -dire pendant le build rĂ©el du projet.

TĂąche Babel et package NuGet Babel Obfuscator

Le package NuGet Babel Obfuscator, disponible avec l’édition Ultimate, simplifie l’intĂ©gration de la tĂąche Babel dans le pipeline de build. Une fois le package rĂ©fĂ©rencĂ© dans un projet .NET, il insĂšre automatiquement la tĂąche Babel au bon endroit du processus de build, sans configuration manuelle. Les dĂ©veloppeurs n’ont donc pas Ă  ajouter explicitement la directive Using de la tĂąche Babel ni Ă  insĂ©rer la tĂąche Babel Ă  la main dans le script de build.

Le package dĂ©termine l’emplacement de la tĂąche Babel d’aprĂšs le type de projet et la version du SDK .NET utilisĂ©e. Cette automatisation garantit que l’obfuscation a lieu au meilleur moment du pipeline de build, quelles que soient les configurations de build et les exigences propres aux diffĂ©rents types de projet. Cette intĂ©gration rĂ©duit le risque d’erreur et permet aux dĂ©veloppeurs d’appliquer l’obfuscation sans connaĂźtre en dĂ©tail les subtilitĂ©s du pipeline de build.

Principaux avantages du package NuGet Babel Obfuscator

1. Gestion automatique : le package NuGet Babel Obfuscator gĂšre l’obfuscation pendant le processus de build et veille Ă  ce qu’elle ne s’exĂ©cute que pendant les builds complets, et non pendant les builds au moment de la conception utilisĂ©s par les analyseurs.

2. Charge processeur rĂ©duite : en ignorant automatiquement l’étape d’obfuscation pendant les builds d’arriĂšre-plan, le package prĂ©serve les performances du systĂšme, Ă©vite une charge processeur inutile et laisse Visual Studio fonctionner plus fluidement pendant le dĂ©veloppement.

3. Configuration simplifiĂ©e : vous n’avez pas Ă  modifier vos scripts MSBuild Ă  la main. Le package s’intĂšgre Ă  votre projet et s’occupe de tout en arriĂšre-plan, ce qui fait gagner du temps et rĂ©duit la complexitĂ©.

4. RĂ©sultats cohĂ©rents : l’obfuscation ne s’applique systĂ©matiquement qu’aux derniĂšres Ă©tapes du build, de sorte que votre code est protĂ©gĂ© sans gĂȘner le dĂ©veloppement au quotidien.

En outre, le package NuGet Babel Obfuscator assure la cohĂ©rence entre les projets : toutes les Ă©tapes nĂ©cessaires Ă  l’obfuscation sont correctement mises en Ɠuvre, quelles que soient la complexitĂ© du projet et la connaissance qu’a l’équipe du processus. Cet avantage est particuliĂšrement utile dans les projets ou les Ă©quipes de grande taille, oĂč il peut ĂȘtre difficile de maintenir des processus de build uniformes.

Last updated on