xlsm文件密码去除的3个方法(亲测有效)

XLSM 文件受密码保护,想要删除密码?你来对地方了。

XLSM 是一个文件扩展名。正如扩展名的前三个字母 XLS 所反映的那样,它是一个 MS Excel 文件。第四个字母 M是指macro, 表示这是一个启用宏的文档。简单来说,任何带有 XLSM 扩展名的文件都意味着它使用了宏。

你可能会问:“什么是宏?”

宏是一组用 Visual Basic for Applications (VBA) 语言编写的简单或复杂的指令。当你执行这些代码时,它们会自动化你定义的任务。

或者,你可以选择更简单的方法,通过录制宏来记录你的操作。一旦停止录制,这些操作将被转换为 VBA 代码。

要访问宏,你可以从Excel菜单栏找到“开发工具”,然后点击“宏”。如果你还没有创建宏,可以在“宏名”字段中定义一个名称,然后点击“创建”。接下来,你可以在编辑器窗口中编写 VBA 代码。

Excel宏

另一方面,要录制宏,你可以点击“开发工具”功能区中的“录制宏”,然后开始正常处理文件。完成录制后,你可以返回到“开发工具”>“宏”,然后点击“停止录制”。

如果你已经录制了宏或编写了 VBA 代码,可以通过转到“开发工具”>“宏”,从列表中选择宏的名称,然后点击“运行”来执行它。

总的来说,创建宏后,如果你想要保存工作簿,则必须打开“文件”>“另存为”,在“文件名”字段中定义一个名称,并选择“Excel 启用宏的工作簿”,然后它将使用 XLSM 扩展名而不是标准的 XLSX。

另存为xlsm文件

在了解了什么是 XLSM 文件之后,我们将介绍一些 XLSM 密码去除方式。在这里,你将了解 3 种最有用的 Excel VBA 密码移除工具。

3 种 XLSM 密码移除工具

如上所述,如果你使用密码保护了启用宏的工作簿但忘记了密码,你必须使用 XLSM VBA 密码移除工具来重新获得访问权限。以下是 3 种最有效的方法,我列出了它们的优缺点,帮助你决定哪种方法最适合你。

1. iToolab PassWiper for Excel

最简单的方法是使用第三方工具,只需几次点击鼠标即可完成密码移除任务。近年来,iToolab 的 PassWiper 在用户中获得了良好的声誉。类似的工具还有PassFab for Excel。这两个工具都有中文版。

PassWiper 支持 Windows 7 到 Windows 11,并兼容 Microsoft Excel 2003 到 2021 和 Office 365 套件。

除了用作 XLSM 密码移除工具外,PassWiper 还支持 XLSX、XLS、XML、XLAM、XPS、XLA、XLSB、CSV、XLTX、XLTM、XLT 和 ODS 格式。

该程序使用字典攻击、组合攻击和暴力破解攻击来恢复打开加密的 XLSM 文件所需的密码,并移除阻止你进行结构和内容修改的密码。

然而,与所有工具一样,iToolab PassWiper 也有其优缺点:

优点:

  • 简单易用。
  • 支持几乎所有 Excel 文件类型。
  • 允许你在几秒钟内移除 Excel 工作表或工作簿的密码。
  • 恢复打开XLSM文件所需的加密密码,时间不确定。
  • 支持使用自定义字典文件来恢复密码。

缺点:

  • 仅适用于 Windows 电脑。如果你使用 Mac电脑,请尝试 PassFab for Excel
  • 需要付费。
PassWiper主页

2. 十六进制编辑器 (Hex Editor)

十六进制编辑器通常是一种免费工具,许多渗透测试人员和逆向工程师使用它来检查程序的安全性。虽然你可以将十六进制编辑器用作 XLSM VBA 密码移除工具,但你需要深入了解电脑软件的运行原理和逆向工程代码。

