我正在Qt中创建一个应用程序,用户可以使用它来读取一些机密文本文件。这个想法是,如果用户想要访问此文件,他只能通过此应用程序进行访问,而不能直接读取它。我计划使用 qrc 资源添加此文件。
我想知道的是:
- 应用程序的用户是否可以以某种方式从编译的可执行文件中"提取"嵌入的资源?
- 如果是这样,为了防止这种情况,是否可以在编译之前对所述资源进行加密或哈希处理?
附言也许有人已经面对这种情况,并提出了比我所想的更好的解决方案。如果是这样,总是欢迎新的想法。
根据您的专业水平,您可能会使检索文本变得更加困难,但这样您不会获得安全的结果。
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 部分中弹出。
因此,即使您遵循这一点以及人们可能给出的进一步建议,也只是混淆。欢迎来到密码学和隐写学的奇妙世界。