579 votes

Existe-t-il un moyen de craquer le mot de passe d'un projet Excel VBA ?

On m'a demandé de mettre à jour certaines macros Excel 2003, mais les projets VBA sont protégés par un mot de passe, et il semble qu'il y ait un manque de documentation... personne ne connaît les mots de passe.

Existe-t-il un moyen de supprimer ou de craquer le mot de passe d'un projet VBA ?

0 votes

Pouvez-vous enregistrer sous un format .xls au lieu d'un format .xla, comme le suggèrent les exemples de votre lien ? Je ne suis pas sûr que cela fasse une différence.

4 votes

Bon à savoir : xlsb est robuste contre les astuces de craquage de mot de passe

34 votes

@Fandango68 Cette question a été discutée il y a des années sur meta . TLDR : Beaucoup (la plupart ?) des questions de l'OS pourraient être utilisées de manière abusive par de mauvais acteurs, mais à moins qu'il n'y ait des preuves évidentes de méfaits, nous supposons la bonne foi. Il existe de nombreuses raisons légitimes, légales et éthiques de craquer un mot de passe VBA. De plus, discuter des faiblesses des systèmes actuels contribue en fin de compte à améliorer la sécurité à l'avenir et décourage les gens de se fier aveuglément à des systèmes non sécurisés aujourd'hui.

228voto

Colin Pickard Points 23922

Oui, tant que vous utilisez une .xls (le format par défaut d'Excel jusqu'en 2003). À partir d'Excel 2007, la valeur par défaut est .xlsx qui est un format assez sécurisé, et cette méthode ne fonctionnera pas.

