2010-07-30 47 views
2

如果密码被硬编码到源代码(如VB)中的变量中,有人可以通过查看已编译的可执行代码来提取此密码吗?从可执行代码中提取的密码?

如果是这样,可以做些什么来避免这种情况?

回答

9

是的,有人可以。

没有办法避免它。混淆会让它变得更难。

在最糟糕的情况下,如果有人不理解您的混淆代码,他们可以在调试器中运行您的可执行文件,并在使用之前从内存中读取密码。

解决方案当然不是将重要密码硬编码到二进制文件中。

+0

如果一个调试器可以查看任何变量,那么如何保护用于访问数据库的密码?当然,任何这样的密码在进入数据库之前都会在内存中? – CJ7 2010-07-30 04:27:45

+0

@Craig:您可以让软件询问密码并将其存储到某个地方。或者在典型的Web应用程序的情况下,安装软件时将密码存储到某个配置文件。关键是你不能通过获取软件来访问数据库,你也需要配置。 – 2010-07-30 04:35:00

+0

@Craig Johnston:对于高安全性应用程序,您需要一台高安全性的计算机。如果计算机在物理上受到损害,则计算机有权访问的任何凭据都会受到损害。也就是说,对于大多数具有仅由特定用户可读的配置文件并且在假定的用户权限下运行该二进制文件的人来说被认为是足够的。 – Borealid 2010-07-30 04:37:55

1

是的。通过观察程序在调试器中执行可以找到密码。如果您什么都不做,甚至可以通过在二进制文件中搜索文本来查找。

可以做些什么?有一些反调试技术,如混淆或防篡改机制,这些机制会在调试时导致可执行文件崩溃。混淆可能很容易实现。防篡改将是困难的。

+1

防篡改也永远不会100%有效。攻击者可以开始在虚拟机中运行你的代码,并且将密码挂钩到管理程序中;您的代码将无法确定是否发生此类攻击。 – Borealid 2010-07-30 04:40:52