上篇讲的是对程序的定时器消息下断点,如果要拦截用户消息,比如点击按钮等,则需要对消息WM_COMMAND下条件断点,下断点的位置与定时器消息相同,步骤如下:

1 首先找到CWnd::WindowProc函数,进入这个函数以后在函数OnWndMsg前下条件断点,条件为[ebp+8]==WM_COMMAND,代码如下

A4]                ; OnWndMsg

点击程序按钮,断下command消息,F7跟进73D31B95

>

与WM_TIMER消息不通,此时在73D31BE1处不会发生跳转,继续F8到call处,跟进,进入OnCommand函数中,继续F8,直到call函数_CDialog::OnCmdMsg处

>

跟进这个call

              push    ebx
73D9DEA8    E8 0844F9FF     call    #4424_CCmdTarget::OnCmdMsg

很快发现了对_CCmdTarget::OnCmdMsg的call,继续跟进,在这个函数中会调用_AfxDispatchCmdMsg对消息进行分发,只要跟进这个函数很快就能找到消息处理函数了,继续F8寻找_AfxDispatchCmdMsg函数

              push    edi
73D323BA    E8 7F000000     call    73D3243E

终于找到了,跟进这个call,来到函数_AfxDispatchCmdMsg内部,跟进遇见的第一个call

73D324BA    8B4D 08         mov     ecx, dword ptr [ebp+8]
73D324BD    FF55 
14         call    dword ptr [ebp+14]                 ; MFC42.73D4AAB0

这是一个MFC42领空的调用,进入以后代码如下

73D4AAB0    8B01            mov     eax, dword ptr [ecx]
73D4AAB2  
- FFA0 CC000000   jmp     dword ptr [eax+CC]                 ; 拦截按钮.004014A0

出现了程序领空了,这里不是用的call,是直接jmp过去的,跟进,消息处理函数终于出来了!哈

]     ; \SetTimer
004014B3   .  C3            retn

消息处理函数很简单,就是调用下定时器,再结合上篇寻找定时器消息相应函数的方法,这个程序的秘密已经完全被消除了,oh yeah!

例程源代码

相关文章:

  • 2021-10-16
  • 2022-12-23
  • 2022-01-20
  • 2021-11-17
  • 2021-09-29
  • 2021-08-27
  • 2021-06-05
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-05-26
  • 2022-02-26
  • 2021-10-12
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案