Référence de la ligne de commande
L’outil en ligne de commande Babel Obfuscator accepte différentes options. Chaque option est précédée d’un double tiret. La section suivante décrit chaque option que vous pouvez saisir sur la ligne de commande.
Divers
Ces options servent généralement à configurer les fonctionnalités générales d’obfuscation ou la manière dont Babel Obfuscator traite l’assembly cible.
—help [option]
Saisir —help sans paramètre affiche le menu d’aide principal. Lorsque le paramètre [option] est spécifié, Babel affiche l’aide étendue de la commande indiquée. Par exemple :
--help stringsAffiche les informations suivantes :
stringencryption (nostringencryption, no-stringencryption, string-encryption, no-string-encryption, strings, no-strings)
usage: --[no]stringencryption [name]
Enable ([no]disable) string encryption (default: disabled)
When enabled, all the user strings in the target assembly will be encrypted. The
optional parameter name sets the encryption type.
hash - Compressed hash table. The strings are arranged into compressed encrypted hash table data. This algorithm ensures tamper protection.
xor - Inline xor strings.
stream - Authenticated per-string encryption, decrypted lazily. Fully managed (AOT/trim/FIPS safe).Cette sortie présente la liste des alias admis pour la commande, suivie de la syntaxe de la commande et d’une brève description.
—[no]logo
Cette option contrôle l’affichage du message de copyright de Babel Obfuscator au démarrage. Le message de copyright n’est pas affiché si le préfixe facultatif [no] est spécifié.
—format <format>
Disponible depuis la version 11.7.0.
Sélectionne le format de sortie de stdout. Les valeurs autorisées sont text (par défaut), json et ndjson. Avec json ou ndjson, l’exécution produit un flux structuré conforme au schéma babel.cli.v1 et les diagnostics destinés à l’utilisateur sont dirigés vers stderr.
babel myapp.exe --format=json > result.json
babel myapp.exe --format=ndjson | jq -c 'select(.level=="error")'La même option fait aussi passer --help et --version à une représentation lisible par machine. Voir la page Mode adapté à l’IA pour le schéma, des exemples et une référence complète.
—quiet (-q)
Disponible depuis la version 11.7.0.
Supprime la bannière du logo et fait échouer immédiatement les invites interactives de mot de passe, avec une erreur explicite, au lieu de bloquer en attente d’une saisie. Convient aux exécutions sans intervention ou lancées par un agent.
babel myapp.exe --quiet --keyfile mykey.pfx --keypwd env:KEY_PWD—strict-exit
Disponible depuis la version 11.7.0.
Active les codes de sortie sémantiques : 0 réussite, 10 arguments non valides, 20 entrée introuvable, 30 échec de l’obfuscation, 40 échec de la licence, 50 échec de clé ou de signature. Sans cette option, le contrat historique 0/1 est conservé. Voir Mode adapté à l’IA : —strict-exit pour le tableau complet et la sémantique de exitReason.
—license [path|env]
Lorsque l’argument facultatif n’est pas spécifié, cette option affiche les informations de licence disponibles. Vous pouvez éventuellement spécifier le chemin du fichier de licence.
babel --license C:\Babel\babel.licensesVous pouvez aussi spécifier un répertoire de recherche dans lequel Babel doit chercher le fichier de licence.
Si vous disposez d’une clé de licence, vous pouvez utiliser l’option env pour la transmettre à Babel comme suit :
babel --license env:BABEL_LICENSE_KEYIci, BABEL_LICENSE_KEY est la variable d’environnement qui contient la clé de licence.
—verbose <n>
Définit le niveau de détail de la sortie console. <n> est un nombre entier non négatif obligatoire. Si 0 est spécifié, aucun message n’est affiché pendant l’obfuscation. Avec un nombre supérieur à 10, Babel affiche des informations de débogage.
—noconfig (@)
Ignore le chargement de la configuration par défaut des valeurs de ligne de commande. Si cette option est spécifiée, toutes les valeurs par défaut du fichier babel.exe.config sont ignorées :
babel myapp.exe --noconfig
babel myapp.exe @—nowarn <warn list>
Supprime la notification d’un ou de plusieurs messages d’avertissement. Le paramètre <warn list> représente une liste des ID d’avertissement, séparés par une virgule. Babel ignore silencieusement les numéros d’avertissement passés à l’option nowarn.
—[no]warnasinfo [warn list]
Spécifie une liste d’avertissements à rétrograder en messages d’information. [warn list] est une liste facultative des ID d’avertissement, séparés par une virgule.
—[no]warnaserror [warn list]
Spécifie une liste d’avertissements à traiter comme des erreurs, qui interrompent le processus d’obfuscation. [warn list] est une liste facultative des ID d’avertissement, séparés par une virgule.
—[no]statistics [file]
Active ou désactive la génération des statistiques d’obfuscation, qui peuvent être écrites dans le journal à la fin du programme ou enregistrées dans un fichier, si celui-ci est spécifié.
Les options supplémentaires suivantes sont disponibles :
full=[on/off] Whether to collect additional method statisticsLorsque les statistiques d’obfuscation complètes sont activées, des informations supplémentaires sur les méthodes, comme la CYC (complexité cyclomatique), sont collectées. Cette collecte peut consommer des ressources, en particulier lors du traitement d’assemblies qui comptent de nombreux types.
Voici un exemple de statistiques d’obfuscation extrait de la sortie console :
Babel statistics:
Random seed: 6dfabc3f1a479d66
Experimental features: false
Multithread obfuscation: true
Rules phase, elapsed time 00.000s
Processed rules: 0
Agent phase, elapsed time 00.046s
Renaming phase, elapsed time 00.082s
Unicode normalization: off
Flatten namespaces: on
Overloaded renaming: off
Virtual functions: on
XAML renaming: on (res)
Symbols statistics:
76/[ 106] types: 71.70 %
0/[ 2] events: 0.00 %
82/[ 236] methods: 34.75 %
7/[ 22] properties: 31.82 %
219/[ 258] fields: 84.88 %
384/[ 624] overall: 61.54 %
Encrypt Strings phase, elapsed time 00.016s
String algorithm: hash (.NET Core)
Number of encrypted strings: 266—[no]agent (a)
Cette option active ou désactive l’agent d’obfuscation. Lorsqu’il est activé, l’agent effectue une analyse statique du code afin d’empêcher le renommage ou l’obfuscation de symboles de l’assembly cible qui provoqueraient sinon des dysfonctionnements dans l’application obfusquée.
—assemblyname <option>
Cette option permet de déterminer avec souplesse le nom de l’assembly cible.
Les options disponibles sont :
--assemblyname name=assemblyname
--assemblyname inputfilename
--assemblyname outputfilename
--assemblyname nochange (default)Le comportement par défaut est nochange : le nom de l’assembly conserve sa valeur d’origine. C’est le comportement appliqué si vous ne spécifiez aucune option --assemblyname.
—[no]satellite [assembly]
Active, ou désactive avec [no], le traitement des assemblies satellites. Si le fichier facultatif [assembly] est spécifié, il est traité comme un assembly satellite de l’assembly cible.
—addsearch <path>
Ajoute le répertoire <path> spécifié à la liste des dossiers dans lesquels Babel recherche les assemblies référencés.
Le paramètre <path> peut être une expression générique qui correspond à un ensemble de répertoires. Les caractères spéciaux suivants permettent de composer une expression générique :
| * | correspond à un nombre quelconque de caractères, y compris aucun |
| ? | correspond à un seul caractère quelconque |
| ** | correspond à n’importe quel répertoire, de manière récursive |
| [a-z] | correspond à un caractère de la plage indiquée entre crochets |
| [!ab] | correspond à tout caractère qui ne figure pas entre les crochets |
Les chaînes spéciales suivantes peuvent être combinées dans l’expression de chemin pour désigner l’assembly en cours de recherche :
| :assemblyname: | nom de l’assembly recherché |
| :assemblyversion: | version de l’assembly recherché |
| :assemblypublickeytoken: | jeton de clé publique de l’assembly recherché |
Cette option peut être saisie plusieurs fois.
--addsearch .\**\lib
--addsearch .\:assemblyname:\**\netcoreapp2.0W00013 lors de la liaison BAML
L’avertissement W00013 émis par le résolveur d’assemblies de Babel (Could not resolve assembly <assembly>) est généralement informatif. Pour la plupart des types de code dans la plupart des assemblies, une référence non résolue ne modifie pas la sortie obfusquée : les métadonnées déjà chargées donnent à Babel assez d’informations pour effectuer le renommage, l’obfuscation du flux de contrôle, le chiffrement des chaînes et les autres transformations sans consulter chaque assembly référencé.
Il existe toutefois au moins un cas précis dans lequel W00013 correspond à un changement réel de la sortie obfusquée : les assemblies qui contiennent du BAML incorporé référençant des types définis dans un assembly non résolu. Lorsque Babel lit le BAML pour découvrir les membres liés au XAML (voir Aligner les littéraux de chaîne sur les membres liés au XAML renommés), il doit résoudre le type CLR de chaque élément BAML. Si l’assembly qui déclare un tel type ne se trouve pas dans le chemin de recherche, le résolveur émet W00013 pour cet assembly ; l’élément BAML n’est alors pas lié à son champ sous-jacent, et le champ n’est pas marqué comme lié au XAML. Par conséquent, lorsque le champ est renommé par la suite, l’étape d’alignement qui réécrit les littéraux de chaîne correspondant au nom d’origine est ignorée sans avertissement : le champ reçoit son nouveau nom, mais chaque littéral qui désigne le champ d’origine reste inchangé. L’assembly obfusqué devient alors incohérent en interne, et toute recherche par nom effectuée à l’exécution à partir de ces littéraux échoue.
Pour les projets qui contiennent du BAML incorporé, avant de considérer une exécution d’obfuscation comme définitive pour la production, vérifiez que chaque assembly définissant des types référencés par des éléments BAML est accessible avec --addsearch et que le journal de trace ne contient aucun W00013 pour ces assemblies. Le même paramètre est exposé par la propriété SearchDirectories de la tâche MSBuild Babel et par le paramètre SearchDirectories du groupe Fichiers et dépendances du panneau des propriétés de Babel Desktop.
Ce comportement de l’avertissement se limite aux projets qui contiennent du BAML incorporé ; dans les projets non WPF, ou dans les projets sans BAML incorporé, W00013 est généralement informatif et n’affecte pas la sortie obfusquée.
—quickrule <rule>
Saisit la définition d’une règle rapide. Une règle rapide peut remplacer une règle XML lorsque l’utilisateur veut configurer le processus d’obfuscation sans avoir à créer un fichier de règles XML.
Syntaxe d’une règle rapide :
feature[=exclude];[regex];[access];[target]Où :
| feature | Nom de la fonctionnalité visée |
| [=exclude] | Peut être spécifié pour désactiver la fonctionnalité |
| [regex] | Expression régulière facultative qui filtre les symboles. Par défaut, l’obfuscateur prend tous les symboles. |
| [access] | Définit la visibilité des symboles à traiter et peut prendre l’une des valeurs suivantes : Public, Protected, Internal, Private, All (par défaut All) |
| [target] | Spécifie le genre de symbole. Les valeurs admises sont : Classes, Delegates, Structures, Interfaces, Enums, Events, Methods, Properties, Fields, StaticFields, Resource, All (par défaut All) |
L’option quickrule peut être saisie plusieurs fois. Les règles rapides sont traitées dans l’ordre où elles apparaissent sur la ligne de commande, avant le traitement de toute règle XML.
Renommer tous les symboles publics de l’assembly cible :
babel myapp.exe --quickrule renaming;.*;PublicDésactiver le chiffrement des chaînes dans l’espace de noms ACME :
babel myapp.exe --quickrule "string encryption=exclude;ACME.*;All;Methods"Activer le chiffrement du code pour la classe ACME.Licensing :
babel myapp.exe --quickrule "msil encryption=on;ACME.Licensing.*"—dbghelpdlldir <path>
Cette option fonctionne uniquement sous Windows et configure le chemin du fichier dbghelp.dll, ce qui permet à Babel Obfuscator de charger les symboles de débogage depuis le serveur de symboles Microsoft .
—trace <regex>
Active le suivi de l’obfuscation pour les symboles dont la signature de nom complet correspond à l’expression régulière spécifiée. Cette option peut servir à déboguer des expressions régulières.
babel myapp.exe --trace MyNamespace.MyClass::MyMethodSuit la méthode nommée MyMethod et écrit dans le journal des informations de débogage sur l’état de son obfuscation.
—randomseed <seed>
Définit la graine utilisée pour initialiser le générateur de nombres aléatoires de Babel Obfuscator. Vous pouvez la fixer pour obtenir une obfuscation déterministe. Le paramètre <seed> peut être n’importe quelle chaîne hexadécimale.
—use <key=value>
Définit des options supplémentaires de Babel Obfuscator sous forme de paires clé-valeur.
debugxaml=[on/off] Whether to enable XAML debug mode
encryption=<name> Set encryption algorithm (Aes, AesManaged, DES, TripleDES, Rijndael, RC2, XOR)
experimental=[on/off] Whether to enable experimental features
loadtomemory=[on/off] Whether to load assemblies to memory
parallel=[on/off] Whether to perform multithread obfuscation
tagassembly=[on/off] Whether to tag assembly with the BabelObfuscator attribute
obfuscationattr=[skip/keep] Skip processing or force attribute retention
logtimestamp=[on/off/fmt] Whether to add a timestamp to the log output (fmt date time format)Exemples :
Afficher les informations de débogage relatives à toutes les ressources XAML dont le nom commence par Panel
babel myapp.exe --use debugxaml=Panel.* --verbose 5Marquer l’assembly obfusqué avec l’attribut [BabelObfuscator].
babel myapp.exe --use tagassembly=onForcer Babel Obfuscator à utiliser l’algorithme de chiffrement TripleDES
babel myapp.exe --use encryption=TripleDESProtéger avec l’algorithme AES managé, afin que le runtime injecté dans l’assembly obfusqué déchiffre sans le fournisseur cryptographique de la plateforme. Utilisez cette option pour que les assemblies protégés démarrent sur des hôtes où ce fournisseur est indisponible, par exemple des conteneurs dont l’état FIPS d’OpenSSL est défectueux (voir Conformité FIPS). L’obfuscateur chiffre toujours avec le fournisseur de la plateforme sur l’hôte de build et produit le même texte chiffré ; seul le déchiffreur injecté change.
babel myapp.exe --msilencryption --use encryption=aesmanagedL’option experimental accepte aussi une liste de fonctionnalités de l’obfuscateur, dont « all », qui permet d’utiliser de nouveaux algorithmes d’obfuscation qui ne sont pas encore publiés pour toutes les plateformes .NET.
babel myapp.exe --use experimental=allLorsque les fonctionnalités expérimentales sont activées dans Babel, notez que l’outil d’obfuscation ne vérifie pas si les exigences propres à la plateforme sont satisfaites. Toutes les obfuscations configurées sont donc exécutées, qu’elles conviennent ou non à la plateforme cible. Gardez à l’esprit que l’activation des fonctionnalités expérimentales peut augmenter le risque d’erreurs et affecter les performances de l’application. Il est donc recommandé d’utiliser les fonctionnalités expérimentales avec prudence, de préférence uniquement dans un environnement de test, et en connaissant bien les risques encourus.
—[no]isobfuscated [action]
Active ou désactive la détection d’un assembly cible déjà obfusqué.
Les actions admises sont :
- warn : émet un avertissement et poursuit le traitement de l’assembly cible.
- exit : quitte sans traiter l’assembly cible
Cette option peut être utile dans un scénario de build où l’assembly cible risque d’être traité une seconde fois. Babel analyse les noms des symboles pour déterminer si l’assembly a déjà été obfusqué. Dans certains cas, cette analyse peut toutefois donner un résultat incorrect. Il est alors préférable de marquer l’assembly avec l’attribut BabelObfuscator à l’aide de l’option tagassembly de l’option de ligne de commande —use.
Fichiers d’entrée
La section Fichiers d’entrée regroupe les options qui fournissent à Babel Obfuscator des fichiers externes contenant des configurations supplémentaires ou des données nécessaires à certaines opérations.
—keyfile <file>
Définit le fichier de nom fort utilisé pour signer de nouveau l’assembly obfusqué et les DLL de ressources localisées. Babel Obfuscator prend en charge les fichiers Strong Name Key (.snk) et Personal Information Exchange (.pfx).
Si un fichier Personal Information Exchange est utilisé, ajoutez l’option de ligne de commande —keypwd pour spécifier le mot de passe du fichier .pfx.
—keyname <container>
Utilisez cette option pour signer de nouveau l’application si la paire de clés est stockée dans un conteneur de clés. Le paramètre obligatoire <_container>_ représente le nom du conteneur de clés utilisé pour signer de nouveau l’assembly obfusqué et les DLL de ressources localisées.
—keypwd <password>
Spécifie le mot de passe demandé par un fichier Personal Information Exchange (.pfx) pour signer de nouveau l’assembly obfusqué. Si le mot de passe n’est pas spécifié sur la ligne de commande, Babel demande à l’utilisateur de le saisir pendant le processus d’obfuscation.
—rules <file>
Définit un fichier de règles XML que Babel utilise pour configurer le processus d’obfuscation. Cette option peut être spécifiée plusieurs fois. Les fichiers de règles sont traités dans l’ordre où ils sont saisis sur la ligne de commande.
babel myapp.exe --rules ruleset1.xml --rules ruleset2.xml—mapin <file>
Définit le fichier de mappage XML d’entrée qui sert à obfusquer les noms des symboles référencés. Cette option peut être spécifiée plusieurs fois.
babel myapp.exe --mapin library.map.xml --mapin utils.map.xml—project <file>
Spécifie un fichier de projet d’obfuscation.
—stacktrace <file|key=value>
Désobfusque un fichier de trace de pile. Cette option nécessite un <file> texte contenant la trace de pile obfusquée et un ensemble de fichiers de mappage XML pour désobfusquer le contenu de la trace de pile.
babel --stacktrace obfuscatedstacktrace.txt --mapin myapp.map.xml --mapin library.map.xmlL’option peut être répétée pour transmettre, en plus du fichier de trace de pile, les paramètres key=value suivants :
| Paramètre | Valeurs | Description |
|---|---|---|
mode | full (par défaut), compact | Sélectionne le niveau de détail des frames décodées. |
frames | all (par défaut), user | all conserve toutes les frames ; user écarte les frames générées par Babel, c’est-à-dire les ponts du proxy dynamique et les frames anonymes d’exécution par lesquelles ils passent, pour ne laisser que la chaîne d’appels de votre code source. |
Par exemple, pour décoder une trace en ne conservant que la chaîne d’appels de l’utilisateur :
babel --stacktrace obfuscatedstacktrace.txt --stacktrace frames=user --mapin myapp.map.xmlFichiers de sortie
Options de Babel Obfuscator qui définissent les noms des fichiers de sortie.
—output <file>
Définit le chemin du fichier de sortie de la cible obfusquée. Si cette option n’est pas fournie, la cible obfusquée est enregistrée dans le sous-répertoire BabelOut du dossier de l’assembly d’origine.
—pdb <file>
Définit le chemin du fichier PDB de sortie. Cette option peut être utilisée lorsque l’option —debug est activée.
—pdbpwd <password>
Définit le mot de passe du fichier d’informations de débogage. Ce mot de passe chiffre les noms des fichiers de code source stockés dans le PDB.
—logfile <file>
Envoie les messages de sortie de Babel Obfuscator vers un fichier journal.
—mapout [file]
Définit le nom du fichier de mappage XML de sortie. Si le paramètre facultatif [file] n’est pas fourni, Babel Obfuscator donne au fichier de mappage XML le nom de l’assembly d’origine, suivi de l’extension .map.xml.
—makeproject [file]
Crée un fichier de projet MSBuild à partir de la ligne de commande saisie. Si le paramètre facultatif [file] n’est pas fourni, Babel Obfuscator enregistre le fichier de projet dans le sous-répertoire BabelOut.
Plugins
Les plugins sont des composants supplémentaires qui étendent les fonctionnalités de Babel Obfuscator. Ils permettent d’ajouter ou de modifier des fonctionnalités d’obfuscation, pour mieux personnaliser et contrôler le processus d’obfuscation. (voir Encrypt Plugin)
—plugin <file>
Définit le chemin du fichier d’un plugin Babel Obfuscator. Cette option peut être spécifiée plusieurs fois.
—argument <key=value>
Définit un argument du plugin sous forme de paire clé-valeur. Cette option peut être spécifiée plusieurs fois.
Fusion et incorporation des assemblies
La fusion des assemblies consiste à combiner plusieurs assemblies en un seul assembly principal. Babel Obfuscator réalise cette opération en fusionnant et en obfusquant tous les assemblies spécifiés après l’assembly principal sur la ligne de commande.
—[no]copyattrs [regex]
Lorsque cette option est activée, tous les attributs de niveau assembly de chaque assembly d’entrée sont copiés dans l’assembly cible. Une expression régulière facultative peut être spécifiée pour fusionner les attributs en double qui correspondent à cette expression.
—embed <assembly>
Babel Obfuscator peut incorporer plusieurs assemblies de dépendance dans l’assembly cible. Les assemblies incorporés sont compressés et chiffrés. L’incorporation peut simplifier le déploiement et réduire la taille du logiciel. Elle peut remplacer la fusion lorsqu’il n’est pas nécessaire d’obfusquer entièrement l’assembly de dépendance.
Cette option peut être spécifiée plusieurs fois.
babel myapp.exe --embed Library1.dll --embed Library2.dll—[no]internalize
Lorsque cette option est activée, la visibilité de tous les types publics des assemblies fusionnés est restreinte à internal (Friend en VB).
—[no]jsonmanifest
Active ([no] désactive) la gestion du manifeste des dépendances (par défaut : activée). Babel Obfuscator peut mettre à jour le fichier manifeste .deps.json de l’assembly cible lors de la fusion des dépendances.
Renommage
Ces commandes permettent de configurer le renommage des symboles.
—[no]types (t)
Active ou désactive le renommage des types.
—[no]events (e)
Active ou désactive le renommage des événements.
—[no]methods (m)
Active ou désactive le renommage des méthodes.
—[no]parameters (r)
Active ou désactive le renommage des paramètres de méthode.
—[no]properties (p)
Active ou désactive le renommage des propriétés.
—[no]fields (f)
Active ou désactive le renommage des champs.
—[no]xaml [key=value]
Si cette option est activée, les symboles utilisés dans les ressources XAML ou BAML sont renommés. Elle accepte des paires clé-valeur facultatives, spécifiées sous la forme <key>=<value>.
Les paires clé-valeur acceptées sont :
keys=[on/off] Whether to enable renaming of dictionary keys
res=[on/off] Whether to enable renaming of BAML/XAML resources
strip=[on/off] Whether to strip line information or white spaces
manual=[on/off] Whether to use manual symbol renaming—[no]virtual [key=value]
Active ou désactive le renommage des membres virtuels tels que les méthodes, les propriétés et les événements. Cette option accepte des paires clé-valeur facultatives, spécifiées sous la forme <key>=<value>.
Les paires clé-valeur acceptées sont :
external=[on/off] Whether to obfuscate external virtual calls—[no]overloaded [key=value]
Lorsque cette option est activée, Babel Obfuscator utilise le même nom pour deux méthodes ou plus du même type chaque fois que les règles du CLR le permettent. Des paires clé-valeur peuvent éventuellement être saisies pour choisir les surcharges à appliquer.
Les paires clé-valeur acceptées sont :
methods=[on/off] Whether to overload methods
properties=[on/off] Whether to overload methods
parameters=[on/off] Whether to overload parameters—[no]flatns (n)
Lorsque cette option est activée, tous les types renommés sont déplacés dans l’espace de noms global. La hiérarchie des espaces de noms est ainsi aplatie et aucune information d’espace de noms n’est écrite dans l’assembly obfusqué.
—[no]unicode [char set]
Si cette option est activée, les noms sont remplacés par des chaînes Unicode illisibles. Lorsque la normalisation Unicode est désactivée, tous les noms obfusqués sont composés de caractères minuscules de l’alphabet latin. L’utilisateur peut éventuellement spécifier le jeu de caractères utilisé pour générer les noms obfusqués.
babel myapp.exe --unicode 0xf000-0xfe00
babel myapp.exe --unicode 10,13,a-z—namelength <n>
Définit la longueur minimale des noms des symboles renommés. Des paires clé-valeur peuvent éventuellement être saisies pour fixer séparément la longueur minimale des types, des méthodes, des propriétés, des champs et des événements.
babel myapp.exe --namelength types=12 --namelength methods=3—nameprefix [prefix]
Définit le préfixe de nom des symboles renommés. Des paires clé-valeur peuvent éventuellement être saisies pour définir séparément le préfixe des types, des méthodes, des propriétés, des champs, des événements et des paramètres.
babel myapp.exe --nameprefix types=$Name_ --nameprefix methods=M_La valeur spéciale $Name est remplacée par le nom d’origine du symbole. Le préfixe $Name sert généralement à déboguer les problèmes de renommage.
—[no]xmldoc [file|regex]
Active ou désactive la mise à jour de la documentation XML de l’assembly cible, dont tous les symboles renommés sont retirés. Le chemin du fichier de documentation XML ou une expression régulière peut éventuellement être spécifié. Si le nom de fichier ou l’expression régulière correspond au nom du fichier de documentation XML d’un assembly fusionné, la documentation XML de cet assembly est fusionnée dans celle de l’assembly cible.
Obfuscation du flux de contrôle
L’obfuscation du flux de contrôle consiste à transformer le code d’une méthode pour masquer son chemin d’exécution et rendre le flux obtenu beaucoup plus complexe et difficile à comprendre.
—[no]controlflow
Sert à modifier le flux de contrôle des méthodes. Une paire clé-valeur <key>=<value> peut éventuellement être saisie pour configurer le brouillage du code.
Paires clé-valeur acceptées pour produire du code IL vérifiable :
goto=[on/off] Whether to insert irrelevant branches
switch=[on/off] Whether to enable switch scrambling
case=[on/off] Whether to hide case constants
if=[on/off] Whether to enable if scrambling
call=[on/off] Whether to enable random calls
value=[on/off] Whether to use value encryption
token=[on/off] Whether to enable emission of method tokens
chain=[on/off] Whether to enable chained-state flattening (Ultimate)Pour produire du code IL non vérifiable :
underflow=[on/off] Whether to enable stack underflowCette option peut être spécifiée plusieurs fois, par exemple :
babel myapp.exe --controlflow if=on --controlflow switch=on --controlflow case=on
--controlflow call=on—iterations <n>
Définit le nombre d’itérations utilisé par l’algorithme d’obfuscation du flux de contrôle. Un nombre d’itérations égal à 0 désactive l’obfuscation du flux de contrôle. Plus n augmente, plus le nombre d’instructions de branchement sans effet insérées dans chaque méthode est élevé.
—[no]invalidopcodes [mode]
Utilisez cette option pour émettre des codes d’opération MSIL non valides. Certains outils de réflexion ne peuvent alors plus inspecter le corps IL des méthodes.
Si vous activez cette option, l’assembly obfusqué ne peut plus être vérifié par les vérificateurs IL (Intermediate Language). Notez que le code IL non vérifiable ne peut pas s’exécuter sur les systèmes d’exploitation x64 ; cette option ne doit donc pas être activée si l’assembly obfusqué cible des plateformes x64.
Le paramètre facultatif [mode] active différentes configurations de codes d’opération non valides :
enhanced: Insert additional invalid op-codesChiffrement et protection
Options qui visent les fonctionnalités d’obfuscation avancées, comme le chiffrement des chaînes et du code.
—[no]msilencryption [regex]
Active ou désactive le chiffrement du code pour les méthodes qui correspondent à l’expression régulière facultative ou aux règles d’obfuscation définies dans les fichiers de règles XML. Cette option peut être spécifiée plusieurs fois.
—[no]stringencryption [name]
Active ou désactive le chiffrement des chaînes utilisateur. Un paramètre facultatif name peut être spécifié pour sélectionner l’algorithme de chiffrement utilisé.
Les noms d’algorithme acceptés sont :
hash The strings are arranged into a hash table
xor Inline XOR encoded strings
stream Authenticated per-string encryption, decrypted lazily; fully managed (AOT/trim/FIPS safe)—[no]valueencryption [key=value]
Cette option active le chiffrement des valeurs constantes en ligne et des tableaux. Une paire clé-valeur <key>=<value> peut éventuellement être saisie pour activer ou désactiver le chiffrement de certains types.
Les paires clé-valeur acceptées sont :
int32=[on/off] Whether to encrypt Int32 values
int64=[on/off] Whether to encrypt Int64 values
single=[on/off] Whether to encrypt Single values
double=[on/off] Whether to encrypt Double values
array=[on/off] Whether to encrypt Arrays—[no]ildasm
Lorsque cette option est activée, l’attribut System.Runtime.CompilerServices.SuppressIldasmAttribute est ajouté à l’assembly cible pour empêcher le désassembleur MSIL de Microsoft, ILDASM (Ildasm.exe), de désassembler la cible obfusquée.
—[no]reflection
Active ou désactive l’émission de métadonnées non valides pour bloquer les outils fondés sur la réflexion.
—[no]resourceencryption [key=value]
Active ou désactive le chiffrement des ressources managées. Lorsqu’il est activé, toutes les ressources incorporées sont compressées et chiffrées. Des paires clé-valeur peuvent éventuellement être saisies pour spécifier des paramètres supplémentaires.
Les paires clé-valeur acceptées sont :
encrypt=[on/off] Whether to encrypt resources
compress=[on/off] Whether to compress resources
protect=[on/off] Whether to protect embedded resources—[no]proxy [type][;regex]
Active ou désactive la génération d’appels par proxy vers les méthodes externes ou internes. Le paramètre facultatif [type] peut prendre l’une des valeurs suivantes :
external hide calls to external assembly methods
internal hide calls to internally defined assembly methods
all hide both internal and external method callsL’utilisateur peut éventuellement saisir une expression régulière correspondant à la signature des méthodes à appeler par proxy, par exemple :
babel.exe myapp.exe --proxy external --proxy ;System.Array::.* --proxy ;::GetEnumerator—[no]tamperingdetection
Active ou désactive la protection contre la falsification.
—[no]antidebugging
Active ou désactive la protection contre le débogage.
Génération de code
Ces options concernent certaines optimisations du code que Babel Obfuscator peut ajouter à l’assembly cible.
—addreference <assembly>
Ajoute une référence d’assembly à l’assembly cible ou en redirige une. Exemple :
babel myapp.exe --addreference "[System*, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]"Redirige toutes les références System vers les assemblies portables. Cette option peut être spécifiée plusieurs fois.
—[no]cleanattrs <regex>
Active ou désactive la suppression des attributs indésirables. Le paramètre <regex> est une expression régulière qui correspond au nom complet du type de l’attribut indésirable. Cette option peut être spécifiée plusieurs fois.
—[no]constremoval
Active ou désactive la suppression des champs constants. Toute référence à un champ constant est remplacée par sa valeur constante chaque fois que c’est possible.
—[no]deadcode [regex]
Active ou désactive la suppression du code mort. Lorsqu’elle est activée, toutes les méthodes, toutes les propriétés, tous les champs et tous les événements qu’aucun chemin de code n’atteint sont supprimés. Un point d’entrée facultatif peut être spécifié avec [regex] pour définir où commencer la recherche.
—[no]debug [source]
Active ou désactive l’émission des informations de débogage et la génération d’un fichier de symboles de débogage PDB pour la cible obfusquée. Un magasin de symboles de débogage peut éventuellement être spécifié.
--debug srv*c:\Symbols*http://msdl.microsoft.com/download/symbols—[no]disgregateremoval
Active ou désactive la suppression des métadonnées des propriétés et des événements, en ne conservant que les méthodes d’accès des propriétés et des événements.
—[no]enumremoval
Active ou désactive la suppression des types System.Enum. Toute référence à un champ d’énumération est remplacée par sa valeur constante chaque fois que c’est possible.
—[no]inlineexpansion
L’expansion en ligne du code permet de remplacer un appel de méthode par le code de cette méthode à l’endroit où l’appel est effectué.
—[no]instrument [regex]
Active ou désactive l’instrumentation du code. Une expression régulière facultative peut être spécifiée pour cibler, par leur nom complet, les membres à instrumenter.
Le nom complet d’un membre suit la syntaxe suivante
[NamespaceName].[TypeName]::[MethodName]
Exemple :
babel myapp.exe --instrument mynamespace\.mytype::.* Cette option peut être saisie plusieurs fois.
—[no]emptymethods
Active ou désactive l’ajout de code d’instrumentation aux méthodes dont le corps est vide.
—moduleinitializer [method]
Ajoute du code d’initialisation de module. La signature d’une méthode statique sans paramètre peut éventuellement être spécifiée ; cette méthode est appelée après le chargement du module.
[Obfuscation(Feature = "module initializer:priority=120")]
public static void DoInitialize120()
{
Console.WriteLine("DoInitialize120");
}Ici, priority peut recevoir une valeur entière qui définit l’ordre dans lequel babel appelle les méthodes d’initialisation. Babel ajoute ses propres méthodes d’initialisation avec une priorité par défaut de 100. Les initialiseurs dont la priorité est inférieure à 100 sont appelés en premier.
—[no]seal
Lorsque cette option est activée, toutes les classes non publiques qui ne servent pas de classes de base dans une hiérarchie d’héritage sont scellées. Déclarer une classe comme scellée peut améliorer les performances des appels de méthode, car le compilateur juste-à-temps (JIT) n’a alors plus à parcourir la table virtuelle de la méthode, lorsque c’est possible.