Y a-t-il un moyen de cracker le mot de passe sur un projet Excel VBA?

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 sait le mot de passe.

Existe-t-il un moyen de supprimer ou de cracker le mot de passe sur un projet VBA?

402
demandé sur ashleedawg 2009-06-22 14:37:13

21 réponses

vous pouvez essayer cette approche directe VBA qui ne nécessite pas d'édition hexadécimale. Il va travailler pour tous les fichiers (*.xls,*.xlsm,*.xlam ...).

testé et fonctionne sur

Excel 2007

Excel 2010

Excel 2013 - pour la version 32 bits .

Excel 2016 - pour la version 32 bits .

vous recherchez une version 64 bits? Voir https://stackoverflow.com/a/31005696/4342479

comment ça marche

je vais essayer de mon mieux pour expliquer comment il fonctionne - s'il vous plaît excusez mon anglais.

  1. le VBE appellera une fonction système pour créer la boîte de dialogue Mot de passe.
  2. si l'utilisateur entre le mot de passe droit et cliquez OK, ce retour de fonction 1. Si l'utilisateur entre le mauvais mot de passe ou cliquez sur Annuler, cette fonction renvoie 0.
  3. après la fermeture de la boîte de dialogue, le VBE vérifie la valeur retournée de la fonction système
  4. si cette valeur est 1, le VBE" pensera " que le mot de passe est correct, donc le projet VBA verrouillé sera ouvert.
  5. le code ci-dessous échange la mémoire de la fonction originale utilisée pour afficher la boîte de dialogue Mot de passe avec un utilisateur défini fonction qui retournera toujours 1 lors de l'appel.

