吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9640|回复: 12
收起左侧

[原创] [Qt] 00_Qt资源解析

[复制链接]
ninecent 发表于 2019-3-29 14:05

[Qt] 00_Qt资源解析

前言

Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。

Qt使用还是很广泛的,为了大家有一个直观的概念,我用Everything搜索了下我电脑上的qt5core.dll,部分结果如下图所示:

Everything搜索qt5core.dll结果

从图中可以看到,android模拟器、魔兽战网平台、Origin游戏平台、x64dbg都使用了qt框架,除此之外还有很多应用使用了Qt,市面上对Qt的逆向也很多,在这里我们将分析如何导出Qt中的图片资源,其他资源暂时未找到方法,有大神知道的不吝赐教。

创建含有资源的Qt程序示例

关于如何创建Qt工程,添加资源文件不详细介绍了。随便百度搜一下就行了,这里参考了教程Qt中为工程添加资源文件、给按钮添加图片

下面我我的工程资源文件截图,包含了资源:

Qt工程资源文件结构

我们的任务就是将logo.ico文件从生成的exe中导出来。

分析思路

通过Qt官网文档可以知道,项目中的res.qrc文件,会被编译为qrc_res.cpp。我们通过Hex Workshop查看文件二进制内容;通过python查看文件大小;通过Qt Creator打开qrc_res.cpp。我们先看下下面截图内容:

资源文件编译分析

  • 在文件qrc_res.cpp中的注释,我们可以知道,qt_resource_data数组保存了logo.ico文件内容;

  • 查看文件大小为67,646 字节,通过python查看文件大小为0x1083e;0x1083e也的确被保存在了qt_resource_data数组中,内容为0x0,0x1,0x8,0x3e,

  • 比对Hex Workshop文件内容和qt_resource_data数组,可以发现内容是不一样的,显然内容被压缩了。

分析到这里,可以确定文件不是简单的被保存的PE文件的资源段中的,而且有可能被压缩处理了。那就换个思路,通过调用资源文件的方式将文件调用到内存中。

Qt中加载文件是通过路径“:/new/prefix1/logo.ico”加载的,直接构造对象QPixmap,即可加载图片资源,调用QPixmap的save函数即可将文件保存起来,那么我们写个dll,直接执行这些函数是不是就可以了呢。

编写功能

由于我使用的MingW的工程写的Demo,我们这里也使用MingW的编译器创建工程mydll,工程为dll工程。内容很简单,创建一个类Mydll,并创建个全局对象Mydll g_dll;,在构造函数中调用保存文件的逻辑,具体代码如下:


Mydll g_dll;

Mydll::Mydll()

{

    char *res = ":/new/prefix1/logo.ico";

    QString localname = QString("D") + res;

    QPixmap icon(res);

    icon.save(localname);

    return;

}

使用流程如下图所示:

dll注入流程

结束语

  • 不要用中文路径,可能编译失败。

  • debug和release调用的qt库是不一样的,需要特别注意。

  • MingW的工程和VS的工程也是不一样的,需要特别注意。

  • 测试下一个Qt5.6的某exe,使用Qt5.8的dll,依然可以将文件导出。

免费评分

参与人数 4威望 +1 吾爱币 +9 热心值 +4 收起 理由
Lugia + 1 + 1 用心讨论,共获提升!
WA自动机 + 1 用心讨论,共获提升!
gunxsword + 1 + 1 谢谢@Thanks!
Hmily + 1 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

剑舞 发表于 2019-12-22 02:33
QT有一个专用的资源编译器可以解包出所有的资源。
 楼主| ninecent 发表于 2019-3-30 11:21
w5645060 发表于 2019-3-30 10:53
那问题来了,怎么知道一个资源的路径呢?

这是个好问题,方法也挺多:
CE搜索字符串“:/”
OD、IDA字符串删选“:/”
关注资源,对应的构造函数,下断点或者IDA查找一下,都能定位资源路径

分析某软件的时候,尝试了,将所有图片资源(15个左右)都导出来了。
zhebie84 发表于 2019-3-29 22:03
sureselsun 发表于 2019-3-29 23:27
很好,不错
durongze 发表于 2019-3-30 00:05
一个小功能,分析的这么透彻。。。。。。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ninecent + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| ninecent 发表于 2019-3-30 06:55
durongze 发表于 2019-3-30 00:05
一个小功能,分析的这么透彻。。。。。。

有需求,想找各种类型资源的,现在只能搞定图片,还需努力
王灯泡 发表于 2019-3-30 10:24
厉害666
gunxsword 发表于 2019-3-30 10:33
不错不错,这种方法还没尝试过,不过...还有点没有完全明白,有空试试!
gunxsword 发表于 2019-3-30 10:35
本帖最后由 gunxsword 于 2019-3-30 10:39 编辑

这种方法,如果用其它的开发工具,比如VS这种,要怎么实现呢?

其它的工具,简单的包含一此头文件,也可以实现

QString localname = QString("D") + res;    QPixmap icon(res);


这些代码吗?
头像被屏蔽
w5645060 发表于 2019-3-30 10:53
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| ninecent 发表于 2019-3-30 11:18
gunxsword 发表于 2019-3-30 10:35
这种方法,如果用其它的开发工具,比如VS这种,要怎么实现呢?

其它的工具,简单的包含一此头文件,也可以实现 ...

vs+qt,代码是一样的
如果只有vs,不使用qt,需要构造相关的数据结构,比如QString等;或者直接调用Qt5Core.dll导出函数构造相关的数据结构。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 18:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表