3

如果我们想在 Delphi 编译器生成的可执行文件中存储关键信息,例如密码和服务器地址,我们如何在不知道最终的可执行文件大小和二进制结构(例如文件末尾)的情况下做到这一点?

边注:

要存储的文本已经加密;并且在某些计算机中,Windows 不允许在注册表中写入权限,特别是当用户不是管理员时,并且有黑客监视注册表更改并且智能用户可以找到新的 Windows 注册表项。

评论

为什么这个问题被否决了?这是可以实现的!如果对大多数人不感兴趣,则不会计量。

我想到了可升级的 bios 和其他固件,例如可以自我更新的卫星电视信号解码器。这怎么可能?

4

2 回答 2

4

您可以使用 .rc 文件将数据放入最终 .exe 文件内的自定义资源中。然后,您可以在运行时访问该资源,例如使用 TResourceStream,并根据需要解密和使用其内容。但是,您无法在 .exe 运行时将新数据写入资源,因为该文件已被操作系统锁定。如果您需要编写新设置,并且没有对注册表的写入权限,则必须改用单独的文件。Windows 预留了特殊文件夹,用户可以在其用户配置文件中对其进行写访问。

于 2012-07-03T22:18:03.003 回答
3

创建字符串表资源是一种方法。

创建一个文本文件。说 secretstuff.rc (必须有 .rc 扩展名),里面有这样的东西。

STRINGTABLE
{
  1,"This is my encrypted password in say Base64"
}

使用 BRCC32 将其编译为 .res 文件。

使用编译器指令将其包含在相关代码中

{$R secretstuff.res}

之后,您可以使用 TResourceStream 访问。

如果您想更好地管理它,将它们填充到 dll 而不是 exe 中可能是明智之举,那么您可以通过提供新版本的 dll 来更新内容。

有一个更详细的例子,另一个目的但相同的原则here

于 2012-07-03T22:24:39.557 回答