我正在为我的C++应用程序创建一个包含HTML/CSS/JS文件的存档,我不希望用户能够访问这些文件。所以,我决定用密码加密档案。
我的第一个想法是通过预处理器宏(通过CMake(将密码存储在程序中。但是,它安全吗?
你能从编译后的应用程序中访问回密码吗?(exe,在我的情况下(如果可以的话,如何保护自己?这在技术上可行吗?还是我应该放弃并保持现状?
如果宏实际上在应用程序中使用,那么是的,它在可执行文件中是可访问的——它有供程序使用。
嵌入程序中的任何凭据都可以被动机充分的攻击者恢复。没有加密机制可以防止这种情况发生,因为您需要提供解密密钥才能使程序运行。
证明非常简单:如果程序本身可以在没有任何用户输入的情况下获得凭据,那么可执行文件必须包含密钥,或者生成/导出密钥所需的所有信息。因此,任何人(具有必要的专业知识(都必须能够仅使用可执行文件中的信息生成凭证。
这可以通过检查可执行文件来完成。它也可以通过在调试器的监督下运行可执行文件并观察它在做什么来完成。
这也是DRM方案毫无意义的原因——消费者必须拥有密钥才能使用材料,如果他们能拿到密钥(他们必须能够拿到密钥才能消费内容(,那么他们的方案就不起作用了。(当然,在较新的DRM方案中,密钥被隐藏在一个芯片中,该芯片设计用于在密钥被打开时销毁密钥,但这只是意味着很难获得密钥,而不是不可能。(
tl;dr:这从来都不是能否恢复嵌入密钥的问题。这总是有可能的。这是一个需要付出多少努力才能恢复该密钥的问题。