utilisant le code

  1. ouvrir le fichier(s) qui contiennent vos projets VBA verrouillés
  2. créer un nouveau fichier xlsm et stocker ce code dans Module1

    code credited to Siwtom (nick name), a Vietnamese developer

    Option Explicit
    
    Private Const PAGE_EXECUTE_READWRITE = &H40
    
    Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
            (Destination As Long, Source As Long, ByVal Length As Long)
    
    Private Declare Function VirtualProtect Lib "kernel32" (lpAddress As Long, _
            ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
    
    Private Declare Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As Long
    
    Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, _
            ByVal lpProcName As String) As Long
    
    Private Declare Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As Long, _
            ByVal pTemplateName As Long, ByVal hWndParent As Long, _
            ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer
    
    Dim HookBytes(0 To 5) As Byte
    Dim OriginBytes(0 To 5) As Byte
    Dim pFunc As Long
    Dim Flag As Boolean
    
    Private Function GetPtr(ByVal Value As Long) As Long
        GetPtr = Value
    End Function
    
    Public Sub RecoverBytes()
        If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6
    End Sub
    
    Public Function Hook() As Boolean
        Dim TmpBytes(0 To 5) As Byte
        Dim p As Long
        Dim OriginProtect As Long
    
        Hook = False
    
        pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")
    
    
        If VirtualProtect(ByVal pFunc, 6, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then
    
            MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6
            If TmpBytes(0) <> &H68 Then
    
                MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6
    
                p = GetPtr(AddressOf MyDialogBoxParam)
    
                HookBytes(0) = &H68
                MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4
                HookBytes(5) = &HC3
    
                MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6
                Flag = True
                Hook = True
            End If
        End If
    End Function
    
    Private Function MyDialogBoxParam(ByVal hInstance As Long, _
            ByVal pTemplateName As Long, ByVal hWndParent As Long, _
            ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer
        If pTemplateName = 4070 Then
            MyDialogBoxParam = 1
        Else
            RecoverBytes
            MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
                               hWndParent, lpDialogFunc, dwInitParam)
            Hook
        End If
    End Function
    
  3. coller ce code dans Module2 et l'exécuter

    Sub unprotected()
        If Hook Then
            MsgBox "VBA Project is unprotected!", vbInformation, "*****"
        End If
    End Sub
    
  4. revenez à vos projets VBA et profitez-en.

569
répondu Đức Thanh Nguyễn 2017-11-01 18:34:40

Oui, tant que vous utilisez un tableur de format .xls (par défaut pour Excel jusqu'en 2003). Pour Excel à partir de 2007, la valeur par défaut est .xlsx , qui est un format assez sûr, et cette méthode ne fonctionnera pas.

comme dit Treb, c'est une simple comparaison. Une méthode consiste simplement à permuter l'entrée de mot de passe dans le fichier en utilisant un éditeur hex (voir éditeurs Hex 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 (say - 1234).
  3. Enregistrer le fichier et quitter. puis vérifier la taille du fichier-voir Stewbob's gotcha 1519180920 "
  4. ouvrez le fichier que vous venez de créer avec un éditeur hex.
  5. Copiez les lignes commençant par les touches suivantes:

    CMG=....
    DPB=...
    GC=...
    
  6. PREMIÈRE SAUVEGARDE le fichier excel que vous ne connaissez pas le mot de passe VBA, puis de l'ouvrir avec votre éditeur hexadécimal, et collez-le au-dessus de copié les lignes du fichier factice.

  7. sauvegarder le fichier excel et quitter.
  8. maintenant, ouvrez le fichier excel dans lequel vous devez voir le code VBA. Le mot de passe du code VBA sera simplement 1234 (comme dans l'exemple que je vous montre ici).

si vous avez besoin de travailler avec Excel 2007 ou 2010, il ya d'autres réponses ci-dessous qui pourraient aider, en particulier ces: 1 , 2 , 3 .

MODIFIER Feb 2015: pour une autre méthode qui a l'air très prometteur, regardez cette nouvelle réponse par Đức Thanh Nguyen.

202
répondu Colin Pickard 2017-05-23 11:55:00

il y a 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. Sauvegarde le fichier xls
  2. ouvrir le fichier dans un éditeur hexadécimal et localiser le DPB=... part
  3. changer la chaîne DPB=... en DPx=...
  4. ouvrir le fichier XLS en 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 en quelque chose que vous pouvez vous rappeler
  8. Enregistrer le fichier xls*
  9. fermer et rouvrir le document et travailler votre VBA la magie!

*NOTE: assurez-vous que vous avez changé le mot de passe en une nouvelle valeur, sinon la prochaine fois que vous ouvrez le tableur Excel signalera des erreurs (erreur inattendue), puis lorsque vous accédez à la liste des modules VBA vous verrez maintenant les noms des modules source mais vous recevrez une autre erreur lorsque vous essayez d'ouvrir des formulaires/code/etc. Pour y remédier, retournez aux propriétés du projet VBA et définissez le mot de passe à une nouvelle valeur. Sauvegarder et rouvrir le document Excel et tu devrais être prêt à partir!

156
répondu Pieter 2017-04-03 16:01:48

j'ai construit sur la réponse fantastique de đփc Thanh Nguyփn pour permettre à cette méthode de fonctionner avec des versions 64 bits D'Excel. J'exécute Excel 2010 64-Bit sur Windows 64-Bit 7.

  1. ouvrir le fichier(s) qui contient vos projets VBA verrouillés.
  2. créer un nouveau fichier xlsm et stocker ce code dans Module1

    Option Explicit
    
    Private Const PAGE_EXECUTE_READWRITE = &H40
    
    Private Declare PtrSafe Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
    (Destination As LongPtr, Source As LongPtr, ByVal Length As LongPtr)
    
    Private Declare PtrSafe Function VirtualProtect Lib "kernel32" (lpAddress As LongPtr, _
    ByVal dwSize As LongPtr, ByVal flNewProtect As LongPtr, lpflOldProtect As LongPtr) As LongPtr
    
    Private Declare PtrSafe Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As LongPtr
    
    Private Declare PtrSafe Function GetProcAddress Lib "kernel32" (ByVal hModule As LongPtr, _
    ByVal lpProcName As String) As LongPtr
    
    Private Declare PtrSafe Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As LongPtr, _
    ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, _
    ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Integer
    
    Dim HookBytes(0 To 5) As Byte
    Dim OriginBytes(0 To 5) As Byte
    Dim pFunc As LongPtr
    Dim Flag As Boolean
    
    Private Function GetPtr(ByVal Value As LongPtr) As LongPtr
        GetPtr = Value
    End Function
    
    Public Sub RecoverBytes()
        If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6
    End Sub
    
    Public Function Hook() As Boolean
        Dim TmpBytes(0 To 5) As Byte
        Dim p As LongPtr
        Dim OriginProtect As LongPtr
    
        Hook = False
    
        pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")
    
    
        If VirtualProtect(ByVal pFunc, 6, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then
    
            MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6
            If TmpBytes(0) <> &H68 Then
    
                MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6
    
                p = GetPtr(AddressOf MyDialogBoxParam)
    
                HookBytes(0) = &H68
                MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4
                HookBytes(5) = &HC3
    
                MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6
                Flag = True
                Hook = True
            End If
        End If
    End Function
    
    Private Function MyDialogBoxParam(ByVal hInstance As LongPtr, _
    ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, _
    ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Integer
    
        If pTemplateName = 4070 Then
            MyDialogBoxParam = 1
        Else
            RecoverBytes
            MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
                       hWndParent, lpDialogFunc, dwInitParam)
            Hook
        End If
    End Function
    
  3. coller ce code dans Module2 et l'exécuter

    Sub unprotected()
        If Hook Then
            MsgBox "VBA Project is unprotected!", vbInformation, "*****"
        End If
    End Sub
    

DISCLAIMER cela a fonctionné pour moi et je l'ai documenté ici dans l'espoir qu'il aidera quelqu'un. je n'ai pas entièrement testé . Assurez-vous de sauvegarder tous les fichiers avant de procéder à cette option.

129
répondu kaybee99 2015-06-25 15:15:27

Colin Pickard a une excellente réponse, mais il y a une 'attention' avec cela. Il y a des cas (je n'ai pas encore trouvé la cause) où la longueur totale du "CMG=........GC=...."entrée dans le fichier est différente à partir d'un fichier excel à l'autre. Dans certains cas, cette entrée sera 137 octets, et dans d'autres, il sera 143 octets. La longueur de 137 octets est l'Impair, et si cela se produit lorsque vous créez votre fichier avec le mot de passe '1234', il suffit de créer un autre fichier, et il devrait passez à 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.

MODIFIER

ceci n'est pas valide pour les fichiers Excel 2007/2010. Norme. le format de fichier xlsx est en fait A.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 Excel non protégé 2007, vous pouvez simplement changer le .extension xlsx .zip, puis ouvrir le fichier zip et regarder à travers toutes les données xml. C'est très simple.

cependant, lorsque vous protégez par mot de passe un fichier Excel 2007, la totalité .zip.( XLSX) est en fait crypté en utilisant le cryptage RSA. Il n'est plus possible de changer l'extension en .zip et parcourir le contenu du fichier.

59
répondu Stewbob 2012-02-16 19:04:15

pour un type de fichier .xlsm ou .dotm vous devez le faire d'une manière légèrement différente.

  1. changer l'extension du fichier .xlsm en .zip .
  2. ouvrir le .fichier zip (avec WinZip ou WinRar etc) et allez dans le dossier xl.
  3. extraire le fichier vbaProject.bin et l'ouvrir dans un éditeur Hex (j'utilise HxD , son complètement libre et léger.)
  4. Rechercher DPB et remplacer par DPx et enregistrez le fichier.
  5. remplacer l'ancien fichier vbaProject.bin par ce nouveau fichier on dans le fichier zippé.
  6. modifier l'extension du fichier retour à .xlsm .
  7. ouvrir cahier d'exercices passer les messages d'avertissement.
  8. ouvrir Visual Basic inside Excel.
  9. allez à Outils > Propriétés VBAProject > onglet Protection.
  10. mettez un nouveau mot de passe et sauvegardez le fichier .xlsm .
  11. fermez et ouvrez et votre nouveau mot de passe fonctionnera.
41
répondu Matt 2018-06-15 07:47:19

il vaut la peine de souligner que si vous avez un fichier Excel 2007 (xlsm), alors vous pouvez simplement le sauvegarder comme un fichier Excel 2003 (xls) et utiliser les méthodes décrites dans d'autres réponses.

31
répondu Andy 2011-03-25 01:29:54

avez - vous essayé simplement de les ouvrir OpenOffice.org Je ne sais pas.

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 donc permis un accès direct à presque tout.

c'était il y a longtemps, donc si ce n'était pas juste un coup de chance de ma part, ça aurait aussi pu être corrigé.

12
répondu greg 2010-04-12 15:50:42

Pour Excel à partir de 2007 vous avez besoin de changer votre extension de fichier .zip Dans l'archive il y a un sous-dossier xl, vous y trouverez vbaProject.bac. Suivez l'étape ci-dessus avec vbaProject.bin enregistrer dans l'archive. Modifier votre extension et voilà! (c'est-à-dire suivre les étapes ci-dessus)

10
répondu user3761175 2014-06-20 18:11:07

Colin Pickard est en grande partie correct, mais ne confondez pas la protection "password to open" pour l'ensemble du fichier avec la protection VBA password, qui est complètement différente de la première et est la même pour Office 2003 et 2007 (pour Office 2007, renommer le fichier en .fermez et cherchez le vbaProject.bin dans le zip). Et que techniquement la bonne façon d'éditer le fichier est d'utiliser un visualiseur de documents composé OLE comme CFX pour ouvrir le flux correct. Bien sûr, si vous êtes juste en remplaçant les 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

7
répondu Yuhong Bao 2010-11-30 00:55:56

Dans le cas où votre bloc de 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', garnissez vos chaînes hexadécimales de zéros pour atteindre la bonne longueur.

p.ex.

CMG="xxxxxx"\r\nDPB="xxxxxxxx"\r\nGC="xxxxxxxxxx"

dans le fichier des mots de passe inconnus, devrait être défini à

CMG="XXXX00"\r\nDPB="XXXXX000"\r\nGC="XXXXXX0000" pour préserver la longueur du fichier.

j'ai aussi eu ce travail avec. XLA (format 97/2003) les fichiers dans office 2007.

7
répondu Spangen 2011-04-06 14:21:38

VBA project Passwords on Access, Excel, Powerpoint, or Word documents ( 2007, 2010, 2013 or 2016 versions avec extensions .ACCDB .XLSM .XLTM .DOCM .DOTM .POTM .PPSM ) peut être facilement supprimé .

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 Hex de base (comme XVI32 ) pour "casser" le mot de passe existant, ce qui" confond " le Bureau de sorte qu'il invite à un nouveau mot de passe la prochaine fois que le fichier est ouvert.

un résumé des étapes:

  • renommer le fichier de sorte qu'il ait une extension .ZIP .
  • ouvrez le ZIP et allez dans le dossier XL .
  • extraire vbaProject.bin et l'ouvrir avec un éditeur hexadécimal
  • "Rechercher & Remplacer" à "remplacer tout" changement DPB à DPX .
  • Save modifications, replacer le fichier .bin dans le zip, le retourner dans son extension normale et ouvrir le fichier comme d'habitude.
  • ALT+F11 pour entrer dans L'éditeur VB et droit-cliquez dans L'Explorateur de projet pour choisir VBA Project Properties .
  • sur l'onglet Protection , définissez un nouveau mot de passe.
  • cliquez sur OK , fermez le fichier, ré-ouvrez-le, appuyez sur ALT+F11.
  • entrez le nouveau mot de passe que vous avez défini.

à ce point vous pouvez supprimer le mot de passe complètement si vous choisissez.

des instructions Complètes avec une étape par étape vidéo que j'ai faite "le chemin du retour lorsque" sont sur YouTube ici .

il est un peu choquant que cette solution ait été disponible depuis des années, et Microsoft n'a pas réglé le problème.


La morale de l'histoire?

Microsoft Office Projet VBA les mots de passe sont de ne pas être invoquée de sécurité de tout "1519160920 des" informations sensibles . Si la sécurité est importante, utilisez un logiciel de cryptage tiers.

6
répondu ashleedawg 2018-02-10 14:57:49

si le fichier est un fichier zip valide (les premiers octets sont 50 4B -- utilisé dans des formats comme .xlsm ), alors décompressez le fichier et recherchez le sous-Fichier xl/vbaProject.bin . Il s'agit d'un fichier CFB tout comme les fichiers .xls . Suivez les instructions pour le format XLS (appliqué au sous-fichier) et ensuite juste zip le contenu.

Pour le format XLS, vous pouvez suivre certains des autres méthodes dans ce post. Je préfère personnellement chercher le DPB= bloquer et remplacer le texte

CMG="..."
DPB="..."
GC="..."

avec des espaces vides. Cela permet d'éviter les problèmes liés à la taille des contenants de la BFC.

5
répondu SheetJS 2013-10-08 02:32:30

Tom-j'ai fait une erreur d'écolier d'abord comme je n'ai pas regardé la taille octet et à la place j'ai copié et collé à partir du "CMG" mis en place à l'entrée suivante. Il s'agissait de deux tailles de texte différentes entre les deux fichiers, cependant, et j'ai perdu le projet VBA tout comme Stewbob averti.

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 lit 8F (hex pour 143) et de même lors du collage dans le fichier verrouillé-I il a terminé avec deux fois le nombre de "..."à la fin de la pâte, qui semblait étrange et presque contre nature, mais cela a fonctionné.

Je ne sais pas si c'est crucial, mais je me suis assuré de fermer à la fois l'éditeur hex et excel avant de rouvrir le fichier dans Excel. J'ai ensuite dû passer par les menus pour ouvrir L'éditeur VB, entrer les propriétés VBProject et entrer le "nouveau" mot de passe pour déverrouiller le code.

j'espère que cela aidera.

3
répondu Scoob 2010-04-12 15:35:20

ElcomSoft makes Advanced Office Password Breaker et Advanced Office Password Recovery produits qui peuvent s'appliquer dans ce cas, aussi longtemps que le document a été créé dans Office 2007 ou avant.

3
répondu Charles Duffy 2010-04-12 15:44:18

j'ai essayé quelques solutions ci-dessus et aucun d'entre eux travaille pour moi (excel 2007 fichier xlsm). Puis j'ai trouvé une autre solution qui récupère le mot de passe, pas seulement le craquer.

insérez ce code dans le module, lancez-le et donnez-lui du temps. Il récupérera votre mot de passe par la force brute.

Sub PasswordBreaker()

'Breaks worksheet password protection.

Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If ActiveSheet.ProtectContents = False Then
MsgBox "One usable password is " & Chr(i) & Chr(j) & _
Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
End Sub
2
répondu Luboš Suk 2015-11-20 11:52:39

mon outil, VbaDiff , lit VBA directement à partir du fichier, de sorte que vous pouvez l'utiliser pour récupérer le code VBA protégé à partir de la plupart des documents de bureau sans recourir à un éditeur hexadécimal.

2
répondu Chris Spicer 2016-05-24 13:30:04

la protection est une simple comparaison de texte dans Excel. Load Excel dans votre débogueur préféré ( Ollydbg étant mon outil de choix), trouver le code qui fait la comparaison et le corriger pour toujours retourner true, cela devrait vous permettre d'accéder aux macros.

1
répondu Treb 2009-06-22 10:54:40

l'extension de votre fichier excel change en xml. Et de l'ouvrir dans le bloc-notes. texte de mot de passe trouver dans le fichier xml.

vous voyez comme en dessous de la ligne;

Sheets("Sheet1").Unprotect Password:="blabla"

(désolé pour mon mauvais anglais)

0
répondu Developer33 2017-06-06 11:40:29

pour Excel 2016 64-bit sur une machine Windows 10, j'ai utilisé un éditeur hex pour pouvoir changer le mot de passe d'un XLA protégé (Je ne l'ai pas testé pour d'autres extensions). astuce: créez une sauvegarde avant de faire cela.

Les étapes que j'ai pris:

  1. Ouvrir La vba dans l'éditeur hex (par exemple XVI)
  2. recherche sur ce DPB
  3. changer DPB à quelque chose d'autre, comme DPX
  4. arrêtez!
  5. rouvrez le .xla, un message d'erreur apparaîtra, continue.
  6. vous pouvez maintenant changer le mot de passe du .xla en ouvrant les propriétés et allez à l'onglet mot de passe.

j'espère que cela a aidé certains d'entre vous!

0
répondu Edwin van der V 2018-01-29 09:09:30

Si vous travaillez dans Java vous pouvez essayer VBAMacroExtractor . Après avoir extrait les scripts VBA de .xlsm j'ai trouvé le mot de passe en clair.

0
répondu Grez 2018-04-08 13:37:56