如果我需要用户输入密码来打开Delphi生成的exe,并且我使用的代码如下,但不是如下所示的简单密码:
if password='1234' then begin
form2.show
end;发布于 2012-12-28 06:55:39
为了演示它有多不安全,考虑一下这个小的控制台应用程序:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
procedure StartProgram;
begin
writeln('You entered the correct password. Welcome to this awesome program!');
end;
procedure EndProgram;
begin
writeln('That is not the correct password. Goodbye.');
end;
var
PW : string;
begin
write('Enter password: ');
readln(PW);
if PW = 'SuperSecretPassword' //See if you can spot this in the image
then StartProgram
else EndProgram;
readln;
end.编译它,并在十六进制编辑器中打开exe文件。该截图来自XVI32,但我认为任何十六进制编辑器看起来都会有些相似:

毕竟并不是什么超级秘密。
发布于 2012-12-28 06:17:35
不,这几乎肯定会作为明文存储在可执行文件中。
事实上,由于检查是在本地完成的,所以再多的努力也不能保证可执行文件的安全--攻击者只需编辑可执行文件来修改条件跳转,您的测试就会被绕过。保护这些东西的方法通常是将这种能力从攻击者手中移走。例如,将用户输入的密码发送到您控制的中央服务器,并在那里完成检查,只有在检查成功时才发送回所需的内容(并且替换服务器不能伪造)。
然而,这可能是很多不必要的工作。如果你所要做的就是阻止那些不经意的破解,你也许可以通过一些小的混淆来做到这一点,比如用一个关键词组XORing密码,这样它在可执行文件中就不那么明显了。对用户输入的密码执行相同的操作,然后进行比较,这意味着明文密码将不可见。
这样的计划不会阻止一个有决心的破碎者,但它会让绝大多数人更难做到。安全的想法(IT、家庭或任何其他类型)并不总是让它不可能失败,只是让它变得足够困难,变得更不值钱。
这真的取决于你试图击败谁-这将决定你的计划应该有多复杂。
或者,您可能希望考虑hvd在注释中提出的选项。让可执行文件只是一个存根,它将实际的可执行文件作为加密数据。这将使用用户输入的密钥进行解密,并写入文件系统,检查有效性,然后运行。
由于密码不在存根本身内,因此不易受到攻击。密码只存在于创建者(在制作存根时使用)和用户(希望只存在于他们的头脑中)。只获得存根的人没有简单的方法来运行加密的可执行文件。
同样,有一些方法可以绕过这一点,但它们都涉及到在不使用可执行文件(暴力破解、社会工程等)的情况下获得密码。
发布于 2012-12-28 06:17:01
不是的。如果有人愿意,他们可以对可执行文件进行反向工程并获得密码。
https://stackoverflow.com/questions/14062002
复制相似问题