Comme le dit Treb, il s'agit d'une comparaison simple, donc une méthode consiste simplement à échanger l'entrée du mot de passe dans le fichier à l'aide d'un éditeur hexagonal (cf. Éditeurs hexadécimaux pour Windows ). Exemple étape par étape :

  1. Créez un nouveau fichier Excel simple.

  2. Dans la partie VBA, définissez un mot de passe simple (disons - 1234).

  3. Enregistrez le fichier et quittez. Vérifiez ensuite la taille du fichier - voir Le gotcha de Stewbob

  4. Ouvrez le fichier que vous venez de créer avec un éditeur hexagonal.

  5. Copiez les lignes commençant par les touches suivantes :

    CMG=....
    DPB=...
    GC=...
  6. PREMIÈRE SAUVEGARDE le fichier excel dont vous ne connaissez pas le mot de passe VBA, puis ouvrez-le avec votre éditeur hexadécimal, et collez les lignes copiées ci-dessus à partir du fichier factice.

  7. Sauvegardez le fichier excel et quittez.

  8. Maintenant, ouvrez le fichier Excel dans lequel vous voulez voir le code VBA. Le mot de passe pour le code VBA sera simplement 1234 (comme dans l'exemple que je montre ici).

Si vous devez travailler avec Excel 2007 ou 2010, vous trouverez ci-dessous d'autres réponses qui pourraient vous aider, notamment celles-ci : 1 , 2 , 3 .

0 votes

Que se passe-t-il s'il n'y a pas de lignes qui commencent par CMG=... ?

1 votes

Dans le fichier Excel vierge, ou dans le fichier verrouillé ? Vérifiez la taille du fichier vierge. S'il s'agit du fichier verrouillé, assurez-vous que votre sauvegarde est sûre, puis essayez de modifier seulement les deux autres lignes. Vous êtes sûr que c'est un fichier crypté ?

0 votes

Dans le dossier vierge. Les deux autres lignes n'apparaissent pas non plus. Cela fonctionne-t-il également dans Excel 2007 ? J'ai utilisé HEdit.

184voto

Pieter Points 1205

Il existe une autre solution (un peu plus facile), sans les problèmes de taille. J'ai utilisé cette approche aujourd'hui (sur un fichier XLS 2003, en utilisant Excel 2007) et j'ai réussi.

  1. Sauvegarder le fichier xls
  2. En utilisant un éditeur HEX, localisez la partie DPB=....
  3. Changez la chaîne DPB=... en DPx=...
  4. Ouvrez le fichier xls dans Excel
  5. Ouvrir l'éditeur VBA (ALT+F11)
  6. la magie : Excel découvre une clé invalide (DPx) et demande si vous voulez continuer à charger le projet (en ignorant la protection).
  7. Vous serez en mesure d'écraser le mot de passe, alors changez-le pour quelque chose dont vous pouvez vous souvenir.
  8. Enregistrez le fichier xls*.
  9. Fermez et rouvrez le document et faites fonctionner votre magie VBA !

*NOTE : Assurez-vous que vous avez changé le mot de passe pour une nouvelle valeur, sinon la prochaine fois que vous ouvrirez la feuille de calcul, Excel signalera des erreurs (Unexpected Error), puis lorsque vous accéderez à la liste des modules VBA, vous verrez maintenant les noms des modules sources mais recevrez une autre erreur lorsque vous essaierez d'ouvrir des formulaires/codes/etc. Pour remédier à cela, retournez dans les propriétés du projet VBA et donnez une nouvelle valeur au mot de passe. Sauvegardez et rouvrez le document Excel et vous devriez être prêt !

3 votes

Malheureusement, cela n'a pas fonctionné pour moi avec Excel pour Mac 2011 v14.2.5. J'ai eu l'option de réparer le fichier, pas de réinitialiser le mot de passe, et l'effet a été de perdre tous les scripts VBA.

0 votes

Solution parfaite - J'ai fait cela avec un fichier 2003 en utilisant HxD Hex Editor.

4 votes

Je viens de l'essayer (.xls, Excel 2007) et cela n'a pas fonctionné. Le résultat est le suivant : Les modules sont visibles, le code semble effectivement fonctionner, mais lors de l'ouverture d'un module, il est indiqué erreur inattendue (40230) .

70voto

Stewbob Points 11432

Colin Pickard a donné une excellente réponse, mais il faut faire attention à cela. Dans certains cas (je n'en ai pas encore trouvé la cause), la longueur totale de l'entrée "CMG=........GC=...." dans le fichier est différente d'un fichier Excel à l'autre. Dans certains cas, cette entrée sera de 137 octets, et dans d'autres, elle sera de 143 octets. La longueur de 137 octets est la plus étrange, et si cela se produit lorsque vous créez votre fichier avec le mot de passe '1234', créez simplement un autre fichier, et il devrait passer à la longueur de 143 octets.

Si vous essayez de coller le mauvais nombre d'octets dans le fichier, vous perdrez votre projet VBA lorsque vous tenterez d'ouvrir le fichier avec Excel.

EDIT

Ceci n'est pas valable pour les fichiers Excel 2007/2010. Le format de fichier standard .xlsx est en fait un fichier .zip contenant de nombreux sous-dossiers dont le formatage, la mise en page, le contenu, etc. sont stockés sous forme de données xml. Pour un fichier Excel 2007 non protégé, il suffit de remplacer l'extension .xlsx par .zip, puis d'ouvrir le fichier zip et de parcourir toutes les données xml. C'est très simple.

Cependant, lorsque vous protégez un fichier Excel 2007 par un mot de passe, l'ensemble du fichier .zip (.xlsx) est en fait crypté à l'aide du cryptage RSA. Il n'est plus possible de changer l'extension en .zip et de parcourir le contenu du fichier.

0 votes

Ensuite, vous devez utiliser les outils standard de piratage de zip. Ce n'est plus un problème de "comment sauvegarder un fichier excel".

3 votes

@Anonymous Type : Je pense qu'un outil de craquage de zip ne sera pas utile. Si je comprends bien Stewbob, ce ne sont pas les entrées de fichier dans le fichier zip qui sont cryptées, mais l'ensemble du fichier zip lui-même, qui devrait inclure l'en-tête et le répertoire central.

2 votes

Simple curiosité : comment pourrait-il s'agir de RSA alors que je ne saisis qu'un seul mot de passe (symétrique) ?

34voto

Andy Points 279

Il convient de souligner que si vous disposez d'un fichier Excel 2007 (xlsm), vous pouvez simplement l'enregistrer comme un fichier Excel 2003 (xls) et utiliser les méthodes décrites dans les autres réponses.

4 votes

Ce n'est pas vrai, j'ai travaillé avec des fichiers pour lesquels la conversion en xls/xla à partir de xlsm était impossible, Excel 2007 et 2010 a planté à chaque fois, j'ai essayé plusieurs instances, à partir d'un message d'erreur - Kod wyjatku : c0000005 Przesuniecie wyjatku : 005d211d

4 votes

OUI, vous pouvez le faire. Je l'ai fait plusieurs fois. S'il y a quelque chose sur les feuilles qui est nécessaire et ce qui n'est pas transféré à l'ancienne version je le fais : 1. convertir .xlsm en .xls 2. déchiffrer le code du .xls 3. convertir .xlsm en .xlsx 4. Mettez le code des modules en .xls en .xlsx et sauvegardez-le en .xlsm.

0 votes

Cela fonctionne après avoir converti xlsm en xls comme dans la réponse.

17voto

greg Points 129

Avez-vous essayé de les ouvrir simplement dans OpenOffice.org ?

J'ai eu un problème similaire il y a quelque temps et j'ai découvert qu'Excel et Calc ne comprenaient pas le cryptage de l'autre, et permettaient donc un accès direct à presque tout.

C'était il y a un certain temps, donc si ce n'était pas juste un coup de chance de ma part, il se peut aussi qu'il y ait eu un correctif.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X