首页
社区
课程
招聘
[求助]LordPE添加WM-CHAR事件的问题请教
发表于: 2009-7-15 21:41 5409

[求助]LordPE添加WM-CHAR事件的问题请教

2009-7-15 21:41
5409
我平时习惯用ESC退出程序。发现lordPe不接收这个退出

所以我想添加这个事件,原理就是拦截WM-CHAR事件,然后再判断输入的是不是ESC吧?

我用OD找到LORDPE的消息循环处,我来到CMP,EAX,111,
111是WM—COMMAND的ID。然后我JMP过去判断wm_char。102

可是就是拦不到。我拦截左鼠标按下就可以拦。

CMP EAX,102
JE SHORT 004183FF
CMP EAX,111
JMP 004047FE
NOP
JMP SHORT 004183FA

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
都一天了,咋了?
2009-7-16 11:28
0
雪    币: 50161
活跃值: (20630)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
拦不到,说明不是这个消息循环。
你用IDA反一下,找到相关的消息循环,再用OD配合。
2009-7-16 11:36
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我确定我找对了,因为我把CMP EAX,102改成CMP EAX,120

120是左键单击的消息ID。

这个就拦截到了。

我后来又考虑发是不是没焦点的问题,发现也不是
2009-7-16 22:43
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
要不坛主你可以给LORDPE的主界面加个ESC事件看下》?
2009-7-17 00:08
0
雪    币: 50161
活跃值: (20630)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
00404A88   > \8B45 10       mov     eax, dword ptr [ebp+10]         ;  Case 111 (WM_COMMAND) of switch 004047F9
00404A8B   .  25 FFFF0000   and     eax, 0FFFF
00404A90   .  3D 01300000   cmp     eax, 3001                       ;  Switch (cases 3EB..5005)



设断,你再按ESC看看。同时单击EXIT按钮看看。剩下的代码你补齐,问题就解决了。

没经过太多分析,仅供参考。
2009-7-17 11:09
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
断下了,原来按键消息是在COMMAND消息响应之后再细分的?
2009-7-17 14:42
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
本来以为是说拦截键盘按键,然后判断是不是按下ESC。这个思路来搞。。

可是思路估计不是这样了,上面那里断点后,一些字母的按下没响应。

不知道坛主科普下还是我可以到《深入浅出MFC》找答案
2009-7-17 15:01
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
有点想不太明白,我在用SDK写程序的时候,
在主窗口消息循环不是可以

CASE CREATE:

CASE WM_COMMAND

CASE WM_CHAR

这样的形式吗?为什么我的按键消息却跑到WM_COMMAND去了
2009-7-17 15:12
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
发现是焦点问题。。。主窗口中直接添加wm_char消息响应不到
2009-7-23 01:36
0
雪    币: 50161
活跃值: (20630)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
11
没有细看,碰巧那个地方能拦截ESC。你有时间可以多研究一下其机制原理。记得分享一下。
2009-7-23 11:28
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
呵呵,确实是有点碰巧吧。由于是MFC封闭的原因吧。

新建一个MFC程序,添加wm_char的话,拦截不到的。需要重载下下面这个函数

BOOL CMessageDlg::PreTranslateMessage(MSG* pMsg)
{
        // TODO: Add your specialized code here and/or call the base class
        if ( pMsg->message == WM_KEYDOWN ||pMsg->message == WM_CHAR)
        {
        //        if (::GetDlgCtrlID(pMsg->hwnd)==IDOK)
           {
                //有些人直接在里pMsg->hwnd=this->h_Wnd,不要下面的sendmessage的话
               //这样应该有些问题,如果对话框中有编辑框的话,会接收不到你的输入了
            
                SendMessage(pMsg->message, pMsg->wParam, pMsg->lParam);
               //这样send多一次给父窗口,忘记消息机制怎么说来着。不知道这里send一次,下面调用的基类的又一次,会不会父窗口会一个消息接两次潜在错误呢?测试的时候没啥发现

           }
        }

        return CDialog::PreTranslateMessage(pMsg);
}

///边学开发边学逆向咯。。。。不会开发就学逆向根本不会有质的突破
2009-7-23 23:06
0
游客
登录 | 注册 方可回帖
返回
//