On m'a demandé de mettre à jour certaines macros Excel 2003, mais les projets VBA sont protégés par 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 casser le mot de passe sur un projet VBA?
Réponses:
Vous pouvez essayer cette
VBA
approche directe qui ne nécessite pas d'édition HEX. Cela fonctionnera pour tous les fichiers (* .xls, * .xlsm, * .xlam ...).Testé et fonctionne sur:
Vous recherchez une version 64 bits? Voir cette réponse
Comment ça fonctionne
Je ferai de mon mieux pour expliquer comment cela fonctionne - veuillez excuser mon anglais.
Utiliser le code
Veuillez d'abord sauvegarder vos fichiers!
Créez un nouveau fichier xlsm et stockez ce code dans Module1
code credited to Siwtom (nick name), a Vietnamese developer
Collez ce code sous le code ci-dessus dans Module1 et exécutez-le
Revenez à vos projets VBA et profitez-en.
la source
Oui, tant que vous utilisez une
.xls
feuille de calcul au format (par défaut pour Excel jusqu'à 2003). Pour Excel 2007 et versions ultérieures, 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, c'est une comparaison simple. Une méthode consiste simplement à échanger l'entrée de mot de passe dans le fichier à l'aide d'un éditeur hexadécimal (voir Éditeurs hexadécimaux pour Windows ). Exemple étape par étape:
Copiez les lignes commençant par les touches suivantes:
PREMIÈRE SAUVEGARDE du 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.
Si vous devez travailler avec Excel 2007 ou 2010, il existe d'autres réponses ci-dessous qui pourraient vous aider, en particulier celles-ci: 1 , 2 , 3 .
EDIT février 2015: pour une autre méthode qui semble très prometteuse, regardez cette nouvelle réponse de Đức Thanh Nguyễn.
la source
CMG...
chaîne est plus longue que l'original.J'ai construit sur la fantastique réponse de Đức Thanh Nguyễn pour permettre à cette méthode de fonctionner avec les versions 64 bits d'Excel. J'exécute Excel 2010 64 bits sur Windows 7 64 bits.
Créez un nouveau fichier xlsm et stockez ce code dans Module1
Collez ce code dans Module2 et exécutez-le
AVERTISSEMENT Cela a fonctionné pour moi et je l'ai documenté ici dans l'espoir que cela aidera quelqu'un. Je ne l'ai pas entièrement testé . Veillez à enregistrer tous les fichiers ouverts avant de continuer avec cette option.
la source
Il existe une autre solution (un peu plus simple), 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.
DPB=...
pièceDPB=...
chaîne parDPx=...
* REMARQUE: 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 (erreur inattendue), puis lorsque vous accéderez à la liste des modules VBA, vous verrez maintenant les noms des modules source mais reçoivent une autre erreur lors de la tentative d'ouverture de formulaires / code / etc. Pour y remédier, revenez aux propriétés du projet VBA et définissez le mot de passe sur une nouvelle valeur. Enregistrez et rouvrez le document Excel et vous devriez être prêt à partir!
la source
Colin Pickard a une excellente réponse, mais il faut faire attention à cela. Il y a des cas (je n'ai pas encore trouvé la cause) où la longueur totale de l'entrée "CMG = ........ GC = ...." dans le fichier est différente d'un fichier Excel au suivant. 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 é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 essayez d'ouvrir le fichier avec Excel.
ÉDITER
Ce n'est pas valable pour les fichiers Excel 2007/2010. Le format de fichier .xlsx standard est en fait un fichier .zip contenant de nombreux sous-dossiers avec le formatage, la mise en page, le contenu, etc., stockés sous forme de données xml. Pour un fichier Excel 2007 non protégé, vous pouvez simplement changer l'extension .xlsx en .zip, puis ouvrir le fichier zip et parcourir toutes les données xml. C'est très simple.
Toutefois, lorsque vous protégez par mot de passe un fichier Excel 2007, l'intégralité du fichier .zip (.xlsx) est réellement chiffrée à l'aide du chiffrement RSA. Il n'est plus possible de changer l'extension en .zip et de parcourir le contenu du fichier.
la source
Pour un type de fichier
.xlsm
ou.dotm
, vous devez le faire d'une manière légèrement différente..xlsm
fichier en.zip
.vbaProject.bin
fichier et l'ouvrir dans un éditeur hexadécimal (j'utilise HxD , son entièrement gratuit et léger.)DPB
, remplacezDPx
et enregistrez le fichier.vbaProject.bin
fichier par ce nouveau dans le fichier compressé..xlsm
..xlsm
fichier.la source
.zip
si vous avez installé 7-Zip . Dans ce cas, vous pouvez simplement cliquer avec le bouton droit sur le.xlsm
fichier et choisir "7-Zip -> Open Archive"Il convient de souligner que si vous disposez d'un fichier Excel 2007 (xlsm), vous pouvez simplement l'enregistrer en tant que fichier Excel 2003 (xls) et utiliser les méthodes décrites dans d'autres réponses.
la source
1.
convertir .xlsm en .xls2.
casser le code de .xls3.
convertir .xlsm en .xlsx4.
Mettre le code des modules en .xls vers. xlsx et enregistrez-le au format .xlsmÀ mon tour, cela s'appuie sur l'excellente réponse de kaybee99 qui s'appuie sur la fantastique réponse de Đức Thanh Nguyễn pour permettre à cette méthode de fonctionner avec les versions x86 et amd64 d'Office.
Un aperçu de ce qui a changé, nous évitons push / ret qui est limité aux adresses 32 bits et le remplaçons par mov / jmp reg.
Testé et fonctionne sur
Comment ça fonctionne
Créez un nouveau fichier avec le même type que ci-dessus et stockez ce code dans Module1
Collez ce code dans Module2 et exécutez-le
la source
Avez-vous essayé de simplement les ouvrir dans OpenOffice.org?
J'ai eu un problème similaire il y a quelque temps et j'ai constaté qu'Excel et Calc ne se comprenaient pas mutuellement, et permettaient donc un accès direct à à peu près tout.
C'était il y a un certain temps, donc si ce n'était pas seulement un coup de chance de ma part, cela pourrait aussi avoir été corrigé.
la source
Dans le cas où votre bloc
CMG="XXXX"\r\nDPB="XXXXX"\r\nGC="XXXXXX"
dans votre fichier "mot de passe connu" est plus court que le bloc existant dans le fichier "mot de passe inconnu", remplissez vos chaînes hexadécimales avec des zéros de fin pour atteindre la longueur correcte.par exemple
CMG="xxxxxx"\r\nDPB="xxxxxxxx"\r\nGC="xxxxxxxxxx"
dans le fichier de mot de passe inconnu, doit être défini sur
CMG="XXXX00"\r\nDPB="XXXXX000"\r\nGC="XXXXXX0000"
pour conserver la longueur du fichier.J'ai également eu ce travail avec des fichiers .XLA (format 97/2003) dans Office 2007.
la source
Pour Excel 2007, vous devez changer votre extension de fichier en .zip Dans l'archive, il y a un sous-dossier xl, où vous trouverez vbaProject.bin. Suivez l'étape ci-dessus avec vbaProject.bin, puis enregistrez-le dans l'archive. Modifiez votre extension et voilà! (ce qui signifie suivre les étapes ci-dessus)
la source
Les mots de passe du projet VBA sur les documents Access, Excel, Powerpoint ou Word (
2007, 2010, 2013 or 2016
versions avec extensions.ACCDB .XLSM .XLTM .DOCM .DOTM .POTM .PPSM
) peuvent être facilement supprimés .Il s'agit simplement de changer l'extension du nom de fichier en
.ZIP
, de décompresser le fichier et d'utiliser n'importe quel éditeur hexadécimal de base (comme XVI32 ) pour "casser" le mot de passe existant, ce qui "confond" Office pour qu'il demande un nouveau mot de passe la prochaine fois que le fichier est ouvert.Un résumé des étapes:
.ZIP
extension.ZIP
et accédez auXL
dossier.vbaProject.bin
et ouvrir avec un éditeur hexadécimalDPB
àDPX
..bin
fichier dans le zip, retournez-le à son extension normale et ouvrez le fichier comme d'habitude.VBA Project Properties
.Protection
onglet, définissez un nouveau mot de passe.OK
, fermez le fichier, rouvrez-le, appuyez sur ALT + F11.À ce stade, vous pouvez supprimer complètement le mot de passe si vous le souhaitez.
Des instructions complètes avec une vidéo étape par étape que j'ai faite "en arrière quand" sont sur YouTube ici .
Il est assez choquant que cette solution de contournement existe depuis des années, et Microsoft n'a pas résolu le problème.
la source
Colin Pickard est généralement correct, mais ne confondez pas la protection «mot de passe pour ouvrir» pour l'ensemble du fichier avec la protection par mot de passe VBA, qui est complètement différente de la première et identique pour Office 2003 et 2007 (pour Office 2007, renommez le fichier .zip et recherchez le vbaProject.bin à l'intérieur du zip). Et que techniquement la bonne façon d'éditer le fichier est d'utiliser une visionneuse de document composée OLE comme CFX pour ouvrir le flux correct. Bien sûr, si vous remplacez simplement des octets, l'ancien éditeur binaire simple peut fonctionner.
BTW, si vous vous interrogez sur le format exact de ces champs, ils l'ont documenté maintenant:
http://msdn.microsoft.com/en-us/library/dd926151%28v=office.12%29.aspx
la source
Si le fichier est un fichier zip valide (les premiers octets sont
50 4B
- utilisés dans des formats comme.xlsm
), décompressez le fichier et recherchez le sous-fichierxl/vbaProject.bin
. Il s'agit d'un fichier CFB tout comme les.xls
fichiers. Suivez les instructions pour le format XLS (appliqué au sous-fichier), puis zippez simplement le contenu.Pour le format XLS, vous pouvez suivre certaines des autres méthodes de cet article. Personnellement, je préfère rechercher le
DPB=
bloc et remplacer le texteavec des espaces vides. Cela évite les problèmes de taille de conteneur CFB.
la source
J'ai essayé certaines des solutions ci-dessus et aucune d'entre elles ne fonctionne pour moi (fichier Excel 2007 xlsm). Ensuite, j'ai trouvé une autre solution qui permet même de récupérer le mot de passe, pas seulement de le casser.
Insérez ce code dans le module, exécutez-le et donnez-lui du temps. Il récupérera votre mot de passe par force brute.
la source
ElcomSoft fabrique des produits Advanced Office Password Breaker et Advanced Office Password Recovery qui peuvent s'appliquer à ce cas, tant que le document a été créé dans Office 2007 ou antérieur.
la source
Tom - J'ai fait une erreur d'écolier au départ car je n'ai pas regardé la taille des octets et à la place j'ai copié et collé de la configuration "CMG" à l'entrée suivante. Cependant, il s'agissait de deux tailles de texte différentes entre les deux fichiers, et j'ai perdu le projet VBA, tout comme l'avertissait Stewbob.
En utilisant HxD, il y a un compteur qui suit la quantité de fichier que vous sélectionnez. Copie à partir de CMG jusqu'à ce que le compteur indique 8F (hex pour 143) et de même lors du collage dans le fichier verrouillé - je me suis retrouvé avec deux fois le nombre de "..." à la fin de la pâte, ce qui semblait étrange en quelque sorte et semblait presque contre nature, mais cela a fonctionné.
Je ne sais pas si c'est crucial, mais je me suis assuré de fermer l'éditeur hexadécimal et d'exceller avant de rouvrir le fichier dans Excel. J'ai ensuite dû parcourir les menus pour ouvrir l'éditeur VB, dans les propriétés VBProject et saisir le «nouveau» mot de passe pour déverrouiller le code.
J'espère que ça aide.
la source
Mon outil, VbaDiff , lit VBA directement à partir du fichier, vous pouvez donc l'utiliser pour récupérer le code VBA protégé de la plupart des documents de bureau sans avoir recours à un éditeur hexadécimal.
la source
La protection est une simple comparaison de texte dans Excel. Chargez Excel dans votre débogueur préféré ( Ollydbg étant mon outil de choix), trouvez le code qui fait la comparaison et corrigez-le pour qu'il retourne toujours vrai, cela devrait vous permettre d'accéder aux macros.
la source
Pour Excel 2016 64 bits sur une machine Windows 10, j'ai utilisé un éditeur hexadécimal pour pouvoir changer le mot de passe d'un xla protégé (je n'ai testé cela pour aucune autre extension). Pointe: créez une sauvegarde avant de procéder.
Les étapes que j'ai prises:
J'espère que cela a aidé certains d'entre vous!
la source
le changement d'extension de votre fichier Excel en xml. Et ouvrez-le dans le bloc-notes. mot de passe trouver dans le fichier xml.
vous voyez comme ci-dessous la ligne;
(Désolé pour mon mauvais anglais)
la source
Si vous travaillez,
Java
vous pouvez essayerVBAMacroExtractor
. Après avoir extrait les scripts VBA,.xlsm
j'ai trouvé le mot de passe en texte clair.la source