0% found this document useful (0 votes)
119 views16 pages

Is There A Way To Crack The Password On An Excel VBA Project - Stack Overflow

Uploaded by

phuockcn
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
119 views16 pages

Is There A Way To Crack The Password On An Excel VBA Project - Stack Overflow

Uploaded by

phuockcn
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 16

8/13/2020 Is there a way to crack the password on an Excel VBA Project?

- Stack Overflow

Is there a way to crack the password on an Excel VBA Project?


Asked 11 years, 1 month ago Active 1 year ago Viewed 1.2m times

I've been asked to update some Excel 2003 macros, but the VBA projects are password
protected, and it seems there's a lack of documentation... no-one knows the passwords.
492 Is there a way of removing or cracking the password on a VBA project?

excel vba passwords

495
edited Dec 16 '18 at 9:41 asked Jun 22 '09 at 10:37
user10791298 Jonathan Sayce
8,253 4 33 46

Are you able to Save-As an .xls instead of an .xla as the examples in your link suggest? Not sure if this
would make a difference. – B Hart Oct 29 '13 at 22:27

4 good to known : xlsb is robust against password cracking tricks – Qbik Nov 16 '15 at 10:38

20 @Fandango68 This question was discussed years ago on meta. TLDR: Lots (most?) of the questions
on SO could be abused by bad actors, but unless there is clear evidence of wrongdoing, we assume
good faith. There are plenty of legitimately legal and ethical reasons to crack a VBA password.
Additionally, discussing weaknesses of the current systems ultimately contributes to better security in
the future and discourages people from blindly relying on insecure systems now. – jmbpiano Jan 3 '18
at 15:26

22 Answers Active Oldest Votes

You can try this direct VBA approach which doesn't require HEX editing. It will work for any
files (*.xls, *.xlsm, *.xlam ...).
708 Tested and works on:

Excel 2007
Excel 2010
Excel 2013 - 32 bit version
Excel 2016 - 32 bit version

Looking for 64 bit version? See this answer

How it works

I will try my best to explain how it works - please excuse my English.

1. The VBE will call a system function to create the password dialog box.
2. If user enters the right password and click OK, this function returns 1. If user enters the
wrong password or click Cancel, this function returns 0.
By using our3.site,
After
youthe dialog boxthat
acknowledge is closed,
you havethe VBE
read andchecks the returned
understand our Cookievalue
Policyof the system
, Privacy Policyfunction
, and
our Terms of Service.

https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C … 1/16


8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow

4. if this value is 1, the VBE will "think" that the password is right, hence the locked VBA
project will be opened.
5. The code below swaps the memory of the original function used to display the password
dialog with a user defined function that will always return 1 when being called.

Using the code

Please backup your files first!

1. Open the file(s) that contain your locked VBA Projects


2. Create a new xlsm file and store this code in 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
By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and
our Terms of Service. MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6

https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C … 2/16


8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow

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. Paste this code under the above code in Module1 and run it

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

4. Come back to your VBA Projects and enjoy.

edited Jul 26 '19 at 19:03 answered Dec 16 '14 at 15:32


ejderuby Đức Thanh Nguyễn
752 5 20 7,819 2 14 18

4 @Chris you are absolutely right. Because the Windows API functions are defined for win 32 in this
code. – Đức Thanh Nguyễn Feb 25 '15 at 21:21

9 Some explanation would be nice of how this is working. – Dennis G Mar 21 '15 at 12:53

21 Now the only question left (after seeing this impressive method works perfectly), is how the hell can I
make my VBA project protected stronger to prevent others from using this hack on it :) – EranG Jan 25
'16 at 12:01

6 This code works perfectly in unlocking the VBA code although each time I have used this it prevents
me from re-protecting the project with a different password, has anyone else had this problem? –
Matthew Bond Nov 21 '16 at 12:49

2 I found it corrupts the VBA project in the Excel file so I had to export all of the modules/classes, then
save the file as xlsx (non-macro), then CLOSE the file (stupid Excel), then re-open, then import
modules and copy code from class files. At this point, I could save file as xlsm with my own password
on the VBA project. – B H Jan 10 '18 at 16:25

Yes there is, as long as you are using a .xls format spreadsheet (the default for Excel up to
By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and
2003). For Excel 2007 onwards, the default is .xlsx , which is a fairly secure format, and this
our Termsmethod
of Service. not work.
will
https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C … 3/16
8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow

