这个VBA代码做了什么,是否安全

时间:2018-04-26 11:00:17

标签: vba excel-vba excel

有人给了我一些VBA代码,它应该摆脱我放在Excel文档上的一些密码保护,我现在无法打开它。我想知道是否有人可以确认这是它的作用而不是不择手段(比如破解我的所有密码!)

VBA代码是;

Sub PasswordBreaker()
Dim i As Integer, i1 As Integer, i2 As Integer, i3 As Integer, _
  i4 As Integer, i5 As Integer, i6 As Integer, i7 As Integer, _
  i8 As Integer, i9 As Integer,  i10 As Integer, i11 As Integer, _
  unusedVar As VbMsgBoxResult, passLine As String

On Error Resume Next

For i = 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 i7 = 65 To 66: For i8 = 65 To 66:
For i9 = 65 To 66: For i10 = 65 To 66: For i11 = 32 To 126:
passLine = Chr(i) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & _
           Chr(i5) & Chr(i6) & Chr(i7) & Chr(i8) & Chr(i9) & _
           Chr(i10) & Chr(i11)

ActiveSheet.Unprotect passLine

If ActiveSheet.ProtectContents = False Then
  unusedVar = MsgBox("Password cracked at random string: " & _
                     passLine & vbCrLf & "|xxxxx[;;;;;;;;;>", _
                     vbOKOnly, "VBA Brute")
  Exit Sub
End If
Next: Next: Next: Next: Next: Next:
Next: Next: Next: Next: Next: Next:
End Sub

由于

编辑 -

对于其他任何感兴趣的人来说,要重新打开“太广泛”的问题,我已经花了最后一天阅读VBA代码说明,我想我已经知道了这一点。

第一位只定义i ... i11将成为什么类型的变量(整数),变量'passline'将是一个文本字符串。

第三位通过使用所有变量i ... i11(我怀疑Chr然后一个数字代表一个特定的键盘输入)以某种方式创建变量'passline'。

ActiveSheet.Unprotect密码明显指示Excel使用变量“passline”解锁活动工作表。

接下来的一点似乎是检查工作表是否已经不受保护,如果有,则显示消息框,其中包含“passline”变量,一些文本,一个“OK”按钮和一个标题。

然后,如果工作表尚未受到保护,则所有“下一步”功能都会以某种方式再次尝试,只有在完成时才会退出。

我仍然不确定的是;

为什么'On Error Resume Next' - 为什么会出错?

为什么unusedVar被定义为消息框结果,当然只能是1/0类型的变量,因为消息框结果只是按下了“OK”按钮?我没有得到这个未使用的变量。为什么未使用的变量本身等于(=)稍后的消息框?为什么不只是IF(密码已被破解),那么(显示消息框)?

最后,为什么12个Nexts,它真的只需要十二次尝试破解密码(每个字符一个?)?

显然,这些问题现在可能仍然没有答案,但是当这个问题成为谷歌搜索这个特定代码的人的最佳结果时,这里的大多数社区似乎对制作讽刺言论比实际帮助更感兴趣,我以为我至少会分享我发现的东西。我很欣赏我得到的一个答案,但我认为一步一步地打破代码可能会让其他人更加放心,而不仅仅是对它的作用的总结。

当然,由于这个问题“过于宽泛”,我怀疑任何人都能够做出如此大规模的长期解释。

1 个答案:

答案 0 :(得分:1)

是的,这是安全的。它只是强制用于保护工作表/工作簿的密码。它既解锁了工作表,又为你输出了密码(这将是像AAABBAAAABBAA一样奇怪的东西 - 但它会起作用)。

代码本身不会对电脑或运行它的用户造成任何伤害。