首页 > 其他 > 详细

消息断点

时间:2021-04-01 00:39:20      阅读:17      评论:0      收藏:0      [点我收藏+]

  消息断点时条件断点的一种,可以用来查找窗口函数。

  下面来看一看消息断点的使用

  技术分享图片

 

  找到正确的账户和密码。

  先将程序拖入OD中,由于消息断点是在程序中运行时使用的,所以先让程序运行

技术分享图片

 

 点击上方的W按钮,查看程序的窗口

技术分享图片

 

选择登录按钮的那一行,右击,选择在ClassProc上设置消息断点

技术分享图片

 

 这时候我们需要消息的类型,因为登录是一个按钮,所以这里有两个选项WM_BUTTONDOWN和WM_BUTTONUP,我们启动程序,单击左键不放时,没有窗口弹出,松开时,error弹出,所以应该要选择WM_BUTTONUP.

这是我们在OD弹出的窗口中左击登录按钮,就自动停在了按钮的窗口函数中。

技术分享图片

 

 

因为当按钮的窗口函数处理完类型为WM_BUTTONUP的消息时,会发送新的消息给我们自己定义的窗口函数,而我们的窗口函数位于代码段,我们我们只需要在代码段中设置断点,按F9就可以停在我们的窗口函数处。、

点击上方的M按钮,找到.text,并设置内存访问断点

技术分享图片

 

技术分享图片

 

 根据窗口函数的参数和调用约定,我们可以看到esp+8的位置处时uMsg,即消息类型,此时的消息类型并不是WM_COMMAND,所以我们需要在执行一次,

等到uMsg为WM_COMMAND.

技术分享图片

 

此时的消息类型就是我们所需要的。

这是时跟进主函数

技术分享图片

 

0040105C |. 8D7C24 0C lea edi, dword ptr [esp+C]         edi指向字符串的首地址
00401060 |. 83C9 FF or ecx, FFFFFFFF             ecx==FFFFFFFF
00401063 |. 33C0 xor eax,                 eax eax==0
00401065 |. F2:AE repne scas byte ptr es:[edi]            在字符串中查找al的值,此时al=0;因为是rep循环,所以ecx--,edi++;
00401067 |. F7D1 not ecx                  ecx等于字符串长度,包括了空字符
00401069 |. 49 dec ecx ecx-1                 此时ecx等于字符串长度

这里的两端代码是判断字符串长度是否等于3和5,是的话eax=1,不是的话eax=0.

回到回调函数

技术分享图片

 

 test eax,对eax进行与运算,所以当eax=1时,zf=0;当eax=0时,zf=1,进行跳转,所以OK的条件就是字符串长度为3和5.

 

消息断点

原文:https://www.cnblogs.com/yanmo/p/14603525.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!