VBA密码保护

Oda*_*lim 7 excel vba excel-vba

有没有办法保护VBA密码保护免受这样的破解:

有没有办法破解Excel VBA项目的密码?

或者这一个:

https://superuser.com/questions/807926/how-to-bypass-the-vba-project-password-from-excel

我真的需要加强我的VBA代码的安全性,因为它包含敏感的SQL数据!

谢谢

Goo*_*uJu 1

不幸的是,你的问题的答案是否定的。没有任何 Excel 密码是完全安全的。

\n\n

但是,如果您的数据传输工具必须是 Excel,并且您正在尝试混淆 SQL 连接字符串(听起来您的问题就是这种情况),那么有关在 Excel 中混淆 SQL 连接字符串的文章将会有所帮助。尽管密码最终可以被逆向工程,但它不能以连接字符串中的纯文本形式读取,并且需要一定程度的理性才能逆向工程。

\n\n

链接此处并完全归功于@Ruddles:https://www.mrexcel.com/forum/excel-questions/512040-data-connector-hide-password.html

\n\n

为了防止未来可能出现的死链接,我冒昧地调换了以下信息:

\n\n

来自网站:

\n\n
\n

您通过一些 VBA 处理密码,将其转换为\n 完全不同的字符串。然后,您可以将该字符串硬编码到 VBA 中,因为如果有人看到它,他们将无法使用它,因为它不是真正的密码。然后,当您需要在代码中使用密码时,您可以通过相反的过程运行它,并返回原始字符串。

\n\n

您可以根据需要使代码变得简单或复杂 - 但如果有人看到该代码,他们可能有足够的知识来对过程进行逆向工程并恢复密码。它并没有真正加密,它只是为人们想要非法访问它增加了一个额外的障碍。另一方面,它可能会满足您的数据库安全专家的要求!

\n\n

试试这个:创建一个新工作簿并打开 VBE (Alt-F11),然后转到\n“插入”>“模块”。将此代码粘贴到代码窗口中:-

\n
\n\n

代码:

\n\n
Function Obfusc(oWord As String, nCrypt As Boolean) As String\n\n  Dim iPtr As Integer\n  Dim iByte As Byte\n\n  For iPtr = 1 To Len(oWord)\n    If nCrypt Then\n      iByte = Asc(Mid(oWord, iPtr, 1)) + 99 + iPtr\n    Else\n      iByte = Asc(Mid(oWord, iPtr, 1)) - 99 - iPtr\n    End If\n    Obfusc = Obfusc & Chr(iByte)\n  Next iPtr\n\nEnd Function\n
Run Code Online (Sandbox Code Playgroud)\n\n

(这是一个非常简单的例程 - 您可能想让它更复杂!)

\n\n

在立即窗口中(Ctrl-R)键入?obfusc("MerryXmas#2010",true)并按 Enter 键。这将返回其混淆"Hello World!"版本"\xc2\xb1\xc3\x8a\xc3\x98\xc3\x99\xc3\xa1\xc3\x81\xc3\x97\xc3\x8c\xc3\x9f \xc5\xb8\xc2\xa1\xc2\xa1"

\n\n

现在输入?obfusc("\xc2\xb1\xc3\x8a\xc3\x98\xc3\x99\xc3\xa1\xc3\x81\xc3\x97\xc3\x8c\xc3\x9f \xc5\xb8\xc2\xa1\xc2\xa1",false)并按 Enter 键。(您可能必须复制并粘贴它!)这将返回原始字符串。

\n\n

因此,在实际使用中,您可以通过键入
\n并将混淆的字符串粘贴到代码中来手动获取?obfusc("MerryXmas#2010",true)混淆的字符串,如下所示:-\n代码:"\xc2\xb1\xc3\x8a\xc3\x98\xc3\x99\xc3\xa1\xc3\x81\xc3\x97\xc3\x8c\xc3\x9f \xc5\xb8\xc2\xa1\xc2\xa1"

\n\n
password = obfusc("\xc2\xac\xc2\xb1\xc3\x8a\xc3\x98\xc3\x99\xc3\xa1\xc3\x81\xc3\x97\xc3\x8c\xc3\x9f \xc5\xb8\xc2\xa1\xc2\xa1",False)\nconn_str = "Provider=SQLOLEDB.1;Password=" & password & ";Persist Security Info=True\n
Run Code Online (Sandbox Code Playgroud)\n\n

...等等”\n这就是总体思路。

\n\n

如果您确实想深入了解混淆,可以按照此处的“教程”进行操作:\n如何在 VBA 中安全地存储连接字符串详细信息

\n