首页
社区
课程
招聘
[原创]x64dbg快速找call插件
发表于: 2023-7-9 22:55 31462

[原创]x64dbg快速找call插件

2023-7-9 22:55
31462

不知道各位调试GUI程序时,想定位某个功能的代码一般是用什么方式呢?通常我们会根据经验在某个系统API下断,然后栈回溯往上找关键call。
为了简化这个过程,我借鉴cheat engine找数据的方法,开发了一个找call的调试器插件。插件原理是扫描用户模块(exe+dll)中的函数,然后设置breakif(0)的条件断点,这样就可以获取函数被调用的次数。随后我们触发一次某个功能,就搜索一次调用次数,这样很快就能找到关键call。
下面是用法演示:
比如我们想知道winspy++程序是如何枚举窗口的,最直接的方式就是找到"Refresh"按钮的点击事件:

图片描述

先让程序跑起来,然后调出插件,点击"scan functions"按钮,默认会以“快速模式”扫描主模块中的函数并下断点:

图片描述

然后我们点击一次"Refresh"按钮,在call count文本编辑框输入1,再点击search:

图片描述

图片描述


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2023-9-27 23:49 被hambaga编辑 ,原因: 更新附件
上传的附件:
收藏
免费 43
支持
分享
打赏 + 25.00雪花
打赏次数 2 雪花 + 25.00
 
赞赏  游乐娃子   +20.00 2023/07/11 助人为乐~
赞赏  执着的追求   +5.00 2023/07/10 思路很棒。
最新回复 (63)
雪    币: 4460
活跃值: (6706)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
赞一个先
2023-7-9 23:05
0
雪    币: 3059
活跃值: (30876)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2023-7-9 23:47
1
雪    币: 7946
活跃值: (4689)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
可以啊 !关键是想法的创意好,难度不算高,想法太棒了 !非常赞
2023-7-10 04:01
0
雪    币: 35726
活跃值: (7155)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
图片挂了,哥们!能否加上是否踩中功能?貌似配合调试视图即可办到。
2023-7-10 04:48
0
雪    币: 7946
活跃值: (4689)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
测试效果不错,反馈个bug, 插件会导致程序无法停在入口点,直接跑飞
2023-7-10 04:52
0
雪    币: 162
活跃值: (893)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
很赞的插件,后续继续加油
2023-7-10 07:44
0
雪    币: 162
活跃值: (893)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
 插件会导致程序无法停在入口点,直接跑飞
2023-7-10 08:01
0
雪    币: 8848
活跃值: (3088)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
喜欢傻瓜模式
2023-7-10 09:32
0
雪    币: 257
活跃值: (710)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
插件挺好,但体验过程有以下问题:
1.调试的软件会直接跑起来???没停在入口?
2.查找函数的时间如果能快一点的话可能体验更好,或者是弄一个搜索的进度条?
3.找出的CALL能否加一个右键全部下断点的功能?
4.现在是不是只增增加1次???加第二次我点了没反应?
2023-7-10 09:57
0
雪    币: 5709
活跃值: (2583)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
构思很巧妙
2023-7-10 10:02
0
雪    币: 183
活跃值: (2576)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
yuyuchun 插件挺好,但体验过程有以下问题: 1.调试的软件会直接跑起来???没停在入口? 2.查找函数的时间如果能快一点的话可能体验更好,或者是弄一个搜索的进度条? 3.找出的CALL能否加一个右键全部下 ...
1.入口跑飞是因为附加后自动bc清除断点,我稍后调整一下;
3.扫描函数后会自动下断点breakif(0)
4.编辑框输入的数字就是函数调用次数,需要手动改
2023-7-10 10:09
0
雪    币: 183
活跃值: (2576)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
ninebell 图片挂了,哥们!能否加上是否踩中功能?貌似配合调试视图即可办到。
没太明白,有参考资料吗
2023-7-10 10:10
0
雪    币: 162
活跃值: (893)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
hambaga 没太明白,有参考资料吗
 不是附加的时候一样跑飞,载入程序就跑飞了,需要调整一下程序逻辑。
还有那个API断点插件,重载的时候断点一直都在,哪怕是取消了断点再重载还是会存在断点的bug
2023-7-10 10:23
0
雪    币: 6095
活跃值: (5510)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
15
感谢分享!
2023-7-10 10:42
0
雪    币: 25393
活跃值: (4767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
andydau 不是附加的时候一样跑飞,载入程序就跑飞了,需要调整一下程序逻辑。 还有那个API断点插件,重载的时候断点一直都在,哪怕是取消了断点再重载还是会存在断点的bug
楼主的附加跟你的附加不是一回事,程序载入就附加了,这时清除断点就会把原有的断点清除,只要载入过的软件断点都会没有了,也没有备份,这对我这种喜欢在断点上做记录的不是很友好,如果能手动选择是否启用插件,并提供备份功能(其实就是备份db目录下的.dd64文件),这样就比较人性化了;API断点插件要清除断点需要在插件里取消勾选,在断点列表删除断点会自动再加上,所以你会以为是断点没有删除成功
2023-7-10 10:51
0
雪    币: 8761
活跃值: (5220)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
这就是创新。。。
2023-7-10 11:00
0
雪    币: 4718
活跃值: (3703)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
思路很好呀,可以继续完善插件
2023-7-10 12:42
0
雪    币: 4207
活跃值: (4262)
能力值: ( LV3,RANK:37 )
在线值:
发帖
回帖
粉丝
19
和ce的code filter基本差不多。但是看着比ce的好使点
2023-7-10 14:59
1
雪    币: 268
活跃值: (3233)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
20
找到四万个多断点,,直接卡死~~
2023-7-10 15:45
1
雪    币: 183
活跃值: (2576)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
gtict 找到四万个多断点,,直接卡死~~
超过1000+断点会卡爆,后续再想办法优化,目前是调不了游戏的
2023-7-10 16:05
0
雪    币: 14846
活跃值: (6078)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22

原代码级?代码加花或混淆就找不到call。对所有call下断效率低执行速度慢。
既然是原代码,直接用IDA反编译再分析比较好。再就是你说的,对相关api下断再回朔也可以。
你这个优点是适合盲扫call

最后于 2023-7-10 16:16 被tDasm编辑 ,原因:
2023-7-10 16:15
0
雪    币: 183
活跃值: (2576)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
23
qqzxc 和ce的code filter基本差不多。但是看着比ce的好使点
学习了
2023-7-10 16:17
0
雪    币: 4515
活跃值: (1685)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
感谢分享精彩的思路。
2023-7-10 16:50
0
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
25
思路不错,很适合爆破一些功能限制的程序
2023-7-10 16:55
1
游客
登录 | 注册 方可回帖
返回
//