锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务,锦州广厦维修电脑,公司IT外包服务
topFlag1 设为首页
topFlag3 收藏本站
 
maojin003 首 页 公司介绍 服务项目 服务报价 维修流程 IT外包服务 服务器维护 技术文章 常见故障
锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务技术文章
通过消息断点,确定按钮的单击事件

作者: springwillow  日期:2017-05-06 19:57:42   来源: 本站整理

 通过消息断点,确定按钮的单击事件。
简单的小程序如下:
 
注册名密码正确会弹出正确的对话框,错误会弹出错误的对话框。
首先来看一下源码:

[C++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "stdafx.h"
#include "resource.h"
BOOL CALLBACK DialogProc(
  HWND hwndDlg,  // handle to dialog box
  UINT uMsg,     // message
  WPARAM wParam, // first message parameter
  LPARAM lParam  // second message parameter
)
{
        HWND hEditUser=NULL;
        HWND hEditPass=NULL;
        switch(uMsg)
        {
        case WM_COMMAND:
                {
                        switch(LOWORD(wParam))
                        {
                        case IDOK:
                                {
                                        TCHAR szUserBuffer[0x50];
                                        TCHAR szPassBuffer[0x50];
                                        hEditUser=GetDlgItem(hwndDlg,IDC_EDIT_UserName);
                                        hEditPass=GetDlgItem(hwndDlg,IDC_EDIT_PassWord);
                                        GetWindowText(hEditUser,szUserBuffer,0x50);
                                        GetWindowText(hEditPass,szPassBuffer,0x50);
                                        if ((strcmp(szUserBuffer,"") !=NULL)&&(strcmp("",szPassBuffer) !=NULL))
                                        {
                                                if (strcmp(strcat(szUserBuffer,TEXT("abc")),szPassBuffer) ==NULL)
                                                {
                                                        MessageBox(NULL,TEXT("恭喜密码正确"),TEXT("正确"),MB_OK);
                                                }
                                                else
                                                {
                                                        MessageBox(NULL,TEXT("密码错误"),TEXT("错误"),MB_OK);
                                                }
                                        }
                                        else
                                                MessageBox(NULL,TEXT("用户名密码不能为空"),TEXT("错误"),MB_OK);
                                        return true;
                                }
                        case IDCANCEL:
                                {
//                                        MessageBox(NULL,TEXT("IDC_Button_CANCEL"),TEXT("取消"),MB_OKCANCEL);
                                        DestroyWindow(hwndDlg);
                                        return false;
                                }
                        }
                }
        }
        return false;
}
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
         // TODO: Place code here.
        DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);
        return 0;
}


Windows是基于消息驱动的,我们就是要通过拦截消息来确定按钮的事件,通过上面的源码我们可以看出,鼠标左键的消息是通过WM_COMMAND消息传递的,而WM_COMMAND宏对应的十六进制为0x0111。
打开OD载入,F9跑起来,点开W窗口,如下图:
 
找到确定按钮右键
 
选择消息断点,弹出如下界面
 
选择WM_LBUTTONUP.确定。切换到程序窗口界面随便输入用户名和密码,点确定。
 
我们会断到下面的位置
 
点击m模块
 
在代码段下断点
 
F9跑起来,来到这里断下了
 
下面是关键的地方了,我们来看ESP寄存器和堆栈,画过堆栈图的人都应该知道,现在ESP所指的是函数返回的地址,[ESP+4]为DialogProc的第一个参数,即对话框的句柄,[ESP+8]是第二个参数即消息类型uMsg,只有uMsg为WM_COMMAND,即为0x0111的时候才是我们要拦截的消息,所以我们在这下条件断点。
 
 
下好断点后,我们再让程序跑起来。被断下来的我们看esp+8的位置是不是0x0111。
 
这个就是我们要跟踪的按钮事件了。好我了我们单步跟踪,我们一直跟到这个地方,就是关键跳了,直接nop掉就搞定了。
 



热门文章
  • 机械革命S1 PRO-02 开机不显示 黑...
  • 联想ThinkPad NM-C641上电掉电点不...
  • 三星一体激光打印机SCX-4521F维修...
  • 通过串口命令查看EMMC擦写次数和判...
  • IIS 8 开启 GZIP压缩来减少网络请求...
  • 索尼kd-49x7500e背光一半暗且闪烁 ...
  • 楼宇对讲门禁读卡异常维修,读卡芯...
  • 新款海信电视机始终停留在开机界面...
  • 常见打印机清零步骤
  • 安装驱动时提示不包含数字签名的解...
  • 共享打印机需要密码的解决方法
  • 图解Windows 7系统快速共享打印机的...
  • 锦州广厦电脑上门维修

    报修电话:13840665804  QQ:174984393 (联系人:毛先生)   
    E-Mail:174984393@qq.com
    维修中心地址:锦州广厦电脑城
    ICP备案/许可证号:辽ICP备2023002984号-1
    上门服务区域: 辽宁锦州市区
    主要业务: 修电脑,电脑修理,电脑维护,上门维修电脑,黑屏蓝屏死机故障排除,无线上网设置,IT服务外包,局域网组建,ADSL共享上网,路由器设置,数据恢复,密码破解,光盘刻录制作等服务

    技术支持:微软等