qt - 是否可以从已编译的可执行文件中读取 .qrc Qt 资源文件?
问题描述
我正在 Qt 中创建一个应用程序,用户可以使用它来读取一些机密文本文件。这个想法是,如果用户想要访问这个文件,他只能通过这个应用程序来访问,而不是直接读取它。我打算使用 qrc 资源添加此文件。
我想知道的是:
- 应用程序的用户是否有可能以某种方式从编译的可执行文件中“提取”嵌入式资源?
- 如果是这样,为了防止这种情况,是否可以在编译之前对所述资源进行加密或散列?
PS也许有人已经面临这种情况,并提出了比我想的更好的解决方案。如果是这样,总是欢迎新的想法。
解决方案
根据您的专业水平,您可能会使检索文本变得更加困难,但这种方式不会获得安全的结果。
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 部分中弹出。
因此,即使您遵循这一点以及人们可能会提供的进一步建议,这也只是一种混淆。欢迎来到密码学和隐写术的美妙世界。
推荐阅读
- sql - 会感谢一些对复杂子查询的 SQL 查询的帮助
- linux - docker 容器无法看到共享卷中的数据
- c++ - 无法理解头文件中的静态(内联)
- ios - VC销毁时UIView中存储的静态值不会被删除
- postgresql - chmod:更改“/var/lib/postgresql/data”的权限:不允许操作
- c - 我的功能有什么问题?我有找到所有常见字符并将它们连接成一个字符串的函数
- node.js - 如何在 Mocha 中测试特定的错误消息?
- typescript - 嵌套表单组多次触发更改检测
- git - GitHub | 获取不属于分支的提交
- reactjs - 如何呈现在 React 中作为响应接收到的完整 html 页面