MS Office 2013 - VBA密码安全

3

我想知道MS Office 2013中的VBA密码有多安全。

我在网上搜索了一些网站,它们出售软件来破解密码,这可靠吗?

我想为我的办公文件开发一些安全措施,这些措施将依赖于VBA代码,但如果VBA代码可以轻易地被更改/查看,那么这种方法就没有意义。

谢谢


那要看情况。你认为攻击者会有多大的决心呢?你会发现这很有趣。http://superuser.com/q/807926/361752 - RubberDuck
我想知道这是否很容易做到,这是我的问题。谢谢 - Christopher Bailey
看看那个链接,告诉我它有多容易?=;)- - RubberDuck
但我猜这不适用于Office 2013,或者是我错过了什么? - Christopher Bailey
滚动到答案底部,它涉及新的XML格式办公文件。基本上,这只会阻止普通用户查看您的代码。如果有人正在攻击它,他们还是能够进入。 - RubberDuck
1
我尝试了最后一个针对xlsm文件的解决方案,但是没有成功。我收到了一个文件损坏的错误消息。 - Christopher Bailey
1个回答

5
使用此答案作为参考:如何破解Excel VBA项目的密码? 不必进行所有十六进制操作。您可以尝试这个方法。它适用于任何文件(*.xls, *.xlsm, *.xlam ...)。在Excel 2007、Excel 2010和Excel 2013的32位版本上测试并运行。
  1. Open the file(s) that contain your locked VBA Projects
  2. Create a new xlsm file and store this code in Module1

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

备注:此代码由一位名叫Siwtom(昵称)的越南开发者编写。您可以将此代码转换为Excel插件以供经常使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接