-
-
[原创][Qt] 00_Qt资源解析
-
发表于: 2019-4-9 23:32 7298
-
Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。
Qt使用还是很广泛的,为了大家有一个直观的概念,我用Everything搜索了下我电脑上的qt5core.dll,部分结果如下图所示:
从图中可以看到,android模拟器、魔兽战网平台、Origin游戏平台、x64dbg都使用了qt框架,除此之外还有很多应用使用了Qt,市面上对Qt的逆向也很多,在这里我们将分析如何导出Qt中的图片资源,其他资源暂时未找到方法,有大神知道的不吝赐教。
关于如何创建Qt工程,添加资源文件不详细介绍了。随便百度搜一下就行了,这里参考了教程Qt中为工程添加资源文件、给按钮添加图片。
下面我我的工程资源文件截图,包含了资源:
我们的任务就是将logo.ico文件从生成的exe中导出来。
通过Qt官网文档可以知道,项目中的res.qrc文件,会被编译为qrc_res.cpp。我们通过Hex Workshop查看文件二进制内容;通过python查看文件大小;通过Qt Creator打开qrc_res.cpp。我们先看下下面截图内容:
分析到这里,可以确定文件不是简单的被保存的PE文件的资源段中的,而且有可能被压缩处理了。那就换个思路,通过调用资源文件的方式将文件调用到内存中。
Qt中加载文件是通过路径“:/new/prefix1/logo.ico”加载的,直接构造对象QPixmap,即可加载图片资源,调用QPixmap的save函数即可将文件保存起来,那么我们写个dll,直接执行这些函数是不是就可以了呢。
由于我使用的MingW的工程写的Demo,我们这里也使用MingW的编译器创建工程mydll,工程为dll工程。内容很简单,创建一个类Mydll,并创建个全局对象Mydll g_dll;,在构造函数中调用保存文件的逻辑,具体代码如下:
使用流程如下图所示:
如果只有vs,不使用qt,需要构造相关的数据结构,比如QString等;或者直接调用Qt5Core.dll导出函数构造相关的数据结构。简单的包含一此头文件,编译会失败的。
九分出品,欢迎吐槽。更多精彩,可以前往博客地址。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
- [frida] [踩坑] objection报错《Unable to connect to the frida server: unable to connect to remote frida-server: Connection closed》 7738
- [求助]PCHunter最新版无法运行! windows10 教育版 1909 18363.1198 17078
- [原创][frida] 01_Android环境搭建 4236
- [原创]【程序员日记】2020-02-29__抓取CSDN博客保存为本地Markdown文件 4514
- [原创] [Windows驱动开发] 01_内存读取 20786