217 As Treb says, it's a simple comparison. One method is to simply swap out the password entry
in the file using a hex editor (see Hex editors for Windows). Step by step example:

1. Create a new simple excel file.


2. In the VBA part, set a simple password (say - 1234).
3. Save the file and exit. Then check the file size - see Stewbob's gotcha
4. Open the file you just created with a hex editor.
5. Copy the lines starting with the following keys:

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

6. FIRST BACKUP the excel file you don't know the VBA password for, then open it with
your hex editor, and paste the above copied lines from the dummy file.
7. Save the excel file and exit.
8. Now, open the excel file you need to see the VBA code in. The password for the VBA
code will simply be 1234 (as in the example I'm showing here).

If you need to work with Excel 2007 or 2010, there are some other answers below which
might help, particularly these: 1, 2, 3.

EDIT Feb 2015: for another method that looks very promising, look at this new answer by
Đức Thanh Nguyễn.

edited May 23 '17 at 11:55 answered Jun 22 '09 at 10:58


Community ♦ Colin Pickard
1 1 42k 11 88 141

What if there are no lines that start with CMG=...? – systemovich Sep 2 '09 at 13:03

1 In the blank excel file, or the locked one? Check the file size of the blank file. If its the locked file, make
sure your backup is safe, then try changing just the other two lines. You sure it's encrypted file? –
Colin Pickard Sep 2 '09 at 13:43

6 Excel 2007 password protection (and file format) is radically different than Excel 2003. I included some
specifics about it in my answer below. In my opinion, the password protected option on an Excel 2007
file is the first time in Microsoft Office history that they have produced a reasonably secure file. –
Stewbob Sep 10 '10 at 17:42

1 I wasn't able to set vba password on an excel 2016 new file. Could someone simply share the HEX to
replace with 1234? Or can it change from machine to machine? – Mescalito Feb 28 '16 at 23:58

1 This approach worked for me on a .xlsm file. I saved it as a .xls, did this, and then converted it back to
.xlsm. It should be noted you can safely increase the length of the file if the new CMG... string is
longer than the original. – Drew Chapin May 10 '16 at 16:33

I've built upon Đức Thanh Nguyễn's fantastic answer to allow this method to work with 64-bit
versions of Excel. I'm running Excel 2010 64-Bit on 64-Bit Windows 7.
174 1. Open the file(s) that contain your locked VBA Projects.
2. Create a new xlsm file and store this code in Module1
By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and
Option Explicit
our Terms of Service.

https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C … 4/16


8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow
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
By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and
our Terms of ServiceIf
. pTemplateName = 4070 Then

https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C … 5/16


8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow
MyDialogBoxParam = 1
Else
RecoverBytes
MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
hWndParent, lpDialogFunc, dwInitParam)
Hook
End If
End Function

3. Paste this code in Module2 and run it

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

DISCLAIMER This worked for me and I have documented it here in the hope it will help
someone out. I have not fully tested it. Please be sure to save all open files before proceeding
with this option.

edited Jun 25 '15 at 15:15 answered Jun 23 '15 at 14:32


kaybee99
3,492 2 29 33

1 I am not sure why but when I run this on Excel for 365 MSP 64-bit excel crashes, it closes the files and
when I restart it, the password is still there. – eborbath Apr 24 at 10:35

This cannot be done in excel anymore as the options in the context menu is grayed out so you cannot
create the module. – thanos.a Apr 27 at 22:08

There is another (somewhat easier) solution, without the size problems. I used this approach
today (on a 2003 XLS file, using Excel 2007) and was successful.
170 1. Backup the xls file
2. Open the file in a HEX editor and locate the DPB=... part
3. Change the DPB=... string to DPx=...

4. Open the xls file in Excel


5. Open the VBA editor ( ALT + F11 )
6. the magic: Excel discovers an invalid key (DPx) and asks whether you want to continue
loading the project (basically ignoring the protection)
7. You will be able to overwrite the password, so change it to something you can remember
8. Save the xls file*
9. Close and reopen the document and work your VBA magic!

*NOTE: Be sure that you have changed the password to a new value, otherwise the next time
you open the spreadsheet Excel will report errors (Unexpected Error), then when you access
the list of VBA modules you will now see the names of the source modules but receive
another error when trying to open forms/code/etc. To remedy this, go back to the VBA Project
Properties and set the password to a new value. Save and re-open the Excel document and
you should be good to go!
By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and
our Terms of Service. edited Apr 3 '17 at 16:01 answered Nov 5 '10 at 15:25
https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C … 6/16
8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow

