L'obfuscation est une opération générale qui consiste à masquer le sens d'une information, en la rendant ambigüe, d'apparence trompeuse ou simplement difficile à interpréter.
Dans le contexte du développement informatique, l'obfuscation est utilisée pour protéger la propriété intellectuelle d'un logiciel en rendant incompréhensible (pour un être humain) son code source tout en étant compilable ou interprétable par un ordinateur.
Les applications Excel-VBA sont particulièrement concernées par ce sujet : le code source VBA est embarqué en clair dans le classeur qui contient l'application. La protection par mot-de-passe du code VBA est tout-à-fait symbolique puisque certains logiciels du marché capables d'ouvrir une application Excel ignorent ce mot-de-passe.
Obfu-VBA combine les 3 méthodes suivantes pour obfusquer le code VBA d'une application Excel : suppression des commentaires, suppression du style de codage (lignes blanches, indentation et instructions sur plusieurs lignes) et renommage des identificateurs (variables, constantes, fonctions, procédures, paramètres, modules, classes, userforms et contrôles).
Obfu-VBA ne travaille pas directement sur le classeur Excel contenant votre application VBA. Voici les différentes étapes nécessaires à l'obfuscation de votre application :
1 Créez 1 répertoire d'entrée qui contiendra les objets exportés de votre application et 1 répertoire de sortie qui contiendra les objets obfusqués.
2 Exportez tous les modules, modules de classe et userforms de votre projet VBA dans le répertoire d'entrée : votre application étant chargée dans Excel, depuis l'éditeur VBA d'Excel, faite un clic-droit sur chaque objet contenant du code VBA puis sélectionner "Exporter un fichier..." (voir ci-contre). Vous pouvez ensuite refermer votre application.
3 Depuis Excel, ouvrez le classeur Obfu-VBA, effectuez le paramétrage nécessaire (voir le chapitre 3.1) et lancez le traitement qui peut durer quelques minutes, selon la taille des fichiers à traiter.
4 Créez dans Excel un nouveau classeur, copiez-y si nécessaire les feuilles de votre ancien classeur, importez depuis l'éditeur VBA les objets obfusqués contenus dans le répertoire de sortie.
5 La création d'une version obfusquée de votre application Excel-VBA est terminée. Reste à vérifier le bon fonctionnement de celle-ci : commencez par la sauvegarder, lancez une compilation (Editeur VBA -> menu Débogage -> Compiler) et testez complètement son bon fonctionnement.
En cas de problème (la compilation échoue, l'éxécution plante, le fonctionnement n'est pas conforme à l'application d'origine, l'obfuscation n'est pas complète), la première action à réaliser est de vérifier que les recommandations de Obfu-VBA (voir chapitre 3.5) sont respectées. Après ces vérifications, vous pouvez contacter ToolOscope pour demande de support ou d'évolution.
Cette feuille constitue l'interface de commande de Obfu-VBA. Les cellules à renseigner par l'utilisateur sont sur fond jaune (numérotées de 2 à 9 en rouge). Chacune de ces cellules possède un commentaire qui décrit le contenu attendu. Ces commentaires sont repris dans l'encadré ci-contre.
Lorsque toutes les données en entrée sont saisies, l'utilisateur clique sur le bouton "Lancer Obfu-VBA" pour éxécuter le traitement, qui se déroule en 2 passes.
A chaque passe, Obfu-VBA lit successivement tous les modules en entrée (7) qui doivent être présents dans le dossier en entrée (5). Lors de la seconde passe, les modules obfusqués sont écrits dans le dossier de sortie (6). L'utilisateur peut suivre l'avancement du traitement par les nombres de lignes lues et écrites qui s'affichent sur la feuille.
Le nom des modules .bas et des classes .cls est obscurci. Le nom des userforms .frm est aussi obscurci mais pas les noms des fichiers qui les contiennent. Lors de l'import des userforms obfusqués, le nom des fichiers disparaît.
Vous pouvez dupliquer cette feuille pour conserver dans le classeur Obfu-VBA par exemple 1 feuille de commande par projet. Ainsi, lorsque vous modifierez le code source de vos projets, vous ne perdrez pas de temps à re-saisir dans Obfu-VBA les modules qui les composent.
1 Cette feuille peut être dupliquée dans ce même classeur autant de fois que vous avez de projets VBA différents à traiter.
2 Renseigner le nom de la feuille qui contient les mots réservés.
Facultatif. Si à blanc, les mots réservés ne sont pas nécessairement obfusqués, mais les performances peuvent diminuer.
Si renseigné, la feuille doit exister dans le même classeur.
3 Renseigner le nom de la feuille où sera écrit le code et les types détectés des variables (65530 lignes maximum).
Facultatif. Si à blanc, le code ne sera pas sorti.
Si renseigné, la feuille doit exister dans le même classeur.
4 Renseigner le nom de la feuille où sera écrite la table de correspondance entre les identificateurs en clair et obfusqués.
Facultatif. Si à blanc, la table ne sera pas sortie.
Si renseigné, la feuille doit exister dans le même classeur.
5 Renseigner le chemin du dossier qui contient les fichiers VBA à traiter, préalablement exportés d'Excel.
Obligatoire.
6 Renseigner le chemin du dossier qui contiendra les fichiers VBA obfusqués. Ces fichiers devront être importés manuellement dans un nouveau classeur Excel pour recomposer votre application.
Obligatoire.
7 Renseigner dans cette colonne les noms des fichiers VBA exportés de votre application Excel, sans extension. Ces fichiers doivent se trouver dans le dossier "Entrée".
64 fichiers maximum + limitation mémoire des projets Excel-VBA.
8 Renseigner l'extension du nom de chaque fichier VBA situé dans la cellule à gauche :
- cls pour les ModuleClass,
- bas pour les Modules,
- frm pour les UserForms.
9 Renseigner dans cette colonne les identificateurs qui ne doivent pas être obfusqués.
Facultatif.
Cette feuille facultative contient les mot-clés réservés du langage VBA. Elle peut être enrichie en cas de lacune.
Obfu-VBA analyse chaque mot rencontré dans le code à traiter afin de déterminer s'il doit être obscurci. Cette liste de mots réservés permet de gagner du temps lors du traitement.
Seuls les identificateurs explicitement déclarés dans votre projet seront obscurcis. Cette liste de mots réservés n'est donc pas discriminante.
Lors du traitement, Obfu-VBA extrait tous les identificateurs déclarés dans votre projet et leur associe un identificateur obscur. Si son nom est défini sur la feuille Projet, cette feuille restitue, en fonction de leur portée (projet, module ou locale), les identificateurs en clair et obscurcis, leur type et éventuellement leur conteneur pour les membres d'une classe ou d'un type déclaré par l'utilisateur.
Obfu-VBA écrit sur cette feuille (si son nom est défini sur la feuille Projet) le code lu et analysé : séparation en identificateurs et autres caractères. Sous chaque identificateur, il indique sur 2 lignes la nature qu'il a détecté : libellé, mot-clé réservé, variable, fonction... et le type du conteneur.
Cette feuille contient les recommandations concernant le code à traiter :
La petite application ObfuTest ne fait rien de sérieux et est écrite pour tester et montrer le fonctionnement de Obfu-VBA. Elle comporte 1 module de code, 1 module de classe et 1 userform, dont les versions originales et obfusquées sont présentées ci-dessous.
ToolOscope vous propose une licence Shareware :
Pour tout cela, rendez-vous à l'Espace Utilisateurs.