首页
社区
课程
招聘
[下载][原创]Qt5--通过信号查找槽函数插件
发表于: 2021-3-15 13:55 9408

[下载][原创]Qt5--通过信号查找槽函数插件

2021-3-15 13:55
9408





https://github.com/2781553397/qt5_resolver.git,只能在version为7的qt上运行

查找Qt槽函数的插件--qt5_resolver完成。仍然有些问题无法解决,而且依旧只实现了-d参数。
在执行脚本时必须先暂停调试器.当信号被当作槽函数连接时,无法解析出对应的槽函数名称.这种情况下,被当作槽函数的信号并不在QObjectPrivate的ConnectionList中而是通过硬编码索引,利用activate路由到qt_static_metacall.如果有解决方法,希望有大佬能够提点我一下.
下面是测试代码以及脚本效果.
查找Qt槽函数的插件--qt5_resolver完成。仍然有些问题无法解决,而且依旧只实现了-d参数。
在执行脚本时必须先暂停调试器.当信号被当作槽函数连接时,无法解析出对应的槽函数名称.这种情况下,被当作槽函数的信号并不在QObjectPrivate的ConnectionList中而是通过硬编码索引,利用activate路由到qt_static_metacall.如果有解决方法,希望有大佬能够提点我一下.

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-4-29 17:30 被狐臭编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (23)
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
可以利用这个过检测
2021-4-5 15:45
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
程序跑起来进了x32dbg。但是插件没看到qt_resolver是为什么?然后我就直接把下载的里面的debug和release版本的里面的文件都放到x32dbg插件文件夹还是没看到这个插件额。我放其他的插件,可以看到其他的插件。
2021-4-29 16:11
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
原来有加载了!原来是输入命令行。但是要断在什么地方再输入命令行啊?还是随时可以?我输入了直接start然后就end了
2021-4-29 17:24
0
雪    币: 733
活跃值: (1395)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
5
Skyart 原来有加载了!原来是输入命令行。但是要断在什么地方再输入命令行啊?还是随时可以?我输入了直接start然后就end了
这东西不完整,跑起来会卡住,中间有个循环的条件要改一下.
https://github.com/2781553397/qt5_resolver.git,这个修正了,并且x64和x86,但是只能在version7的版本上跑,version8中只能打印出元数据名称
2021-4-29 17:28
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
狐臭 这东西不完整,跑起来会卡住,中间有个循环的条件要改一下. https://github.com/2781553397/qt5_resolver.git,这个修正了,并且x64和x86,但是只能在ve ...
使用方法是先获取到staticMetaObject结构体的地址,然后输入qt5_resolver -d 0x7AC07878吗?要如何知道staticMetaObject结构体的地址..我输入命令后一直提示异常DEP 违规,是为什么..
2021-4-30 11:14
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
version为7的qt 是指qt5.7吗?
2021-4-30 11:24
0
雪    币: 733
活跃值: (1395)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
Skyart version为7的qt 是指qt5.7吗?
qt的metaData中有一个DWORD来标识版本,我在看5.14的时候发现变成了8.
  static const uint qt_meta_data_MainWindow[] = {
 
 // content:
   7,       // 版本
   0,       // classname
   0,    0, // classinfo
   2,   14, // 函数个数,函数偏移
   0,    0, // properties
   0,    0, // enums/sets
   0,    0, // constructors
   0,       // flags
   1,       // signalCount
 
 // signals: name, argc, parameters, tag, flags
   1,    0,   24,    2, 0x06 /* Public */,
 
 // slots: name, argc, parameters, tag, flags
   3,    1,   25,    2, 0x0a /* Public */,
 
 // signals: parameters
QMetaType::Int,
 
 // slots: parameters
QMetaType::Void, QMetaType::Int,    4,
 
   0        // eod
};
2021-4-30 20:36
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
win10 下 ,运行起来一直提示DEP violation,我的demo有关了DEP的那个选项,但是还是一直提示这个异常是为什么?
2021-5-6 14:12
0
雪    币: 733
活跃值: (1395)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
10
Skyart win10 下 ,运行起来一直提示DEP violation,我的demo有关了DEP的那个选项,但是还是一直提示这个异常是为什么?
这个和dep有啥关系
2021-5-6 15:06
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
 x32dbg日志一直提示dep violation,然后一直循环异常,我单步跟到GetMetaObject的GUARD_GENTLE(ReadMemory(tovptr(vtable_addr), &fmetaObject_addr, sizeof(fmetaObject_addr), handle), 0);这句代码后,步过这句代码就会开始提示dep violation(我也不懂为啥dep异常,囧)
