Protéger efficacement les macros VBA Excel

Bonjour à tous,

Je poste ce message pour vous informer de l'existence d'un outil de protection des macros VBA que j'ai développé (JO-OBfuscator : Le protecteur des macros VBA) et que je mets gratuitement à la disposition de tous.

Description :

JO-OBfuscator est un classeur Excel permettant de protéger le code source VBA d’une macro Excel en le rendant quasiment illisible. Pour ce faire, cet outil effectue un cryptage du nom des variables, transforme les chaînes de caractères et supprime les commentaires ainsi que l’indentation des lignes de code. Toutes ces opérations rendent le code source de la macro quasiment illisible.

De plus JO-OBfuscator sauvegarde le code source initial dans un fichier au format texte (.txt) ainsi que le code source après obfuscation dans un fichier séparé (.txt). Il dresse également la liste des variables cryptées et des chaînes de caractères transformées.

Ainsi toutes les macros sont archivées avec leurs noms dans des fichiers séparés (macros initiales et macros traitées). Cet archivage peut être utile, par exemple, pour retrouver facilement une macro que l’on souhaite utiliser dans un autre projet VBA Excel.

Vous pouvez le télécharger sur mon site :

http://www.joseouin.fr/logiciels/logiciel-jo-obfuscator

Vous y trouverez toutes les informations nécessaires (fichier xlsm, mode d'emploi, exemple de macro (vidéo))

Je suis heureux de pouvoir offrir JO-OBfuscator à tous et c’est pour moi une manière de remercier toutes celles et ceux qui donnent de leur temps pour mettre en ligne des codes sources ou des conseils. Car c’est grâce à eux et grâce aux données qu’ils ont bien voulu partager que j’ai pu apprendre ce qu’aujourd’hui je sais.

Très bonne journée à tous.

José OUIN.

Bonjour José, bonjour le forum,

Peut-être ton fichier aurait plus intérêt à être disponible dans la rubrique Téléchargements du site... En tous cas, merci pour le partage.

Bonjour ThauThème,

Merci pour ton post. Je voulais pouvoir détailler les fonctionnalités de ce classeur Excel. De plus le lien que j'ai donné donne également accès à une vidéo explicative, un fichier PDF "Mode d'emploi" ainsi qu'un exemple de code source VBA "Avant" et "Après" la transformation du code.

Je ne pouvais pas tout mettre dans ce post, cela l'aurait surchargé inutilement.

A+

Bonjour

l'auteur de ce site avait déjà mis quelque chose de similaire dans les astuces du site,

c'est une procédure qui se fait un ligne (je trouve que je fait de gardé le code source intacte dans un txt est un plus par exemple avec ton fichier (pas encore essayé pour ma part))

voir ici :

https://www.excel-pratique.com/fr/astuces_vba/proteger-code-vba.php

fred

Bonjour à tous,

Il s'agit effectivement du même thème. Ce qui avait été proposé demandait la liste des variables pour pouvoir fonctionner. Le fichier Excel que je propose détermine toutes les variables automatiquement et il transforme en plus toutes les chaines de caractères.

J'ai suivi les conseils de ThauThème et j'ai proposé ce classeur Excel en téléchargement sur ce site (je précise que ce classeur est en lecture seule (et donc il demande un mot de passe à l'ouverture (mot de passe nécessaire SEULEMENT pour l'ouverture en "modification") mais que cela n'empêche pas son fonctionnement et qu'il est possible de l'utiliser sans problème SANS MOT DE PASSE)).

Je suis un peu triste car j'ai reçu cette réponse de Sébastien :

Bonjour,

Sébastien

Pourtant ce mot de passe n'est pas un frein, il suffit de cliquer sur "Lecture Seule" et tout fonctionne normalement.

Voici la capture d'écran de l'ouverture de ce fichier Excel :

captureboxmdp

Bonne journée à tous.

Cordialement.

rebonjour josé,

je vient de pensé a quelque chose qui va forcement limité l'utilisation de ton outils....

j'ai lu dans ton pdf que la limite du nombre de caractère par ligne était de 110....

seulement voilà.... même si tu utilise des noms court, et si tu fais un tri cela peut donner ceci : (exemple du fichier sur lequel je travail) :

Feuil1.Range(Plg_Data_A).Sort Key1:=Feuil1.Range(Cell_Gr_A), Order1:=xlDescending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

hors cette ligne de code fait 185 caractères.....

donc a priori ton "offuscation" ne marchera pas dès que l'on fait un tri dans une fonction/sub....

a moins que je me trompes, j'ai pas encore testé ton outil....

c'est une idée pour améliorer ton outils ou une limite a préciser....

a+

fred

Bonjour Fred,

Merci pour ton message mais ce que j'ai indiqué dans mon "Mode d'emploi" au format PDF ne concerne que les chaines de caractères du type :

Message = "Un texte qui est vraiment trop long etc... et encore des mots, ... paroles, paroles, paroles, toujours des paroles...."

Dans ce cas je conseille :

Solution 1 :

Message = "Un texte qui est vraiment trop long etc..."
Message = Message & "et encore des mots, paroles, paroles, ... (chanson de Dalida)"

Solution 2 :

Utiliser le symbol "underscore" (tiret du bas de la touche 8 : "_") comme ceci :

Message =  Message = "Un texte qui est vraiment trop long etc..." & _
"et encore des mots, paroles, paroles, ... (chanson de Dalida)"

Pour ce qui est de ta ligne de code Fred :

En fait, pour une question de lisibilité (pour le développeur et pour le débogage), au lieu d'écrire cela :

Feuil1.Range(Plg_Data_A).Sort Key1:=Feuil1.Range(Cell_Gr_A), Order1:=xlDescending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

Il vaut mieux écrire cela :

Feuil1.Range(Plg_Data_A).Sort Key1:=Feuil1.Range(Cell_Gr_A), _
Order1:=xlDescending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

Et là on y gagne en lisibilité du code pour le développeur et chaque ligne de code n'est pas trop longue pour le JO-OBfuscator, le grand protecteur des macros VBA.

Merci de l'intérêt que vous portez à ce classeur Excel et à vos suggestions d'amélioration du produit.

A+

Rebonjour Fred,

Je viens de modifier le "Mode d'Emploi" au format PDF afin d'y ajouter ta remarque relative aux instructions qui ne sont pas des chaînes de caractères. Et puis je me suis fait la remarque suivante : Même avec 185 caractères, tu ne risques pas de dépasser la barre des 1024 caractères pour la ligne de code car les instructions "Excel" ne sont pas cryptées.

Petit calcul : Voici tes 185 caractères (sur une seule ligne) :

Feuil1.Range(Plg_Data_A).Sort Key1:=Feuil1.Range(Cell_Gr_A), Order1:=xlDescending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

Dans cette ligne, ne seront cryptés que Plg_Data_A et Cell_Gr_A. Imaginons, pour le calcul, que tu aies considéré des variables plus longues : Plg_Data_A_qui_est_vraiment_plus_longue et Cell_Gr_A_qui_elle_aussi_est_vraiment_plus_longue_ho_la_la

J'ai demandé à JO-OBfuscator de transformer cette ligne d'instruction :

On passe donc de 263 caractères :

Feuil1.Range(Plg_Data_A_qui_est_vraiment_plus_longue).Sort Key1:=Feuil1.Range(Cell_Gr_A_qui_elle_aussi_est_vraiment_plus_longue_ho_la_la), Order1:=xlDescending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

à 297 caractères après transformation :

Feuil1.Range(JOOBetjKa7oWEAiPSrO9Mi1TNF4bD6jFS3F24p6Q63pTgPU1PTaHdF16).Sort Key1:=Feuil1.Range(JOOBetjKa7bPJNPjQpeJ5mOJTMWVDKmX3YtS3QO13KFU6P8E1WSUP1NKW6SZNZNMLPQKTaHdF16), Order1:=xlDescending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

Soit une augmentation de 13 % environ

On est donc bien en dessous des 1024 caractères (il reste encore de la place (727 caractères)) même pour celles et ceux qui n'utiliseraient pas l'underscore "_" pour couper leurs lignes de code.

A+

Rechercher des sujets similaires à "proteger efficacement macros vba"