IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Protéger son code VBA contre les indiscrets - Fichier devant être autonome


Sujet :

Macros et VBA Excel

  1. #1
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut Protéger son code VBA contre les indiscrets - Fichier devant être autonome
    Bonjour

    Après avoir cherché différentes solutions et malgré mon excellent niveau en VBA, je ne parviens pas à imaginer une solution (autre que le bête "Protéger l'affichage du code source" natif d'Excel) pour interdire à un indiscret de voir mon code VBA (plusieurs milliers de lignes).

    Mon souci étant que le fichier doit être autonome càd que je ne peux pas, pour des raisons techniques, utiliser un quelconque addin qui serait programmé en VSTO p.ex. Le fichier .xlsm doit pouvoir être ouvert par mes utilisateurs quelque soit leur position géographique càd n'étant pas sur mon réseau d'entreprise. Il faut qu'en ouvrant ce seul fichier .xlsm, la programmation puisse être exécutée.

    Une solution à base de cryptage et d'un addin tiers est donc impossible.

    Quelqu'un aurait-il une suggestion ?

    Merci par avance pour vos idées.

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    voici un petit dev très simple fonctionnant sous 2003 qui peut être adapté sur la protection partielle d'un classeur

    http://www.developpez.net/forums/d15...-onglet-prive/

    En espérant que cela te soit utile

    Bonne journée

  3. #3
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjour.

    Merci pour t'être intéressé à ma question.

    Ma question est "comment rendre l'accès à mon code VBA totalement impossible" et, ton fichier Excel, me donne un accès à ton code source. Tu affiches un formulaire pour un semblant de protection mais cette protection-là est tellement simple à supprimer. Une sheet protégée sous Excel ne tient pas deux secondes :

    Voici comment faire sauter la protection (si tu programmes cela dans ton propre ribbon, tu n'as donc qu'à cliquer sur un bête bouton pour déprotéger; d'où mes deux secondes)


    1. Afficher la sheet,
    2. Appuyez sur ALT-F11 pour activer l'éditeur de code
    3. Appuyez sur CTRL-G pour activer la "immediate window".
    4. Introduisez cette ligne et appuyez sur Enter
    ActiveSheet.Protect vbNullString, , True, , , , , , , , , , , , , True
    5. Introduisez ensuite cette ligne et appuyez une nouvelle fois sur Enter
    ActiveSheet.Unprotect vbNullString
    Voilà, zou', protection, yaplus.


    Le truc est donc, le plus idiotement du monde, de mettre un mot de passe à vide (vbNullString) puis de déprotéger la feuille en utilisant ce mot de passe.


    Ce que je cherche et souhaite trouver, c'est une possibilité d'intégrer mon code VBA à un fichier Excel et de rendre ce code totalement protégé; au-delà du bête "Protéger l'accès au code par un mot de passe".

    Merci encore pour t'être penché sur ma question.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne connais pas de protection suffisante en VBA.
    La protection prévue dans l'éditeur (Outils/Propriétés de VBAProject... [Protection]) est suffisante pour des utilisateurs lambdas mais ne résistera pas à quelqu'un qui pratique ce langage depuis un certain temps.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Mon souci étant que le fichier doit être autonome
    qu’entant par autonome?

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici comment faire sauter la protection (si tu programmes cela dans ton propre ribbon, tu n'as donc qu'à cliquer sur un bête bouton pour déprotéger; d'où mes deux secondes)

    1. Afficher la sheet,
    2. Appuyez sur ALT-F11 pour activer l'éditeur de code
    3. Appuyez sur CTRL-G pour activer la "immediate window".
    4. Introduisez cette ligne et appuyez sur Enter
    ActiveSheet.Protect vbNullString, , True, , , , , , , , , , , , , True
    5. Introduisez ensuite cette ligne et appuyez une nouvelle fois sur Enter
    ActiveSheet.Unprotect vbNullString
    Voilà, zou', protection, yaplus.
    Juste une parenthèse
    Comment arrives-tu à afficher l'éditeur VBA si tu l'as protégé ? Il faudra que tu expliques ton astuce
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, effectivement cela parait étonnant car sinon il y a ceci pour la déprotection des feuilles.

  8. #8
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bon alors autre piste as-tu pensé au format xll ? format compilé excel

    https://www.add-in-express.com/docs/...xll-addins.php

    ne m'en demande pas plus j'en sais pas plus

    tu me dis si cela te vas ou pas

    bonne journée

  9. #9
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjour à tous et, surtout, merci pour vos réponses.

    @kiki29 : oui, en effet, ce petit code hyper ridicule (dans sa simplicité de mise en oeuvre) permet de briser la protection de la feuille. Hyper ridicule car Microsoft aurait dû interdire de réinitialiser le mot de passe si on n'a pas le mot de passe actuel. Un peu comme si un utilisateur veut réinitialiser son mot de passe sur un forum sans avoir à mettre l'ancien.

    @rdurupt : autonome => tout doit être dans le même fichier Excel; mes feuilles de travail et mon code VBA (un fichier .xlsm). Sinon, je serais parti sur une solution avec un addin et un code hyper minimaliste dans mon fichier .xlsm et un DLL associée, sous forme de référence.

    @Philippe Tulliez : pour l'accès à VBE, je n'ai pas testé, en cet instant, mais nul doute qu'il soit possible de hacker le fichier .xlsm en l'ouvrant avec un archiveur type 7-zip. J'ai déjà utilisé la technique décrite dans l'article ci-après pour; le plus stupidement du monde, supprimer le tag "Workbook Protected=Yes" ou "Worksheet Protected=Yes" dans les manifests des fichiers .xlsx. Plus d'info : http://www.eteignezvotreordinateur.c...xcel-20072010/. Alors, nul doute, que cela soit possible pour la case "Protéger l'accès au code source". En outre, ce code source, je ne serais guère étonné que Microsoft l'ait stocké en ascii et que tu puisses le "pomper". D'ailleurs, j'ai déjà écris il y a quelques années une macro VBA dans un fichier Excel qui, par programmation donc, ouvrait un second fichier Excel (en prenant soin de faire un Application.EnableEvents=False) et qui allait instancier les modules, forms et classes et qui allait "copier/coller" le code VBA de ce second fichier. j'avais utilisé cette technique car mon fichier était corrompu; impossible de l'ouvrir depuis Excel "manuellement" mais via cette astuce, j'avais pû récupérer mes milliers de lignes de code.

    Si ce sujet t'intéresse, lis des tutos sur "Microsoft Visual Basic for Applications Extensibility" et les objets VBIDE.VBE, VBIDE.VBProject et VBIDE.VBComponent.

    @Igloobel : Non, malheureusement, ton fichier .xll est donc un deuxième fichier. Le fichier .xlsm que tu vas développer va devoir faire des appels à ce second fichier et là, ce n'est donc plus un fichier .xlsm autonome puisque, sans le .xll, rien ne fonctionne. Je ne peux pas choisir ce type de solution...

    Merci à tous pour vos réponses et si vous avez d'autres suggestions, je suis preneur ;-)

    Bonne journée.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je sais que sous le Access on peut rendre un fichier exécutable avec Excel????

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour Cavo789,
    Je te remercie pour tes conseils prodigués mais je sais bien entendu faire sauter les protections d'un classeur protégé avec ou sans code VBA.
    Ma remarque était simplement faite par rapport à ce que tu décrivais à savoir faire un Alt+F11 pour afficher l'éditeur de VBA du classeur actif alors que le code de celui-ci est protégé.
    C'est cela que j'aimerais que tu expliques comment tu as fait.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  12. #12
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Bonjour, bonjour !

    Aucun protection fiable en version "autonome" ‼ …

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Fais une recherche sur "obfuscation vba".
    Une fois le fichier cracké, tomber sur un code obfusqué doit calmer un peu.
    Un gratuit (non testé) si tu n'es pas prêt à payer : http://invisiblebasic.sourceforge.net/
    Regarde les commentaires, il y en a un pour l'adapter à excel 2010.
    eric

  14. #14
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjour

    Citation Envoyé par Philippe Tulliez Voir le message
    Ma remarque était simplement faite par rapport à ce que tu décrivais à savoir faire un Alt+F11 pour afficher l'éditeur de VBA du classeur actif alors que le code de celui-ci est protégé.
    C'est cela que j'aimerais que tu expliques comment tu as fait.
    ... je n'ai pas cherché à le faire moi-même mais va voir le lien que je proposais (http://www.eteignezvotreordinateur.c...el-20072010/); au bas de la page "Supprimer le mot de passe VBA", le gars explique qu'avec un éditeur hexadécimal; il suffit de rechercher l'occurence DBP et de la remplacer par DPx. J'ai déjà testé ce tuto pour faire sauter le mot de passe d'une sheet et d'un fichier aussi je n'ai que peu de doute sur la réalité de son astuce pour l'éditeur hexa.

    Et, aussi, comme je peux "pomper" le VBA d'un fichier Excel sans même l'ouvrir (via VBIDE.VBProject), je n'ai que peu de doute (aucun à dire vrai) que cette protection "Voir le source" ne tient pas si on souhaite la casser.

    Citation Envoyé par eriiic Voir le message
    Fais une recherche sur "obfuscation vba".
    Bonne idée; merci Eriiic, il faut que j'investigue là-dessus.

    Citation Envoyé par eriiic Voir le message
    Un gratuit (non testé) si tu n'es pas prêt à payer : http://invisiblebasic.sourceforge.net/
    J'étais tombé dessus mais voyant que le projet est à l'abandon depuis neuf ans; je n'ai pas poursuivi.

    Je vais tenter de trouver quelque chose via Google "obfuscation vba".

    Merci à tous.

  15. #15
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Par défaut
    Bonjour à tous,

    cavo, si tu as des retours à nous donner sur la solution choisie au final, cela m'intéresserait grandement.

    J'avais déjà testé la solution proposée par eriiic mais j'ai rencontré pas mal de difficultés à l'adapter. Je me tatais à prendre une licence temporaire sur CrunchCode.

    Bref, si tu as trouvé quelque chose d'intéressant, n'hésite pas à le partager, merci

  16. #16
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjour

    Désolé, je n'ai pas encore pris le temps de trouver une solution (j'ai guère d'espoir).

    J'étais venu ici pour "profiter" de votre expertise càd de ne pas devoir chercher et d'avoir quelque chose de rapide et éprouvé.

    Actuellement, j'ai encore beaucoup de choses à programmer et il faut que je m'axe là-dessus prioritairement.

    Comme je le mentionnais ci-dessus, j'ai peu d'espoir car, en mode autonome (je ne peux pas faire appel à un addin ou autre fichier externe), hormis le bête mot de passe pour interdire l'accès au code; je ne vois pas comment crypter ce dernier si Excel ne propose pas lui-même, nativement, cette fonctionnalité. Pour que le code continue à s'exécuter, il faut qu'Excel "sache" le lire et s'il est crypté; cela ne serait pas possible.

    Il semble donc que, en 2015, Microsoft n'ait toujours pas mis en place un mécanisme un peu plus robuste pour cette protection-là qui, visiblement, n'est ni une priorité ni même quelque chose à faire; je présume qu'ils partent du constat que le VBA doit être lisible...

    Sous MSAccess, à l'époque où j'en faisais, on pouvait sauver en MDE et là, le code était plus ou moins compilé et non accessible. Excel ne propose donc toujours pas cette fonctionnalité.

    Mais promis si je trouve un truc pertinent, je reviens ici.

    Merci à tous pour vos réponses et vos échanges.

  17. #17
    Nouveau candidat au Club
    Femme Profil pro
    chomeur
    Inscrit en
    Février 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Février 2016
    Messages : 2
    Par défaut Logiciel " Pro"
    Salut je suis également très intéressé par cette discutions et je me suis inscrit sur ce forum spécialement pour ça.

    J'ai regarder des sites pour Obfusquer mon code mais rapidement on se rend compte que simplement en remplaçant les variables illisible par d'autre variable lisible on peut simplifier le code et le comprendre et le voler... donc non

    Je me suis tourné vers une solution qui compilerai en .exe mon excel/vba grace à d'autre logiciels "pro"

    Voici les liens:
    http://doneex.com/
    http://cpap.com.br/orlando/XLtoExeMore.asp
    http://www.exceltoexe.com/

    ... et il y en a d'autre.

    L'idée pour moi c'est de pouvoir comme toi utiliser les macros n'importe ou et de pouvoir protéger cela des méthodes classiques.
    j'étudie actuellement ces offres des différents site...

    As tu pu avancer sur ta recherche également ?

  18. #18
    Invité de passage
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1
    Par défaut
    bonjour,
    intéressé par votre discussion, je recherche aussi une solution d'obfuscation de code vba (tout en le gardant autonome)
    avez-vous regardé par ici ? https://github.com/Pepitoh/VBad

Discussions similaires

  1. Réponses: 21
    Dernier message: 21/02/2017, 15h24
  2. Comment protéger son code du reverse engineering ?
    Par progfou dans le forum Débats sur le développement - Le Best Of
    Réponses: 120
    Dernier message: 12/01/2011, 19h12
  3. Code Vba pour ouvrir un fichier XML
    Par nomade333 dans le forum VBA Access
    Réponses: 5
    Dernier message: 26/03/2008, 13h38
  4. Protéger son code source ?
    Par supergrey dans le forum C++
    Réponses: 32
    Dernier message: 05/12/2006, 10h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo