钱乾星 发表于 2019-3-29 00:04

申请会员ID: ninecent【申请通过】

1、申 请 I D:ninecent
2、个人邮箱:3357427767@qq.com
3、原创技术文章:https://ninecents.github.io/course/Qt/00_Qt资源解析

# 00_Qt资源解析

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

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

!(https://ninecents.github.io/course/Qt/00_Qt资源解析/Everything搜索qt5core.dll结果.png)

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


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

关于如何创建Qt工程,添加资源文件不详细介绍了。随便百度搜一下就行了,这里参考了教程(https://blog.csdn.net/lbb2016/article/details/52675773)。

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

!(https://ninecents.github.io/course/Qt/00_Qt资源解析/Qt工程资源文件结构.png)

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


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

![资源文件编译分析](https://ninecents.github.io/course/Qt/00_Qt资源解析/资源文件编译分析.png)

- 在文件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;
}
```

使用流程如下图所示:

!(https://ninecents.github.io/course/Qt/00_Qt资源解析/dll注入流程.png)


# 结束语
- 不要用中文路径,可能编译失败。
- debug和release调用的qt库是不一样的,需要特别注意。
- MingW的工程和VS的工程也是不一样的,需要特别注意。
- 测试下一个Qt5.6的某exe,使用Qt5.8的dll,依然可以将文件导出。

Hmily 发表于 2019-3-29 10:54

I D:ninecent
邮箱:3357427767@qq.com

申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。

ps:申请通过后把文章整理一下发到脱壳破解区。

ninecent 发表于 2019-3-29 11:43

本帖最后由 ninecent 于 2019-3-29 13:21 编辑

新人报道,感谢大佬同意帖子。8年逆向经验,扎根逆向,改变世界:lol。
页: [1]
查看完整版本: 申请会员ID: ninecent【申请通过】