C语言 在编译程序的源代码中存储敏感数据



在这个使用libcurl的示例中,程序将"登录";到IMAP服务器,使用用户和秘密密码字符串存储在源代码中的两个单独的字符串中,为了简洁起见。大多数真实的电子邮件客户端(gnus, mutt)从纯文本配置文件或加密文件中读取,如果我要用真实的用户名和密钥编译示例文件,是否有可能反编译生成的二进制文件以解析私钥?我想象在编译之前输入宏的私钥比编译后读取配置文件更安全,这种理解是正确的吗?

如果用户名和秘密是字符串,并且只是包含在源代码中,则可以从二进制可执行文件中提取它们,甚至不需要反编译。参见strings命令。您可以采取措施将用户名和秘密包含在源代码中,这样strings就不会轻易找到它们(例如,在添加字符串之前,在程序中使用其他位模式对字符串进行XORing,然后在可执行文件中进行XORing以恢复原始字符串)。这就是"通过模糊实现安全"。但是,不建议使用。

将用户名和密码放在配置文件中可以让您使用系统的文件权限,这样使用二进制文件的人可能不一定有读取文件的权限。您还可以设置PKI身份验证安排,或者可能使用Kerberos密钥授权。

需要付出的努力取决于你想要保护的东西的价值。

最新更新