首页 > 解决方案 > 是否可以从已编译的可执行文件中读取 .qrc Qt 资源文件?

问题描述

我正在 Qt 中创建一个应用程序,用户可以使用它来读取一些机密文本文件。这个想法是,如果用户想要访问这个文件,他只能通过这个应用程序来访问,而不是直接读取它。我打算使用 qrc 资源添加此文件。

我想知道的是:

  1. 应用程序的用户是否有可能以某种方式从编译的可执行文件中“提取”嵌入式资源?
  2. 如果是这样,为了防止这种情况,是否可以在编译之前对所述资源进行加密或散列?

PS也许有人已经面临这种情况,并提出了比我想的更好的解决方案。如果是这样,总是欢迎新的想法。

标签: qtqt5

解决方案


根据您的专业水平,您可能会使检索文本变得更加困难,但这种方式不会获得安全的结果。

rcc(Qt 的资源编译器)尝试压缩资源,如果资源压缩到小于 30%,它将压缩资源。否则,资源将解压缩到您的可执行文件中。作为起点,您可以通过使用 option 调用 rcc 来说服 rcc 始终进行压缩-threshold 1

接下来,您必须确保从交付中删除所有调试符号,否则精明的代码阅读器会执行以下操作:

objdump -all-headers your.app/Contents/MacOS/your | grep qrc

并会得到这样的东西:

00000001002162f0 l     F __TEXT,__text  __GLOBAL__sub_I_qrc_resources.cpp

其中 00000001002162f0 是反汇编可执行文件的良好起点。仍然:即使您删除了所有调试符号,您的资源也将始终在代码的 DATA 部分中弹出。

因此,即使您遵循这一点以及人们可能会提供的进一步建议,这也只是一种混淆。欢迎来到密码学和隐写术的美妙世界。


推荐阅读