2021-5-6 17:32
0
雪    币: 733
活跃值: (1395)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
12
Skyart x32dbg日志一直提示dep violation,然后一直循环异常,我单步跟到GetMetaObject的GUARD_GENTLE(ReadMemory(tovptr(vtable_addr), ...
读内存数据怎么会触发dep呢?是不是版本的问题,我也没有遇到过dep violation,你要不把你测试的demo传上来看看.
2021-5-6 17:42
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
链接:https://pan.baidu.com/s/1xTJL94R7ZTODV6H-s3KbCg 
提取码:qott 
2021-5-6 19:50
0
雪    币: 733
活跃值: (1395)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
14
Skyart 链接:https://pan.baidu.com/s/1xTJL94R7ZTODV6H-s3KbCg 提取码:qott

没有问题啊,可以正常运行.你的qt是version8,version8的qt connectList结构发生了改变,所以只能打印出函数名没办法获取到对应的槽索引.


2021-5-7 09:54
0
雪    币: 733
活跃值: (1395)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
15
Skyart 链接:https://pan.baidu.com/s/1xTJL94R7ZTODV6H-s3KbCg 提取码:qott
脚本没有办法自己判别,输入是否为qt的对象,输入的时候最好自己确认,具体就是看他的一号虚函数是否为metaObject
2021-5-7 09:58
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
狐臭 脚本没有办法自己判别,输入是否为qt的对象,输入的时候最好自己确认,具体就是看他的一号虚函数是否为metaObject

你的也是windows10吗?输入命令qt_resolver -d 0x406000

我找到metaobject是对的吗?

异常是这样

2021-5-7 14:27
0
雪    币: 733
活跃值: (1395)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
17
Skyart 你的也是windows10吗?输入命令qt_resolver -d 0x406000我找到metaobject是对的吗?异常是这样

也是windows10

-d接收一个QObject类型的对象,并从中解析qt的槽和元数据
-s解析一个QString对象并取出其中的字符串

脚本中获取staticMetaObject的方法是通过调试器函数强行修改EIP,使其跳转到metaObject函数,并且需要在栈中压入EIP之类的数据

,你可以看看有没有对应权限

metaObject一般长这样,里面一般可以直接看到staticMetaObject:

最后于 2021-5-7 16:56 被狐臭编辑 ,原因:
2021-5-7 16:46
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
ret上面那句把staticMetaObject放到eax,那我就是输入qt_resolver -d (eax里的地址)。    是这样操作吗?。还是说输入qt_resolver -d 0x680C3690?(你的图片上的第一个地址)
2021-5-8 09:14
0
雪    币: 733
活跃值: (1395)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
19
Skyart ret上面那句把staticMetaObject放到eax,那我就是输入qt_resolver -d (eax里的地址)。 是这样操作吗?。还是说输入qt_resolver -d 0x680C3 ...
qt_resolver -d QObject的地址,也就是一个继承了QObject的对象的地址就可以了
2021-5-8 09:30
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20

我现在区分不出来哪个是QObject的地址额。在你的demo里面,你的QObject的地址是0x680C3690吗?在我的demo里面,我的QObject是0x406000吗?我的0x406000长这样

2021-5-10 10:27
0
雪    币: 733
活跃值: (1395)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
21
Skyart 我现在区分不出来哪个是QObject的地址额。在你的demo里面,你的QObject的地址是0x680C3690吗?在我的demo里面,我的QObject是0x406000吗?我的0x406000长这 ...

你看他的第一个虚函数是不是metaObject()就行了,metaObject函数大概长这样

2021-5-11 10:38
0
雪    币: 733
活跃值: (1395)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
22
Skyart 我现在区分不出来哪个是QObject的地址额。在你的demo里面,你的QObject的地址是0x680C3690吗?在我的demo里面,我的QObject是0x406000吗?我的0x406000长这 ...

比如说我要获取QWidget函数信息,我直接在QWidget::show()处下断点,然后执行qt5_resolver -d rcx(对象地址),就可以了

2021-5-11 10:43
0
雪    币: 154
活跃值: (639)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
请问有没有x64dbg
2023-2-11 17:26
0
雪    币: 733
活跃值: (1395)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
24
许可飞 请问有没有x64dbg[em_13]
换个版本编译
2023-3-17 09:27
0
游客
登录 | 注册 方可回帖
返回
//