要使此方法有效,你需要执行以下步骤:

  • 备份你的 XLSM 文件。
  • 将文件扩展名从 XLSM 更改为 ZIP。
  • 使用任何文件压缩工具打开 ZIP 文件。
  • 找到 XL 目录。
  • 将 vbaProject.bin 文件解压到指定位置。
  • 使用十六进制编辑器打开文件。
  • 搜索 DPB= 这个条目。
  • 将 DPB= 替换为 DPX=。
  • 保存文件。
  • 将文件放回 ZIP 文件的 XL 文件夹中,当系统提示时,用这个新文件覆盖旧文件。
  • 将 ZIP 扩展名改回 XLSM。
  • 执行 VBA 项目。
  • 右键单击 VBA 项目,选择“属性”。
  • 在“保护”选项卡中删除密码。
  • 保存、关闭并重新打开文件。

优缺点如下:

优点:

  • 免费。
  • 易于操作,只需替换 DPB 为 DPX。
  • 操作非常精准,使用得当效果很好。
  • 占用资源少,性能高效。
  • 除密码移除外,还可以用于其他用途。

缺点:

  • 需要深入了解逆向工程和编程。
  • 如果有一行代码不正确,整个方法将无效。
hex editor

3. Visual Basic 编辑器

当你进入宏框并创建宏时,下一个打开的窗口就是 Visual Basic 编辑器。在这个编辑器中,你可以输入 VBA 代码来创建宏。然而,由于你必须输入完整的代码,所以你需要对 Visual Basic 编程语言有深入了解,并能够编写有效的代码。

话虽如此,如果你擅长编程,可以使用 Visual Basic 编辑器框创建 XLSM 密码移除工具。另一方面,如果你没有技术背景,也可以使用其他人编写的 VBA 代码。为方便起见,这里提供了一个示例代码:

Sub RemoveProtection()

Dim dialogBox As FileDialog

Dim sourceFullName As String

Dim sourceFilePath As String

Dim sourceFileName As String

Dim sourceFileType As String

Dim newFileName As Variant

Dim tempFileName As String

Dim zipFilePath As Variant

Dim oApp As Object

Dim FSO As Object

Dim xmlSheetFile As String

Dim xmlFile As Integer

Dim xmlFileContent As String

Dim xmlStartProtectionCode As Double

Dim xmlEndProtectionCode As Double

Dim xmlProtectionString As String

‘Open dialog box to select a file

Set dialogBox = Application.FileDialog(msoFileDialogFilePicker)

dialogBox.AllowMultiSelect = False

dialogBox.Title = “Select file to remove protection from”

If dialogBox.Show = -1 Then

sourceFullName = dialogBox.SelectedItems(1)

Else

Exit Sub

End If

‘Get folder path, file type and file name from the sourceFullName

sourceFilePath = Left(sourceFullName, InStrRev(sourceFullName, “\”))

sourceFileType = Mid(sourceFullName, InStrRev(sourceFullName, “.”) + 1)

sourceFileName = Mid(sourceFullName, Len(sourceFilePath) + 1)

sourceFileName = Left(sourceFileName, InStrRev(sourceFileName, “.”) – 1)

‘Use the date and time to create a unique file name

tempFileName = “Temp” & Format(Now, ” dd-mmm-yy h-mm-ss”)

‘Copy and rename original file to a zip file with a unique name

newFileName = sourceFilePath & tempFileName & “.zip”

On Error Resume Next

FileCopy sourceFullName, newFileName

If Err.Number <> 0 Then

MsgBox “Unable to copy ” & sourceFullName & vbNewLine _

& “Check the file is closed and try again”

Exit Sub

End If

On Error GoTo 0

‘Create folder to unzip to

zipFilePath = sourceFilePath & tempFileName & “\”

MkDir zipFilePath

‘Extract the files into the newly created folder

Set oApp = CreateObject(“Shell.Application”)

oApp.Namespace(zipFilePath).CopyHere oApp.Namespace(newFileName).items

‘loop through each file in the \xl\worksheets folder of the unzipped file

xmlSheetFile = Dir(zipFilePath & “\xl\worksheets\*.xml*”)

Do While xmlSheetFile <> “”

‘Read text of the file to a variable

xmlFile = FreeFile

Open zipFilePath & “xl\worksheets\” & xmlSheetFile For Input As xmlFile

xmlFileContent = Input(LOF(xmlFile), xmlFile)

Close xmlFile

‘Manipulate the text in the file

xmlStartProtectionCode = 0

xmlStartProtectionCode = InStr(1, xmlFileContent, “<sheetProtection”)

