Skip to Content
Nouvelle version 12 disponible 🎉
ObfuscatorTâche MSBuildRéférence de la tâche Babel

Référence de la tâche Babel

Tous les attributs de la tâche MSBuild Babel, regroupés par fonctionnalité, avec l’option de ligne de commande à laquelle chaque attribut correspond.

La tâche Babel expose un attribut pour chaque option de l’outil en ligne de commande et lui transmet les valeurs des attributs telles quelles. Un attribut booléen accepte true ou false. Lorsque l’option de ligne de commande prend un argument, le même argument peut être passé comme valeur de l’attribut : un attribut marqué Booléen / Chaîne accepte donc l’une ou l’autre forme. Les attributs de type liste prennent plusieurs valeurs séparées par ;. Les attributs non définis conservent les valeurs par défaut indiquées dans les tableaux.

Avec le package NuGet Babel Obfuscator, chaque attribut se définit au moyen d’une propriété ou d’un élément MSBuild ; voir le tableau Correspondance des propriétés de la référence du package.

La version 12.0 ajoute les attributs SingleFile, TrustedSigner, TrustedBundle et TrustedTeam, qui pilotent les contrôles d’intégrité du paquet sur mobile de la détection de falsification, ainsi que la valeur stream de StringEncryption. Ils sont signalés par 12.0 dans les tableaux ci-dessous.

Divers

AttributTypeValeur par défautLigne de commandeDescription
BabelDirectoryChaîneAncien moyen de remplacer le dossier qui contient babel.exe. La tâche échoue si l’exécutable ne s’y trouve pas. Préférez ToolPath.
DbgHelpDllDirChaîne--dbghelpdlldirChemin du dossier qui contient dbghelp.dll.
DetectIfObfuscatedBooléen / Chaînefalse--isobfuscatedIndique s’il faut détecter si l’assembly cible est déjà obfusqué. La valeur warn émet un avertissement et poursuit, exit s’arrête sans traiter l’assembly.
EnableObfuscationAgentBooléentrue--agentIndique s’il faut exécuter l’agent d’obfuscation, qui analyse l’assembly et exclut de l’obfuscation les symboles dont l’obfuscation l’empêcherait de fonctionner.
LicenseChaîne--licenseChemin complet du fichier de licence, ou liste de répertoires où rechercher les fichiers de licence.
NoConfigurationBooléenfalse--noconfigIndique s’il faut ignorer les valeurs par défaut enregistrées dans le fichier de configuration de Babel.
NoWarningsChaîne--nowarnListe des codes d’avertissement à ignorer.
ProvideCommandLineArgsBooléenfalseIndique s’il faut écrire dans le journal la ligne de commande passée à Babel et la renvoyer dans l’élément de sortie CommandLineArgs.
QuickRulesChaîne--quickruleDéfinitions de règles rapides.
RandomSeedChaîne--randomseedGraine du générateur de nombres aléatoires utilisé pendant l’obfuscation.
RemoveKeyBooléenfalse--removekeyIndique s’il faut supprimer le nom fort de l’assembly obfusqué.
SatelliteAssembliesChaîne--satelliteListe des fichiers d’assemblies satellites à traiter.
SearchDirectoriesChaîne--addsearchListe des répertoires où sont recherchés les assemblies référencés. References est accepté comme alias.
SearchSatelliteAssembliesBooléentrue--satelliteIndique s’il faut rechercher et traiter les assemblies satellites de la cible.
ShowLogoBooléentrue--logoIndique s’il faut afficher la version de Babel et les informations de copyright.
ShowStatisticsBooléentrue--statisticsIndique s’il faut afficher les statistiques d’obfuscation à la fin du processus. Booléen uniquement : utilisez StatisticsFile pour enregistrer les statistiques dans un fichier.
StatisticsFileChaîne--statisticsChemin du fichier où sont enregistrées les statistiques d’obfuscation. Ignoré lorsque ShowStatistics vaut false.
TargetAssemblyNameChaînenochange--assemblynameOrigine du nom de l’assembly cible : nochange, inputfilename, outputfilename ou name=<assembly name>.
ToolExeChaîneNom de l’exécutable Babel, babel.exe ou babel.dll.
ToolPathChaîneRépertoire de l’exécutable Babel.
TraceChaîne--traceListe d’expressions régulières qui sélectionnent les symboles à tracer. La trace indique pourquoi un symbole est obfusqué ou non et aide à déboguer les règles d’obfuscation.
UseClé=Valeur--useOptions d’utilisation sous forme de paires clé-valeur.
VerboseLevelEntier1--verboseNiveau de détail de la sortie de la console. 0 désactive les messages, les valeurs supérieures à 10 affichent des informations de débogage.
WarningsAsErrorsChaîne--warnaserrorListe des codes d’avertissement signalés comme des erreurs. Une erreur arrête le processus d’obfuscation.
WarningsAsInfosChaîne--warnasinfoListe des codes d’avertissement signalés comme des messages d’information.
XmlRulesChaîneÉléments de règles XML intégrées, voir Règles XML.

