Security 制作';纯文本&x27;绳子不会破裂吗?

Security 制作';纯文本&x27;绳子不会破裂吗?,security,delphi,Security,Delphi,假设我的程序中某处有一个重要密码,我想让它更安全,例如: ftp.password := 'mypassword'; 大约8年前,我经常为了好玩而“破解东西”,所以我通过使用OllyDbg很容易找到类似的东西 我需要知道的是,是否有办法使这东西不被窥视。我曾考虑将密码直接存储到组件中,但又不知道它是否有任何好处。不要这样做。如果你想保证密码的安全,不要把它放在程序中。如果程序是交互式的,您可以向用户索要。如果没有,您应该为程序设置某种非基于密码的身份验证 如果必须在程序中嵌入密码,规则很简单—

假设我的程序中某处有一个重要密码,我想让它更安全,例如:

ftp.password := 'mypassword';
大约8年前,我经常为了好玩而“破解东西”,所以我通过使用OllyDbg很容易找到类似的东西


我需要知道的是,是否有办法使这东西不被窥视。我曾考虑将密码直接存储到组件中,但又不知道它是否有任何好处。

不要这样做。如果你想保证密码的安全,不要把它放在程序中。如果程序是交互式的,您可以向用户索要。如果没有,您应该为程序设置某种非基于密码的身份验证


如果必须在程序中嵌入密码,规则很简单——千万不要将程序提供给那些不应该做密码允许他们做的任何事情的人。

这里有一种方法-它可以让好奇的人使用十六进制查看器来保护程序的安全,但当然在运行时无法使用高级技术:

function GetA: string;
begin
  Result := #$109#$121#$122;  // 'myp'
end;

function Getb: string;
begin
  Result := #97#$115#$115#$119;  // 'assw'
end;

function GetC: string;
begin
  Result := #$111#$114#$100;  // 'ord'
end;

procedure TForm1.Whatever;
begin
  ftp.Password := GetA + GetB + GetC + GetD;
end;

正如我所说的,在代码执行过程中使用调试器设置中断并在设置后检查内存中的
ftp.password
是不安全的,但是使用十六进制查看器是安全的。对于那些喜欢尝试的人,我通常会将
ftp.password
的设计时间值设置为类似
doyouthinkmthaddy?

虽然我完全同意David Schwartz的观点(你不应该直接在程序中嵌入任何密码),但这可能会让任何人更难找到它


您可以按程序构建字符串,而不是在一块中定义字符串。通过这种方式,字符串作为一个整体永远不会存储在可执行文件中的一部分中,这使得查找字符串变得更加困难。

虽然您不应该这样做的答案是正确的,但在实践中,有时现实世界会迫使您手动操作。在一个或两个例子中,我被迫使用类似于我所使用的方法的方法来编写一个函数,该函数将使用一些数学公式从头生成一个已知的密码-例如,英文单词的第一个字母与PI的前8位数字的顺序相反。当然,这仍然是可以破解的,但这会使任务变得更加困难,并且应该阻止随意的浏览器


当然,如果你真的在使用FTP(不是SFTP),你无论如何都是在通过网络以明文形式传递密码。我更关注这个问题——它是一个更明显的攻击向量。

这根本不是密码破解的问题。保护此值的唯一方法是依赖操作系统提供的用户访问控制。确保文件的权限受到尽可能多的限制
chown user:user file
然后
chmod 400 file

也许您可以加密字符串,并在读取时将其解密回来

但即便如此,正如其他人所说,在应用程序内部存储密码也不是一个好主意


即使你对字符串进行了编码或加密,它也不会对意志坚定的人安全。

Mmm,也许如果我为该程序创建了一个用户,那会更安全一些,即使有人得到了它,他们也不会使用它。不要存储密码。散列并存储密码。@David Heffernan-如果需要将这些密码发送到另一个应用程序/服务(例如,连接到FTP服务器),则这将不起作用。True。但我的观点是,如果他需要向FTP服务器发送密码,则对密码进行哈希存储将不起作用。如果他想接受用户的密码,是的:散列和比较散列。主题行并不完全是一个矛盾修饰法,但“裸字符串”和“防止破解”这两个概念是完全不兼容的,对吗?请更新问题以解释用户是否知道密码,而你只是试图安全地存储它,以便在计算机丢失时,密码不容易恢复,或者用户一定不知道密码。另外,您是否能够生成和删除ftp帐户?如果你提供关于系统的明确细节,我们可以提供最佳解决方案。这是一个合理的答案,好主意。+1在打开调试器之前,我会嗅探网络流量。这样更容易。