是否可以从编译的可执行文件中读取.qrc Qt资源文件?



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

我想知道的是:

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

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

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

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

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

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

并且会得到这样的东西:

00000001002162f0 l     F __TEXT,__text  __GLOBAL__sub_I_qrc_resources.cpp

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

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

最新更新