MD XF Pieter
6,702 6 30 59 2,033 1 12 5

3 Unfortunately, this didn't work for me with Excel for Mac 2011 v14.2.5. I got the option to repair the file,
not to reset the password, and the effect was losing all the VBA scripts. – Joe Carroll Dec 15 '12 at
10:49

Perfect solution - I did this with a 2003 file using HxD Hex Editor – Chris W Feb 4 '13 at 14:26

4 I just tried it (.xls, Excel 2007) and it did not work. Result is: The Modules are visible, code does indeed
seem to work, but when opening a module, it says unexpected error (40230). – KekuSemau Jun 22 '13
at 17:07

2 Same error here (Excel 2010) - but then I realised I'd skipped the 'set a new password and
save/reopen' (steps 7-9) from Pieter. – Owen B Aug 15 '13 at 11:08

+1 This method also worked on our poorly developed access (.mdb) file! Now we can make that thing
better, thanks for this! – E-r Gabriel Doronila Jun 6 '14 at 5:34

Colin Pickard has an excellent answer, but there is one 'watch out' with this. There are
instances (I haven't figured out the cause yet) where the total length of the
65 "CMG=........GC=...." entry in the file is different from one excel file to the next. In some cases,
this entry will be 137 bytes, and in others it will be 143 bytes. The 137 byte length is the odd
one, and if this happens when you create your file with the '1234' password, just create
another file, and it should jump to the 143 byte length.

If you try to paste the wrong number of bytes into the file, you will lose your VBA project when
you try to open the file with Excel.

EDIT

This is not valid for Excel 2007/2010 files. The standard .xlsx file format is actually a .zip file
containing numerous sub-folders with the formatting, layout, content, etc, stored as xml data.
For an unprotected Excel 2007 file, you can just change the .xlsx extension to .zip, then open
the zip file and look through all the xml data. It's very straightforward.

However, when you password protect an Excel 2007 file, the entire .zip (.xlsx) file is actually
encrypted using RSA encryption. It is no longer possible to change the extension to .zip and
browse the file contents.

edited Feb 16 '12 at 19:04 answered Jun 24 '09 at 14:36


Stewbob
16.1k 8 59 100

Then you need to use standard zip hacking tools. Its no longer a "how do i back an excel file" problem.
– Anonymous Type Sep 27 '10 at 22:37

3 @Anonymous Type: I think a zip cracking tool won't help. As I understand Stewbob, it's not the file
entries in the zip file that are encrypted, but the whole zip file itself, which should include the header
and the central directory. – Treb Sep 28 '10 at 6:58

2 Just curious: how could it be RSA when I just enter one password (symmetric)? – kizzx2 Feb 2 '11 at
18:58

How about when the file you want to get into has the shorter keys? Just keep creating vba docs until
you get one that has 137? – onlynone Oct 5 '15 at 19:43
By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and
1 Are you sure that the entire zipfile is encrypted when you lock the VBA project? I can still open the
our Terms of Service . see the file structure.... And subfolder xl\ contains the file vbaProject.bin which has the
zipfile and
https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C … 7/16
8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow

familiar "CMG=... GC=" hashing block. – Nigel Heffernan Oct 19 '17 at 15:10

For a .xlsm or .dotm file type you need to do it a slightly different way.

1. Change the extension of the .xlsm file to .zip .


64
2. Open the .zip file (with WinZip or WinRar etc) and go to the xl folder.
3. Extract the vbaProject.bin file and open it in a Hex Editor (I use HxD, its completely free
and lightweight.)
4. Search for DPB and replace with DPx and save the file.
5. Replace the old vbaProject.bin file with this new on in the zipped file.
6. Change the file extension back to .xlsm .
7. Open workbook skip through the warning messages.
8. Open up Visual Basic inside Excel.
9. Go to Tools > VBAProject Properties > Protection Tab.
10. Put in a new password and save the .xlsm file.
11. Close and re open and your new password will work.

edited Jun 15 '18 at 7:47 answered Jun 26 '15 at 12:21


Matt
12.7k 23 79 110

8 Worked in Excel 2016, Windows 10 64bit. (xlsm files) – LimaNightHawk Oct 11 '16 at 13:16

3 Worked in Word 2016, Windows 10 64bit (dotm files) – NBajanca Sep 8 '17 at 13:11

7 Great solution, worked for me in Excel 2013 64 bit. You may skip changing of file extensions to .zip if
you have 7-Zip installed. In this case, you can just right-click on the .xlsm file and choose "7-Zip ->
Open Archive" – nkatsar Jun 20 '18 at 9:31

works with Word 2013, win7x64. (It's very sad, being so easily tricked to believe the code is somewhat
secure). – Berry Tsakala Oct 18 '18 at 17:42

1 @ThierryMichel Combination of previous solutions and trial and error! – Matt Nov 15 '18 at 9:36

It's worth pointing out that if you have an Excel 2007 (xlsm) file, then you can simply save it as
an Excel 2003 (xls) file and use the methods outlined in other answers.
35
answered Mar 25 '11 at 1:29
Andy
395 3 3

4 that is not true, I've worked with files for which conversion to xls/xla from xlsm was impossible, Excel
2007 and 2010 crashed each time, I've tried various instances, from one erros message - Kod wyjątku:
c0000005 Przesunięcie wyjątku: 005d211d – Qbik Jun 17 '14 at 7:02

4YES you can do it. I've done it many times. If there is something on sheets which is necessary and
what is not transferred to the older version I do this: 1. convert .xlsm to .xls 2. crack the code of .xls
3. convert .xlsm to .xlsx 4. Put the code from modules in .xls to .xlsx and save that as .xlsm – ZygD
By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and
Oct 1 '15 at 18:45
our Terms of Service.

https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C … 8/16


8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow

It works after converting xlsm to xls as in the answer. – Purus Feb 3 '17 at 7:08

With my turn, this is built upon kaybee99's excellent answer which is built upon Đức Thanh
Nguyễn's fantastic answer to allow this method to work with both x86 and amd64 versions of
34 Office.

An overview of what is changed, we avoid push/ret which is limited to 32bit addresses and
replace it with mov/jmp reg.

Tested and works on

Word/Excel 2016 - 32 bit version.


Word/Excel 2016 - 64 bit version.

how it works

1. Open the file(s) that contain your locked VBA Projects.


2. Create a new file with the same type as the above and store this code in 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 11) As Byte


