Tôi đã được những hiểu biết update một vài macro Excel 2003, nhưng các dự án công trình VBA được bảo đảm an toàn bởi mật khẩu cùng chắc là thiếu tư liệu ... không có ai biết mật khẩu.

Bạn đang xem: Phá pass vba project trong excel

Có giải pháp như thế nào nhằm xóa hoặc bẻ khóa mật khẩu vào dự án công trình VBA không?


quý khách hoàn toàn có thể Lưu dưới dạng .xls ráng do .xla nhỏng các ví dụ vào link của chúng ta khuyến cáo không? Không chắc chắn ví như điều này đã tạo nên một sự biệt lập.
Fandango68 Câu hỏi này đã có thảo luận các thời gian trước bên trên meta . TLDR: Rất các (hầu hết?) Các câu hỏi về SO hoàn toàn có thể bị sử dụng quá bởi vì những tác nhân xấu, nhưng lại trừ Khi bao gồm minh chứng ví dụ về bài toán có tác dụng sai, Shop chúng tôi nhận định rằng đức tin xuất sắc. Có không ít lý do hòa hợp pháp cùng đạo đức nghề nghiệp để bẻ khóa password VBA. Dường như, bàn luận về các điểm yếu kém của những khối hệ thống hiện thời ở đầu cuối góp phần bảo mật giỏi hơn sau này và ko khuyến nghị phần nhiều fan khỏi mù quáng nhờ vào những khối hệ thống không bình yên bây giờ.
— jmbpiano

Câu trả lời:


701

quý khách hoàn toàn có thể test VBAphương pháp thẳng này không thử dùng sửa đổi HEX. Nó đã hoạt động cho hầu như tệp (* .xls, * .xlsm, * .xlam ...).

Đã nghiên cứu và chuyển động trên:

Excel 2007 Excel 2010 Excel 2013 - phiên phiên bản 32 bit Excel năm 2016 - phiên bản 32 bit

Tìm tìm phiên phiên bản 64 bit? Xem câu vấn đáp này

Làm vắt nào nó hoạt động

Tôi đã nỗ lực hết sức để lý giải cách nó vận động - xin sung sướng xin lỗi tiếng Anh của mình.

Xem thêm: Cách Tạo Dấu Chấm Chấm Trong Excel 2010, Viện Sốt Rét, Cách Tạo Dòng Chấm Chấm Trong Word Siêu Dễ

VBE đã Hotline một công dụng hệ thống để sản xuất vỏ hộp thoại password.Nếu người dùng nhập đúng mật khẩu cùng nhấp vào OK, chức năng này đang trả về 1. Nếu người tiêu dùng nhập sai mật khẩu hoặc nhấp vào Hủy, tính năng này trả về 0.Sau Khi hộp thoại được đóng góp, VBE soát sổ giá trị trả về của hàm hệ thống nếu quý hiếm này là một, VBE đang "nghĩ" rằng mật khẩu đăng nhập là đúng, cho nên dự án công trình VBA bị khóa sẽ được mnghỉ ngơi. Mã dưới đây hoán đổi bộ nhớ của công dụng ban sơ được áp dụng để hiển thị hộp thoại password với chức năng vị người tiêu dùng xác minh đang luôn luôn trả về 1 Lúc được gọi.

Sử dụng mã

Vui lòng sao giữ các tập tin của chúng ta đầu tiên!

Mở (các) tệp tất cả chứa Dự án VBA bị khóa của bạn

Tạo một tệp xlsm mới cùng tàng trữ mã này trong Module1

code credited khổng lồ Siwtom (nick name), a Vietnamese developer

Option ExplicitPrivate Const PAGE_EXECUTE_READWRITE = &H40Private 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 LongPrivate Declare Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As LongPrivate Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, _ ByVal lpProcName As String) As LongPrivate 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 IntegerDyên HookBytes(0 To 5) As ByteDyên ổn OriginBytes(0 To 5) As ByteDyên pFunc As LongDyên Flag As BooleanPrivate Function GetPtr(ByVal Value As Long) As Long GetPtr = ValueEnd FunctionPublic Sub RecoverBytes() If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6End SubPublic Function Hook() As Boolean Dyên TmpBytes(0 To 5) As Byte Dim p As Long Dyên ổn 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 IfEnd FunctionPrivate 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 IfEnd FunctionDán mã này theo mã bên trên vào Module1 với chạy nó

Sub unprotected() If Hook Then MsgBox "VBA Project is unprotected!", vbInformation, "*****" End IfEnd SubQuay quay lại Dự án VBA của công ty với tận hưởng.