TĂąche MSBuild
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:27Lâ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.