【问题标题】:VBA Password ProtectionVBA 密码保护
【发布时间】:2018-08-20 12:00:23
【问题描述】:

有没有办法保护 VBA 密码保护免受诸如此类的破解:

Is there a way to crack the password on an Excel VBA Project?

或者这个:

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

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

谢谢

【问题讨论】:

  • 使其真正安全的唯一方法是根本不分发敏感数据。而是使用客户端/服务器方法,将请求从客户端发送到服务器。然后,服务器可以处理输入数据并仅返回客户端请求的结果。所以客户端只接收数据的一部分或结果,而没有敏感的原始数据。
  • 我没试过,但你能不能建立一个 ODBC 连接并用它来连接数据库?使用这种方法我能想到的直接缺点是您必须为每个用户设置此连接..但它应该隐藏您的连接详细信息
  • 为什么不在数据库用户级别限制数据库访问并设置适当的“公共”权限?这样,如果您的用户碰巧绕过密码并获得了凭据,他们将无法做任何他们无法通过您的前端做的事情。
  • 这可能是另一种解决方案:How to securely store Connection String details in VBA

标签: vba excel


【解决方案1】:

很遗憾,您的问题的答案是否定的。没有 Excel 密码是完全安全的。

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

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

为了将来可能出现的死链接,我冒昧地转置了以下信息:

来自网站:

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

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

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

代码:

Function Obfusc(oWord As String, nCrypt As Boolean) As String

  Dim iPtr As Integer
  Dim iByte As Byte

  For iPtr = 1 To Len(oWord)
    If nCrypt Then
      iByte = Asc(Mid(oWord, iPtr, 1)) + 99 + iPtr
    Else
      iByte = Asc(Mid(oWord, iPtr, 1)) - 99 - iPtr
    End If
    Obfusc = Obfusc & Chr(iByte)
  Next iPtr

End Function

(这是一个非常简单的例程 - 您可能希望使其更复杂!)

在即时窗口 (Ctrl-R) 中键入 ?obfusc("MerryXmas#2010",true) 并按 Enter。这将返回"Hello World!" 的混淆版本,即"±ÊØÙáÁ×Ìß Ÿ¡¡"

现在输入 ?obfusc("±ÊØÙáÁ×Ìß Ÿ¡¡",false) 并按 Enter。 (您可能必须复制并粘贴它!)这将返回原始字符串。

因此,在实际使用中,您可以通过键入
?obfusc("MerryXmas#2010",true) 并将混淆字符串 "±ÊØÙáÁ×Ìß Ÿ¡¡" 粘贴到您的代码中手动获取混淆字符串,如下所示:- 代码:

password = obfusc("¬±ÊØÙáÁ×Ìß Ÿ¡¡",False)
conn_str = "Provider=SQLOLEDB.1;Password=" & password & ";Persist Security Info=True

...等" 这就是一般的想法。

如果您真的想通过混淆去城镇,您可以按照此处的“教程”进行操作: How to securely store Connection String details in VBA

【讨论】:

    【解决方案2】:

    不,这是不可能的。任何类型的密码都可以使用更新的 Excel VBA 宏代码和软件解除保护。

    更改文件扩展名以破解 Excel VBA 密码 使用十六进制编辑器破解 Excel VBA 项目密码 使用宏代码

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 2019-05-27
      • 1970-01-01
      • 2013-06-15
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多