Fichiers d’entrée

AttributTypeValeur par défautLigne de commandeDescription
InputFileChaîneChemin de l’assembly à obfusquer.
KeyContainerChaîne--keynameNom du conteneur de clés de nom fort (Windows uniquement).
KeyFileChaîne--keyfileChemin du fichier de clé de nom fort utilisé pour signer l’assembly obfusqué.
KeyPwdChaîne--keypwdMot de passe du fichier de clé de nom fort ou du certificat.
MapInFilesChaîne--mapinListe des fichiers de mappage XML d’assemblies déjà obfusqués, utilisés pour renommer les références à leurs symboles.
ProjectChaîne--projectChemin d’un fichier de projet d’obfuscation Babel.
RulesFilesChaîne--rulesListe des fichiers de règles XML à traiter.

Fichiers de sortie

AttributTypeValeur par défautLigne de commandeDescription
GenerateLogFileBooléenfalse--logfileIndique s’il faut générer un journal d’obfuscation. Le nom par défaut du fichier journal est <target assembly>.log.
GenerateMapOutFileBooléenfalse--mapoutIndique s’il faut générer un fichier de mappage de l’obfuscation. Le nom par défaut du fichier de mappage est <target assembly>.xml.map.
LogFileChaîne--logfileChemin du fichier journal de l’obfuscation.
MakeProjectChaîne--makeprojectChemin du fichier de projet MSBuild créé à partir des paramètres de la tâche.
MapOutFileChaîne--mapoutChemin du fichier de mappage de l’obfuscation.
OutputFileChaîne--outputChemin de l’assembly obfusqué.
PdbFileChaîne--pdbChemin du fichier de symboles de débogage.
PdbPwdChaîne--pdbpwdMot de passe du fichier de symboles de débogage.

Plugins

AttributTypeValeur par défautLigne de commandeDescription
PluginsChaîne--pluginListe des fichiers d’assemblies de plugins.
PluginsArgumentsClé=Valeur--argumentArguments des plugins sous forme de paires clé-valeur.

Fusion et incorporation

AttributTypeValeur par défautLigne de commandeDescription
CopyAttributesBooléen / Chaînefalse--copyattrsIndique si les attributs de niveau assembly des assemblies fusionnés sont copiés dans l’assembly cible. Une expression régulière sélectionne les attributs en double qui peuvent être fusionnés.
DependenciesManifestBooléentrue--jsonmanifestIndique s’il faut mettre à jour le manifeste de dépendances .deps.json de l’assembly cible lorsque des assemblies sont fusionnés ou incorporés.
EmbedAssembliesChaîne--embedListe des fichiers d’assemblies à incorporer dans l’assembly cible.
InternalizeBooléenfalse--internalizeIndique si la visibilité des types fusionnés est restreinte à l’assembly cible.
MergeAssembliesChaîneListe des fichiers d’assemblies à fusionner dans l’assembly cible.

Renommage

AttributTypeValeur par défautLigne de commandeDescription
FlattenNamespacesBooléen / Chaînetrue--flatnsIndique s’il faut déplacer les types renommés dans l’espace de noms global. Une chaîne définit à la place un nom d’espace de noms commun aux types renommés.
NameLengthEntier / Clé=Valeur--namelengthLongueur minimale des noms obfusqués. Des paires clé-valeur attribuent la longueur à une catégorie de symboles donnée.
NamePrefixChaîne / Clé=Valeur--nameprefixPréfixe des noms obfusqués, $name ou une chaîne quelconque. Des paires clé-valeur attribuent le préfixe à une catégorie de symboles donnée.
ObfuscateEventsBooléentrue--eventsIndique s’il faut renommer les événements.
ObfuscateFieldsBooléentrue--fieldsIndique s’il faut renommer les champs.
ObfuscateMethodsBooléentrue--methodsIndique s’il faut renommer les méthodes.
ObfuscateParametersBooléentrue--parametersIndique s’il faut renommer les paramètres de méthode.
ObfuscatePropertiesBooléentrue--propertiesIndique s’il faut renommer les propriétés.
ObfuscateTypesBooléentrue--typesIndique s’il faut renommer les types.
ObfuscateXamlBooléen / Clé=Valeurfalse--xamlIndique s’il faut renommer les symboles référencés par les ressources XAML et BAML. Des paires clé-valeur configurent le renommage.
OverloadedRenamingBooléen / Clé=Valeurfalse--overloadedIndique s’il faut réutiliser le même nom pour des membres de signatures différentes. Des paires clé-valeur sélectionnent les membres auxquels la surcharge s’applique.
UnicodeNormalizationBooléen / Chaînefalse--unicodeIndique s’il faut générer les noms avec des caractères Unicode. Lorsque l’option est désactivée, des caractères ASCII sont utilisés. Une liste de caractères ou de plages séparés par des virgules restreint le jeu de caractères.
VirtualFunctionsBooléen / Clé=Valeurtrue--virtualIndique s’il faut renommer les membres virtuels. Des paires clé-valeur configurent le renommage des substitutions externes.
XmlDocFilesChaîne--xmldocListe des fichiers de documentation XML à traiter en même temps que l’assembly. XmlDoc est accepté comme ancien alias.