Dim OriginBytes(0 To 11) 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)), 12
End Sub

Public Function Hook() As Boolean


Dim TmpBytes(0 To 11) As Byte
Dim p As LongPtr, osi As Byte
Dim OriginProtect As LongPtr
By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and
our Terms of ServiceHook
. = False

https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C … 9/16


8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow
#If Win64 Then
osi = 1
#Else
osi = 0
#End If

pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")

If VirtualProtect(ByVal pFunc, 12, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then

MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, osi+1


If TmpBytes(osi) <> &HB8 Then

MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 12

p = GetPtr(AddressOf MyDialogBoxParam)

If osi Then HookBytes(0) = &H48


HookBytes(osi) = &HB8
osi = osi + 1
MoveMemory ByVal VarPtr(HookBytes(osi)), ByVal VarPtr(p), 4 * osi
HookBytes(osi + 4 * osi) = &HFF
HookBytes(osi + 4 * osi + 1) = &HE0

MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 12


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. Paste this code in Module2 and run it

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

edited Nov 18 '18 at 11:10 answered Nov 18 '18 at 8:03


VePe
501 3 6

3 Perfect! Work with Windows Server 2016, Excel 2016 32 bit – Zin Min May 30 '19 at 10:26

This worked on a .xlsm file on Excel Office 365. Thank you! – Ryan James Oct 21 '19 at 19:04

Still works in 2019, Office 365 64bits latests builds, awesome guys! – XavierAM Nov 6 '19 at 13:58

By using our site,


Thanksyoufor
acknowledge
the updatedthat you
code, havefacing
I was read crashes
and understand ourprevious
running the Cookie Policy , Privacy
version (64-bit),Policy, and
but all good
with your
our Terms of Service . version – emjaySX Jan 20 at 23:21

https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C… 10/16


8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow

Awesome... Worked Perfectly – Mahhdy Mar 27 at 15:13

Have you tried simply opening them in OpenOffice.org?

I had a similar problem some time ago and found that Excel and Calc didn't understand each
17 other's encryption, and so allowed direct access to just about everything.

This was a while ago, so if that wasn't just a fluke on my part it also may have been patched.

answered Apr 12 '10 at 15:50


greg
229 3 2

In the event that your block of CMG="XXXX"\r\nDPB="XXXXX"\r\nGC="XXXXXX" in your 'known


password' file is shorter than the existing block in the 'unknown password' file, pad your hex
15 strings with trailing zeros to reach the correct length.

e.g.

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

in the unknown password file, should be set to

CMG="XXXX00"\r\nDPB="XXXXX000"\r\nGC="XXXXXX0000" to preserve file length.

I have also had this working with .XLA (97/2003 format) files in office 2007.

answered Apr 6 '11 at 14:21


Spangen
3,083 5 27 31

1 This works, but as I've recently discovered (commented above) you can also simply add null characters
after the final close quote in the GC="..." block until you hit the same length. – tobriand Jul 20 '13 at
11:21

For Excel 2007 onward you need to change your file extension to .zip In the archive there is a
subfolder xl, in there you will find vbaProject.bin. Follow the step above with vbaProject.bin
13 then save it back in the archive. Modify back your extension and voilà! (meaning follow steps
above)

answered Jun 20 '14 at 18:11


user3761175
139 1 2

1 I can confirm this works for .xlam files with Excel 2010 as well. +1! – Gimelist Oct 27 '14 at 14:17

VBA Project Passwords on Access, Excel, Powerpoint, or Word documents ( 2007, 2010, 2013
or 2016 versions with extensions .ACCDB .XLSM .XLTM .DOCM .DOTM .POTM .PPSM ) can be easily
By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and
12 removed.
our Terms of Service.

https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C… 11/16


8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow

It's simply a matter of changing the filename extension to .ZIP , unzipping the file, and using
any basic Hex Editor (like XVI32) to "break" the existing password, which "confuses" Office so
it prompts for a new password next time the file is opened.

A summary of the steps:


rename the file so it has a .ZIP extension.
open the ZIP and go to the XL folder.
extract vbaProject.bin and open it with a Hex Editor
"Search & Replace" to "replace all" changing DPB to DPX .
Save changes, place the .bin file back into the zip, return it to it's normal extension and
open the file like normal.
ALT+F11 to enter the VB Editor and right-click in the Project Explorer to choose VBA
Project Properties .

On the Protection tab, Set a new password.


Click OK , Close the file, Re-open it, hit ALT+F11.
Enter the new password that you set.

At this point you can remove the password completely if you choose to.

Complete instructions with a step-by-step video I made "way back when" are on YouTube
here.

It's kind of shocking that this workaround has been out there for years, and Microsoft hasn't
fixed the issue.

The moral of the story?

Microsoft Office VBA Project passwords are not to be relied upon for security of any
sensitive information. If security is important, use third-party encryption software.

answered Feb 10 '18 at 14:57


ashleedawg
15.7k 5 41 71

Colin Pickard is mostly correct, but don't confuse the "password to open" protection for the
entire file with the VBA password protection, which is completely different from the former and
9 is the same for Office 2003 and 2007 (for Office 2007, rename the file to .zip and look for the
vbaProject.bin inside the zip). And that technically the correct way to edit the file is to use a
OLE compound document viewer like CFX to open up the correct stream. Of course, if you
are just replacing bytes, the plain old binary editor may work.

BTW, if you are wondering about the exact format of these fields, they have it documented
now:

http://msdn.microsoft.com/en-us/library/dd926151%28v=office.12%29.aspx

By using our site, you acknowledge that you haveedited


read Nov
and30
understand
'10 at 0:55 our Cookie answered
Policy, Privacy
Nov 30Policy , and
'10 at 0:41
our Terms of Service. Yuhong Bao
https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C… 12/16
8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow

3,523 1 16 17

2 The following link gives details for the XSLM format files. gbanik.blogspot.co.uk/2010/08/… The
solution's the same as the one outlined by Yuhong Bao above, but makes for interesting reading and
includes screenshots. – JohnLBevan Jul 19 '12 at 10:51

If the file is a valid zip file (the first few bytes are 50 4B -- used in formats like .xlsm ), then
unzip the file and look for the subfile xl/vbaProject.bin . This is a CFB file just like the .xls
7 files. Follow the instructions for the XLS format (applied to the subfile) and then just zip the
contents.

For the XLS format, you can follow some of the other methods in this post. I personally prefer
searching for the DPB= block and replacing the text

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

with blank spaces. This obviates CFB container size issues.

answered Oct 8 '13 at 2:32


SheetJS
19.2k 12 54 71

I tried some of solutions above and none of them works for me (excel 2007 xlsm file). Then i
found another solution that even retrieve password, not just crack it.
7 Insert this code into module, run it and give it some time. It will recover your password by
brute force.

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
By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and
our Terms of Service.

https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C… 13/16


8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow
answered Nov 20 '15 at 11:52
Luboš Suk
1,300 10 27

1 Nice! I think you got one downvote because your solution unlocks the worksheet rather than the VBA
module. Nevertheless I found it helpful - so thanks! – PBD10017 Apr 16 '16 at 18:05

1 I have this one it my Personal Workbook. Authors cited Bob McCormick as original author later
modified by Norman Harker and JE McGimpsey 2002. – Charles Byrne Apr 18 '18 at 19:53

ElcomSoft makes Advanced Office Password Breaker and Advanced Office Password
Recovery products which may apply to this case, as long as the document was created in
5 Office 2007 or prior.

answered Apr 12 '10 at 15:44


Charles Duffy
215k 32 265 324

Tom - I made a schoolboy error initially as I didn't watch the byte size and instead I copied and
pasted from the "CMG" set up to the subsequent entry. This was two different text sizes
4 between the two files, though, and I lost the VBA project just as Stewbob warned.

Using HxD, there is a counter tracking how much file you're selecting. Copy starting from
CMG until the counter reads 8F (hex for 143) and likewise when pasting into the locked file - I
ended up with twice the number of "..." at the end of the paste, which looked odd somehow
and felt almost unnatural, but it worked.

I don't know if it is crucial, but I made sure I shut both the hex editor and excel down before
reopening the file in Excel. I then had to go through the menus to open the VB Editor, into
VBProject Properties and entered in the 'new' password to unlock the code.

I hope this helps.

answered Apr 12 '10 at 15:35


Scoob
41 1

My tool, VbaDiff, reads VBA directly from the file, so you can use it to recover protected VBA
code from most office documents without resorting to a hex editor.
4
edited May 24 '16 at 13:30 answered May 3 '11 at 10:02
Chris Spicer
2,024 1 12 20

I have testes this tool and works really well however the free version retrieves the first 53 lines. To
recover my file I had to follow Andy's instructions to unlock the password. Then I opened my xlsm with
VbaDiff in both panes and then I clicked on the sheet with my code. I got it with copy-paste and put it in
my recovered but vba-empty excel file. – thanos.a Apr 27 at 22:40

By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and
our Terms of Service.

https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C… 14/16


8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow

The protection is a simple text comparison in Excel. Load Excel in your favourite debugger
(Ollydbg being my tool of choice), find the code that does the comparison and fix it to always
2 return true, this should let you access the macros.

answered Jun 22 '09 at 10:54


Treb
18.6k 5 49 82

For Excel 2016 64-bit on a Windows 10 machine, I have used a hex editor to be able to
change the password of a protected xla (have not tested this for any other extensions). Tip:
1 create a backup before you do this.

The steps I took:

1. Open the vba in the hex editor (for example XVI)


2. Search on this DPB
3. Change DPB to something else, like DPX
4. Save it!
5. Reopen the .xla, an error message will appear, just continue.
6. You can now change the password of the .xla by opening the properties and go to the
password tab.

I hope this helped some of you!

answered Jan 29 '18 at 9:09


Edwin van der V
218 2 8

I was successful opening an old .xls using this on Windows 10 in the latest version of Excel 365, while
the top answer is unfortunately not working anymore. I downloaded HxD and changed the last letter like
recommended, and skipped the errors. All good now, thanks! – Starnes Student May 19 at 9:53

your excel file's extension change to xml. And open it in notepad. password text find in xml
file.
0 you see like below line;

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

(sorry for my bad english)

edited Jun 6 '17 at 11:40 answered Jun 5 '17 at 10:43


Developer33
47 4

Can you explain how your answer is better than the very good ones already provided? – Noel Widmer
Jun 5 '17 at 11:09

my solution
By using our site, has not a code.
you acknowledge so very
that you havecompact solution
read and other than.
understand – Developer33
our Cookie Jun 6 '17
Policy, Privacy at 11:32
Policy , and
our Terms of Service.
1 This solution you have provided does not work in 2019. – Daniel L. VanDenBosch Aug 7 '19 at 14:27
https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C… 15/16
8/13/2020 Is there a way to crack the password on an Excel VBA Project? - Stack Overflow

If you work in Java you may try VBAMacroExtractor . After extracting VBA scripts from .xlsm
I've found there password in plaintext.
0
answered Apr 8 '18 at 13:37
Grez
103 2 7

Highly active question. Earn 10 reputation in order to answer this question. The reputation requirement
helps protect this question from spam and non-answer activity.

By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and
our Terms of Service.

https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project#:~:text=bin file back into the,it%2C… 16/16

You might also like