找回密码
 立即注册
搜索
查看: 108|回复: 0

一键破解VBA工程密码!Excel/Word/PPT全支持

[复制链接]
  • TA的每日心情
    奋斗
    2025-4-28 08:44
  • 签到天数: 55 天

    [LV.5]上尉

    522

    主题

    217

    回帖

    6万

    积分

    管理员

    影子鹰拥护者

    积分
    62897

    热心会员推广达人宣传达人突出贡献优秀版主论坛元老

    QQ
    发表于 2025-4-12 14:16:09 | 显示全部楼层 |阅读模式
    方法一
    新建一个工作簿,把代码放进去,然后运行。这个时候,所有的工作簿的密码都会被移除。破解代码在文末。
    方法二
    打开VBA输入法的轮盘功能,选择破解密码即可。
    视频解析破解代码

    ' Excel WPS均可用
    ' 兼容32位和64位

    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

    Private Const PAGE_EXECUTE_READWRITE = &H40

    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
        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 unprotected()
        If Hook Then
            MsgBox "VBA Project is unprotected!", vbInformation, "Tips"
        End If
    End Sub

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|官方商城|手机版|小黑屋|影子鹰YZYING ( 粤ICP备2021124288号 ) 本站已运行

    GMT+8, 2025-5-9 21:16 , Processed in 0.069287 second(s), 25 queries .

    Powered by Discuz! X3.5

    © 2001-2025 Discuz! Team.

    快速回复 返回顶部 返回列表