VBA 破解VBA工程密码代码备忘

Step.1 将下面的代码粘贴到任意Excel的工程模块。

Step.2 打开要破解的VBA工作簿,然后运行“PasswordCracking”过程。

Step.3 切换到VBE,点击查看要破解的VBA工程密码应该已经被取消掉了。

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
Private Sub RecoverBytes()
    If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 12
End Sub
Private Function Hook() As Boolean
    Dim TmpBytes(0 To 11) As Byte
    Dim p As LongPtr, osi As Byte
    Dim OriginProtect As LongPtr
    Hook = False
    #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
Sub PasswordCracking()
    If Hook Then
        MsgBox "VBA Project password protection has been removed.", vbInformation, "Password Cracking"
    Else
        MsgBox "No encryption VBA Project found.", vbInformation, "Password Cracking"
    End If
End Sub

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VBA是一种在Microsoft Office软件中常用的编程语言,可以用于自动化各种任务和操作。有时候在VBA编写的工程中,我们可能会使用密码来保护代码的安全性。然而,如果我们忘记了工程密码,或者想要批量清除多个VBA工程密码,该怎么办呢? 1. 如果只有一个VBA工程需要清除密码,可以采取以下步骤: a. 打开VBA工程所在的Office应用程序,如Excel或Word。 b. 进入VBA编辑器,通过快捷键ALT+F11或选择“开发工具”->“Visual Basic”来打开。 c. 在VBA编辑器中,选择“工具”->“VBA项目属性”。 d. 在弹出的对话框中,选择“保护”选项卡。 e. 在密码框中输入有效的密码,然后将密码框清空。 f. 点击“确定”以保存更改。现在,该VBA工程密码已被清除。 2. 如果有多个VBA工程需要清除密码,可以编写一个VBA宏来批量完成操作。以下是一个示例的代码: ```vba Sub ClearProjectPassword() Dim proj As Object Dim projPath As String ' 设置需要清除密码VBA工程文件路径 projPath = "C:\Path\To\Your\VBA\Project.xls" ' 打开VBA工程 Set proj = Application.VBE.VBProjects.Open(projPath) ' 清除密码 proj.Protection.Remove ' 保存更改并关闭VBA工程 proj.VBComponents.Save proj.VBProjects.Close ' 释放资源 Set proj = Nothing End Sub ``` 上述代码可以在VBA编辑器中直接运行。修改 `projPath` 变量的值为需要清除密码VBA工程文件的路径,然后执行该宏即可批量清除所有指定路径下的VBA工程密码。 无论是单个VBA工程还是批量清除密码,务必谨慎操作。同时,在使用VBA时要遵守相关的法律法规和公司规定,确保代码使用的合法性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值