Obfuscation du flux de contrôle

AttributTypeValeur par défautLigne de commandeDescription
ControlFlowObfuscationBooléen / Clé=Valeurfalse--controlflowIndique s’il faut obfusquer le flux de contrôle des méthodes. Des paires clé-valeur sélectionnent les algorithmes, dont chain=on pour l’état chaîné Ultimate.
ControlFlowIterationsEntier3--iterationsNombre d’itérations des algorithmes d’obfuscation du flux de contrôle. 0 désactive l’obfuscation du flux de contrôle. ILIterations et Iterations sont acceptés comme alias.
EmitInvalidOpcodesBooléen / Chaînefalse--invalidopcodesIndique s’il faut émettre des codes d’opération MSIL non valides, ce qui rend l’assembly non vérifiable. La valeur enhanced insère des codes d’opération non valides supplémentaires.

Chiffrement et protection

AttributTypeValeur par défautLigne de commandeDescription
DebuggingProtectionBooléenfalse--antidebuggingIndique s’il faut activer la protection contre le débogage.
DynamicProxyBooléen / Chaînefalse--proxyIndique s’il faut envelopper les appels de méthode dans des proxys générés dynamiquement. La valeur sélectionne les appels à faire passer par un proxy : internal, external ou all.
DynamicProxyCallFiltersChaîne--proxyListe d’expressions régulières qui sélectionnent les appels de méthode à faire passer par un proxy.
MsilEncryptionBooléen / Chaînefalse--msilencryptionIndique s’il faut chiffrer le code MSIL des méthodes. Des expressions régulières sélectionnent les méthodes à chiffrer d’après leur signature.
ResourceEncryptionBooléen / Clé=Valeurfalse--resourceencryptionIndique s’il faut chiffrer les ressources managées. Des paires clé-valeur activent séparément le chiffrement et la compression.
SingleFile 12.0Booléenfalse--singlefileSignale que la cible est publiée sous forme d’application en fichier unique, découpée (trimming) ou NativeAOT. Sur les cibles de bureau, le contrôle de détection de falsification est inopérant pour une telle publication, et Babel émet un avertissement lorsqu’il est demandé.
StringEncryptionBooléen / Chaînefalse--stringencryptionIndique s’il faut chiffrer les chaînes utilisateur. La valeur sélectionne l’algorithme : xor, hash ou stream 12.0 Ultimate.
SuppressIldasmBooléenfalse--ildasmIndique s’il faut empêcher ILDASM de désassembler l’assembly obfusqué.
SuppressReflectionBooléen / Entierfalse--reflectionIndique s’il faut émettre des métadonnées non valides qui bloquent les outils de réflexion. Un entier définit le niveau : plus le niveau est élevé, plus les métadonnées non valides générées sont nombreuses.
TamperingDetectionBooléenfalse--tamperingdetectionIndique s’il faut activer la détection de falsification.
TrustedBundle 12.0 UltimateChaîne--trustedbundleIdentifiant de bundle iOS approuvé (CFBundleIdentifier), épinglé par le contrôle d’intégrité du paquet iOS.
TrustedSigner 12.0 UltimateChaîne--trustedsignerListe des empreintes SHA-256, de 64 caractères hexadécimaux chacune, des certificats de signature d’APK Android approuvés, épinglés par le contrôle d’intégrité du paquet Android.
TrustedTeam 12.0 UltimateChaîne--trustedteamIdentifiant d’équipe Apple Developer (Team ID) approuvé, épinglé par le contrôle d’intégrité du paquet iOS.
ValueEncryptionBooléen / Clé=Valeurfalse--valueencryptionIndique s’il faut chiffrer les valeurs constantes et les tableaux. Des paires clé-valeur sélectionnent les catégories de valeurs à chiffrer.

