我正在尝试使用Spy ++从explorer.exe中找到处理这些消息的WndProc: exe闪烁任务栏按钮,这破坏了我的Windows 10体验。在Windows 10中,闪烁的任务栏按钮出现在所有桌面上,当专注于另一个虚拟桌面上的工作时,这简直令人发疯。不是我想要的功能。上面的消息被发送到explorer.exe中的任务切换器,如果我可以防止它们被处理,我可以击败它。从Spy ++开始,以下窗口是Spy ++(64位版本)的属性检查器:



在x64dbg中,我打开了线程:弄清楚如何在x64dbg中找到Window Proc?

评论

您是否能找到x64dgb的答案?

@ T.Todua是的,我还编写了一个AHK脚本来获取WndProc地址(请参阅此处的脚本,它也可以执行其他操作,但是一部分是WndProc)。下面的正确解决方案确实可以正常工作。

#1 楼

spy ++在屏幕快照中显示了wndproc(它可能是子类,您可能需要跟踪,但是wndproc在屏幕快照中显示为361c9880我不知道x64 dbg中的命令是什么,但是如果您在ollydbg上,则只需执行ctrl + g(goto)输入spy ++中所示的地址,然后中断并记录消息以进行过滤。在概念级别上应该没什么大不了的)


raymond chen的一篇文章谈到了返回可奇饼而不是wndprochttp://blogs.msdn.com/b/oldnewthing/archive/ 2003/12/01 / 55900.aspx

如果其他所有方法均失败,则将GetWindowLongPtrW组装到位以获取实际的WndProc。

运行64位calc.exe spy ++ 32位未显示wndproc
编写了一个脚本以在calc.exe的进程内存中分配页面,并使用脚本语言汇编了一个绕行的路径并获取了实际的WndProc
下面的屏幕快照



调试对象必须处于暂停状态

脚本分配内存在制表符之后,使用alloc
在调试地址空间中,一旦状态栏应显示新分配的地址
,变量$ lastalloc $ result应该保存新分配的内存地址的00 00应该盯着你

确认分配
如果分配了内存选项卡,脚本中的一步
push rcx应该组装在新分配的地址中
使用d地址或d $ lastalloc进行确认
,就像明智地汇编所有指令一样
在ecx中使用正确的句柄值(陈旧或重用的窗口句柄可能会提供错误的信息,请确认您正确地汇编了mov rcx,HWND正确
现在,您需要确保将正确的地址放入eax中,该地址应为user32.GetWindowLongPtrW
组装所有清理指令
您已完成的操作
将现有的rip保存到某个位置(将其记录在纸上)
右键单击并选择新分配的地址中的第一条指令,并将其设置为origin(此处为新起点) rip将更改为新分配的地址

,按f8键并执行一个
,当调用eax完成时,eax将保存Wndproc
保存(将其写入纸)

执行清理指令

按ctrl + g并输入旧的RIP
右键单击->这里的新来源(RIP现在将指向旧暂停debuggee时的值

,就是说现在您已经在纸中添加了Wndproc并返回了原始状态

这是绕道而行( debuggee的代码流做一些额外的工作,然后返回到进行旁路的地方,就好像没有做任何事情一样继续原始流)。

使用bp在您拥有的wndproc中设置一个断点在纸上

评论


太棒了!再次感谢。现在,即使我更改了我认为必须表示可以正常工作的实例,也可以使用脚本工作:00007FF6361C9880。在此之前,我必须一直错误地运行“原始” GetWindowLogPtrW。再次删除消息。

–中国
15年10月31日在18:40

我添加了有关如何使用脚本绕行的详细信息

– blabb
15年10月31日在18:46

它在explorer.exe中。和!我第一次阻止FlashWindow在任务切换器中执行此操作!每当它到达那里并繁荣时,我只是将消息C02B归零!现在,我正在研究如何制作可以在计算机上运行的内存修补程序,以便可以实时修补explorer.exe。

–中国
2015年10月31日19:00

仅供参考,我在此处记录内存补丁的创建:ciantic.blogspot.fi/2015/10/…

–中国
2015年10月31日在20:14

不错的输入,是的,如果不需要重用,则可以转储脚本并在模块本身的任何位置进行汇编

– blabb
2015年11月2日,9:58