Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在方法中将密码存储为局部常量的安全含义?_Windows_Security_Delphi_Pascal - Fatal编程技术网

Windows 在方法中将密码存储为局部常量的安全含义?

Windows 在方法中将密码存储为局部常量的安全含义?,windows,security,delphi,pascal,Windows,Security,Delphi,Pascal,我想就最常见的安全反模式这一主题进行自我教育 假设以以下方式存储密码有哪些安全风险: interface type TFoo = class procedure DoSomething; end; Implementation procedure TFoo.DoSomething; const Password = 'Something'; begin end; 我知道正确的方法是使用散列算法对密码进行散列,并将该值保存在外部文件中,但是我真正感兴趣的是示例中的

我想就最常见的安全反模式这一主题进行自我教育

假设以以下方式存储密码有哪些安全风险:

interface

type
  TFoo = class
   procedure DoSomething;
  end;

Implementation

procedure TFoo.DoSomething;
 const
   Password = 'Something';
begin 

end;

我知道正确的方法是使用散列算法对密码进行散列,并将该值保存在外部文件中,但是我真正感兴趣的是示例中的密码如何暴露给恶意第三方

通过检查可执行文件中的数据,密码将可见。例如,使用十六进制编辑器甚至记事本。

通过检查可执行文件中的数据,可以看到密码。例如,使用十六进制编辑器甚至记事本。

通过检查可执行文件中的数据,可以看到密码。例如,使用十六进制编辑器甚至记事本。

通过检查可执行文件中的数据,可以看到密码。例如,使用十六进制编辑器甚至记事本

我想教育自己

此外,要回答未询问的问题,源解决方案中存储的任何密码是否可以:

如前所述,常量字符串会出现在可执行文件中

备选案文1: 结果:可执行文件中的“密码”

备选案文2: 结果:可执行文件中的“密码”

备选案文3: 结果:可执行文件中的“rd”、“swo”和“pas”

再试试你自己。在记事本中打开可执行文件并亲自查看

此外,不用说,上述做法不是建议,只是对问题的补充价值

我想教育自己

此外,要回答未询问的问题,源解决方案中存储的任何密码是否可以:

如前所述,常量字符串会出现在可执行文件中

备选案文1: 结果:可执行文件中的“密码”

备选案文2: 结果:可执行文件中的“密码”

备选案文3: 结果:可执行文件中的“rd”、“swo”和“pas”

再试试你自己。在记事本中打开可执行文件并亲自查看

此外,不用说,上述做法不是建议,只是对问题的补充价值

我想教育自己

此外,要回答未询问的问题,源解决方案中存储的任何密码是否可以:

如前所述,常量字符串会出现在可执行文件中

备选案文1: 结果:可执行文件中的“密码”

备选案文2: 结果:可执行文件中的“密码”

备选案文3: 结果:可执行文件中的“rd”、“swo”和“pas”

再试试你自己。在记事本中打开可执行文件并亲自查看

此外,不用说,上述做法不是建议,只是对问题的补充价值

我想教育自己

此外,要回答未询问的问题,源解决方案中存储的任何密码是否可以:

如前所述,常量字符串会出现在可执行文件中

备选案文1: 结果:可执行文件中的“密码”

备选案文2: 结果:可执行文件中的“密码”

备选案文3: 结果:可执行文件中的“rd”、“swo”和“pas”

再试试你自己。在记事本中打开可执行文件并亲自查看



此外,不用说,上述实践不是建议,只是对问题的补充价值。

好吧,它将是EXE中的纯文本,任何人都可以免费访问该可执行文件并使用十六进制编辑器查看。散列没有任何帮助。在可执行文件中存储密码是一个问题。为什么要这样做?我是否需要提到,通过这种方式,所有TFoo实例都将具有相同的密码?你只需要破解一次,你就能立即获得所有的权限。在程序的所有副本中。在所有的平台上,你都可以把它翻译成。@Miguel如果你有哈希,那还不够吗。应用程序将如何处理哈希值?@David实际上,这取决于哈希密码的用途。例如,有一些功能只能通过密码访问,因此应用程序可以显示请求密码的表单,动态应用哈希算法,并将其与EXE中存储的哈希密码进行比较。在这种情况下,攻击者是否能看到EXE中的哈希字符串并不重要,因为他需要通过暴力强制哈希(攻击者还必须找到哈希算法和/或salt)或破解应用程序来知道原始密码。好吧,EXE中将是纯文本,对任何有权访问可执行文件和十六进制编辑器的人来说都是免费的。哈希没有帮助。在可执行文件中存储密码是一个问题。为什么要这样做?我是否需要提到,通过这种方式,所有TFoo实例都将具有相同的密码?你只需要破解一次,你就能立即获得所有的权限。在程序的所有副本中。在所有的平台上,你都可以把它翻译成。@Miguel如果你有哈希,那还不够吗。应用程序将如何处理哈希值?@David实际上,这取决于哈希密码的用途。例如,有一些功能只能通过密码访问,因此应用程序可以显示请求密码的表单,动态应用哈希算法,并将其与EXE中存储的哈希密码进行比较。在这种情况下,攻击者是否能看到EXE中的哈希字符串并不重要,因为他需要通过暴力强制哈希(攻击者还必须找到哈希算法和/或salt)或破解应用程序来知道原始密码。好吧,EXE中将是纯文本,对任何有权访问可执行文件和十六进制编辑器的人来说都是免费的。哈希没有帮助。在可执行文件中存储密码是一个问题。为什么要这样做?我是否需要提到,通过这种方式,所有TFoo实例都将具有相同的p
const
  PW0 = 'pas';
  PW1 = 'swo';
  PW2 = 'rd';
var
  PassWord: String;
...
initialization
  PassWord := PW0 + PW1 + PW2;
const
  PW2 = 'rd';
  PW1 = 'swo';
  PW0 = 'pas';
var
  PassWord: String;
...
initialization
  PassWord := PW0 + PW1 + PW2;
var
  PW2: String = 'rd';
  PW1: String = 'swo';
  PW0: String = 'pas';
  PassWord: String;

initialization
  PassWord := PW0 + PW1 + PW2;