Optimisations

AttributTypeValeur par défautLigne de commandeDescription
CleanAttributesBooléen / Chaînefalse--cleanattrsIndique s’il faut supprimer les attributs indésirables. Des expressions régulières sélectionnent les noms complets des types d’attributs à supprimer.
ConstRemovalBooléenfalse--constremovalIndique s’il faut supprimer les champs constants.
DeadCodeEliminationBooléen / Chaînefalse--deadcodeIndique s’il faut supprimer les méthodes, les propriétés et les événements que l’application n’utilise pas. Des expressions régulières définissent les points d’entrée d’où part la recherche.
DisgregateRemovalBooléenfalse--disgregateremovalIndique s’il faut supprimer les métadonnées des propriétés et des événements.
EnumRemovalBooléenfalse--enumremovalIndique s’il faut supprimer les types System.Enum.
InlineExpansionBooléenfalse--inlineexpansionIndique s’il faut remplacer les appels aux méthodes marquées pour l’expansion en ligne par le corps de la méthode.
SealClassesBooléenfalse--sealIndique s’il faut sceller les classes qui n’interviennent dans aucune chaîne d’héritage.

Génération de code

AttributTypeValeur par défautLigne de commandeDescription
AddReferencesChaîne--addreferenceListe des assemblies à ajouter comme références de l’assembly cible.
FrameworkChaîneNom du framework cible imposé à l’assembly traité.
GenerateDebugBooléen / Chaînefalse--debugIndique s’il faut générer les symboles de débogage de l’assembly obfusqué. Un chemin de magasin de symboles peut être indiqué comme valeur.
InstrumentBooléen / Chaînefalse--instrumentIndique s’il faut instrumenter le code. Des expressions régulières sélectionnent les noms complets des méthodes à instrumenter.
InstrumentEmptyMethodsBooléenfalse--emptymethodsIndique s’il faut instrumenter les méthodes dont le corps est vide.
ModuleInitializerBooléen / Chaînefalse--moduleinitializerIndique s’il faut ajouter du code d’initialiseur de module à l’assembly cible.
ModuleInitializerTargetChaîne--moduleinitializerSignature de la méthode statique, sans paramètres, appelée après le chargement du module.
ModuleVersionIdBooléen / Chaînefalse--moduleversionidIndique s’il faut définir l’identificateur de version du module (MVID) de l’assembly obfusqué. Une chaîne GUID définit la valeur ; sinon, une valeur aléatoire est générée.

Paquets

AttributTypeValeur par défautLigne de commandeDescription
AndroidSigningKeyAliasChaîne--keyaliasAlias de la clé dans le magasin de clés Android (paquets APK).
AndroidSigningKeyPassChaîne--keypassMot de passe de la clé dans le magasin de clés Android (paquets APK).
AndroidSigningKeyStoreChaîne--keystoreFichier du magasin de clés Android (paquets APK).
AndroidSigningStorePassChaîne--storepassMot de passe du magasin de clés Android (paquets APK).
RemoveFilesChaîne--removeListe des assemblies déployés à retirer du paquet.
SkipFilesChaîne--skipListe des assemblies déployés qui ne sont pas obfusqués.
TakeFilesChaîne--takeListe des assemblies déployés à obfusquer.
XapCompressionLevelEntier6--compressNiveau de compression du paquet, de 0 (aucune compression) à 9 (paquets XAP).

Sorties de la tâche

SortieDescription
CommandLineArgsLa ligne de commande passée à Babel, disponible lorsque ProvideCommandLineArgs vaut true.
ExitCodeLe code de sortie renvoyé par Babel.

Exemple

La tâche ci-dessous obfusque l’assembly intermédiaire d’un projet .NET MAUI Android avec le chiffrement des chaînes STREAM et la détection de falsification épinglée sur le certificat de signature de l’APK, et récupère la ligne de commande passée à Babel :

<Target Name="Obfuscate" AfterTargets="Compile" Condition="'$(DesignTimeBuild)' != 'true'"> <Babel InputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" OutputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" StringEncryption="stream" ControlFlowObfuscation="true" ControlFlowIterations="3" TamperingDetection="true" TrustedSigner="2924C53EE9C511E9F26E0720FD8151064F7621681667D7AB1899E551CDB25104" ProvideCommandLineArgs="true"> <Output TaskParameter="CommandLineArgs" ItemName="BabelCommandLineArgs" /> </Babel> <Message Importance="high" Text="@(BabelCommandLineArgs, ' ')" /> </Target>
Last updated on