If xmlStartProtectionCode > 0 Then

xmlEndProtectionCode = InStr(xmlStartProtectionCode, _

xmlFileContent, “/>”) + 2 ‘”/>” is 2 characters long

xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _

xmlEndProtectionCode – xmlStartProtectionCode)

xmlFileContent = Replace(xmlFileContent, xmlProtectionString, “”)

End If

‘Output the text of the variable to the file

xmlFile = FreeFile

Open zipFilePath & “xl\worksheets\” & xmlSheetFile For Output As xmlFile

Print #xmlFile, xmlFileContent

Close xmlFile

‘Loop to next xmlFile in directory

xmlSheetFile = Dir

Loop

‘Read text of the xl\workbook.xml file to a variable

xmlFile = FreeFile

Open zipFilePath & “xl\workbook.xml” For Input As xmlFile

xmlFileContent = Input(LOF(xmlFile), xmlFile)

Close xmlFile

‘Manipulate the text in the file to remove the workbook protection

xmlStartProtectionCode = 0

xmlStartProtectionCode = InStr(1, xmlFileContent, “<workbookProtection”)

If xmlStartProtectionCode > 0 Then

xmlEndProtectionCode = InStr(xmlStartProtectionCode, _

xmlFileContent, “/>”) + 2 ””/>” is 2 characters long

xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _

xmlEndProtectionCode – xmlStartProtectionCode)

xmlFileContent = Replace(xmlFileContent, xmlProtectionString, “”)

End If

‘Manipulate the text in the file to remove the modify password

xmlStartProtectionCode = 0

xmlStartProtectionCode = InStr(1, xmlFileContent, “<fileSharing”)

If xmlStartProtectionCode > 0 Then

xmlEndProtectionCode = InStr(xmlStartProtectionCode, xmlFileContent, _

“/>”) + 2 ””/>” is 2 characters long

xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _

xmlEndProtectionCode – xmlStartProtectionCode)

xmlFileContent = Replace(xmlFileContent, xmlProtectionString, “”)

End If

‘Output the text of the variable to the file

xmlFile = FreeFile

Open zipFilePath & “xl\workbook.xml” & xmlSheetFile For Output As xmlFile

Print #xmlFile, xmlFileContent

Close xmlFile

‘Create empty Zip File

Open sourceFilePath & tempFileName & “.zip” For Output As #1

Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)

Close #1

‘Move files into the zip file

oApp.Namespace(sourceFilePath & tempFileName & “.zip”).CopyHere _

oApp.Namespace(zipFilePath).items

‘Keep script waiting until Compressing is done

On Error Resume Next

Do Until oApp.Namespace(sourceFilePath & tempFileName & “.zip”).items.Count = _

oApp.Namespace(zipFilePath).items.Count

Application.Wait (Now + TimeValue(“0:00:01”))

Loop

On Error GoTo 0

‘Delete the files & folders created during the sub

Set FSO = CreateObject(“scripting.filesystemobject”)

FSO.deletefolder sourceFilePath & tempFileName

‘Rename the final file back to an xlsx file

Name sourceFilePath & tempFileName & “.zip” As sourceFilePath & sourceFileName _

& “_” & Format(Now, “dd-mmm-yy h-mm-ss”) & “.” & sourceFileType

‘Show message box

MsgBox “The workbook and worksheet protection passwords have been removed.”, _

vbInformation + vbOKOnly, Title:=”Password protection”

End Sub
visual basic editor界面

使用 Visual Basic 编辑器的优缺点如下:

优点:

  • 免费使用。
  • 运行流畅,无任何故障。
  • 提供基于 GUI 的浏览方式,便于定位受保护的文件以移除密码。
  • 可以删除结构和内容修改密码。

缺点:

  • 需要编写多行代码才能使其工作。
  • 无法恢复打开密码保护工作簿所需的加密密码。
  • 需要使用不同的 XLSM 文件手动执行。
  • 仅适用于 Windows 电脑。

XLSM 文件是启用宏的工作簿,包含用于自动执行任务的 VBA 项目。如果你使用密码保护了此类工作簿并忘记了密码,可以使用上述任何一种方法来重新获得访问权限。

其他人也在看

发表评论