不知道各位调试GUI程序时,想定位某个功能的代码一般是用什么方式呢?通常我们会根据经验在某个系统API下断,然后栈回溯往上找关键call。
为了简化这个过程,我借鉴cheat engine找数据的方法,开发了一个找call的调试器插件。插件原理是扫描用户模块(exe+dll)中的函数,然后设置breakif(0)的条件断点,这样就可以获取函数被调用的次数。随后我们触发一次某个功能,就搜索一次调用次数,这样很快就能找到关键call。
下面是用法演示:
比如我们想知道winspy++程序是如何枚举窗口的,最直接的方式就是找到"Refresh"按钮的点击事件:
先让程序跑起来,然后调出插件,点击"scan functions"按钮,默认会以“快速模式”扫描主模块中的函数并下断点:
然后我们点击一次"Refresh"按钮,在call count文本编辑框输入1,再点击search:
这样就把范围缩小到4个函数,只需要手工确认一下就可以发现第二个函数就是我们想找的关键call:
整个过程只花了一分钟,关键是不怎么费脑子~~
编译好的插件dp32、dp64只需复制到x64dbg插件目录即可。
源码链接如下:
更多【x64dbg快速找call插件】相关视频教程:www.yxfzedu.com