c++ - 预处理器指令对敏感信息安全吗?

标签 c++ security software-design

我正在为我的 C++ 应用程序创建一个包含 HTML/CSS/JS 文件的存档,并且我不希望用户可以访问这些文件。所以,我决定用密码加密存档。
我的第一个想法是通过预处理器宏(通过 CMake)将密码存储在程序中。但是,安全吗?
您可以从已编译的应用程序中访问密码吗? (exe,在我的情况下)
如果可以,如何保护它?这在技术上是可行的还是我应该放弃并保持原样?

最佳答案

如果宏实际在应用程序中使用,那么是的,它可以在可执行文件中访问——它必须是程序才能使用它。
您嵌入到程序中的任何凭证都可以被有足够动机的攻击者恢复。没有可以用来防止这种情况的加密机制,因为您需要提供解密 key 才能使程序运行。
证明很简单:如果程序本身可以在没有任何用户输入的情况下获得凭证,那么可执行文件必须包含 key ,或者生成/导出 key 所需的所有信息。因此,任何人(具有必要的专业知识)都必须能够仅使用可执行文件中的信息来生成凭证。
这可以通过检查可执行文件来完成。也可以通过在调试器的监督下运行可执行文件并观察它在做什么来完成。
这也是同样的原因DRM方案是毫无意义的——消费者必须拥有使用该 Material 的 key ,并且如果他们能够拿到 key (他们必须能够使用这些内容),那么他们的方案就没有工作。 (当然,在较新的 DRM 方案中, key 被埋在一个芯片中,该芯片设计用于在打开 key 时破坏 key ,但这只是意味着很难获得 key ,并非不可能。)

tl;dr:这从来都不是是否可以恢复嵌入式 key 的问题。总是有可能的。这是恢复该 key 需要付出多少努力的问题。

关于c++ - 预处理器指令对敏感信息安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63426332/

相关文章:

javascript - AJAX 安全规范

c# - 为什么.NET RSACryptoServiceProvider 会抛出 "Safe handle has been closed"异常?

c# - OOP设计: how to model a company which can be a debtor, 债权人、领导还是只是一种关系?

c++ - vector 析构函数导致程序在 C++ 中崩溃

c++ -/usr/bin/ld : cannot find -lGL

c++ - 多态数组找出其中有哪些 child

c# - Silverlight 4 剪贴板安全异常 "access is not allowed"?

java - 三层架构风格如何运作?一些方便的例子

design-patterns - 域实体/对象并向其中注入(inject)服务感觉完全错误,有理由吗?

c++ - 为什么不使用 is_const 类型特征将 const 引用视为 const?