您的位置:首页 > 其它

使用IDA对MFC寻找按钮处理事件

2013-06-29 19:02 1011 查看
由于我练习的都是MFC程序,在寻找按钮事件的时候,费了老鼻子劲了,当初说的,根据DispatchMessage,TranslateMessage,下条件断点神马的,笔者,试了又试,在里面消

息转了又转,就是出不来,放下了一段时间,但是不甘心,最后找到了一篇很好的文章点击打开链接,让我有了很好的启发,对于自己做的小程序而言,已经足够了,现在说下,

我自己写的这篇水平实在有些哇,高手不要见笑啊,好了不说废话了,现在开始,

我的MFC界面如下



现在需要做下说明,确定和取消是由向导自动生成的,所以在GetMessageMap中是不会有的,现在我们要找的是Check按钮事件,现在IDA已经能够识别GetMessageMap函数

了,所以看下具有GetMessageMap函数

会看到,如下

.text:00401560 ; AFX_MSGMAP *__thiscall CTMPDlg__GetMessageMap(CTMPDlg *this)
.text:00401560 protected: virtual struct AFX_MSGMAP const * __thiscall CTMPDlg::GetMessageMap(void)const proc near
.text:00401560                                         ; DATA XREF: .rdata:00403A24o
.text:00401560 this = ecx
.text:00401560                 mov     eax, offset off_4039D0
.text:00401565                 retn
.text:00401565 protected: virtual struct AFX_MSGMAP const * __thiscall CTMPDlg::GetMessageMap(void)const endp

所以GetMessageMap的处理函数,是在偏移量是 offset off_4039D0中,只需要轻轻点击一下,便能进入MessageMap下的函数

rdata:004039D0 off_4039D0      dd offset CDialogEx::GetThisMessageMap(void)
.rdata:004039D0                                         ; DATA XREF: CTMPDlg::GetMessageMap(void)o
.rdata:004039D4                 dd offset unk_403940
.rdata:004039D8 aDsada:                                 ; DATA XREF: CTMPDlg::OnBnClickedButton1(void)+54o
.rdata:004039D8                 unicode 0, ,0
.rdata:004039E4 ; const wchar_t Text
.rdata:004039E4 Text            db '搹eQ',9,'g飲',0     ; DATA XREF: CTMPDlg::OnBnClickedButton1(void)+69o
.rdata:004039ED                 align 10h
.rdata:004039F0                 dd offset const CTMPDlg::`RTTI Complete Object Locator'

然后再点击下unk_403940,就看到下面的各个函数列表了,唉,我越来越觉得,真是鸡肋啊...

.text:006BEEEE protected: virtual struct AFX_MSGMAP const * __thiscall CCoolCheckRadio::GetMessageMap(void)const proc near
.text:006BEEEE                                         ; DATA XREF: .rdata:007305CCo
.text:006BEEEE                 jmp     ds:CCoolCheckRadio::GetMessageMap(void)
.text:006BEEEE protected: virtual struct AFX_MSGMAP const * __thiscall CCoolCheckRadio::GetMessageMap(void)const endp

对于这样的我想,应该是在某一个dll文件中了怎么继续寻找,还希望哪位路过的大神告知一下,下一步的学习,嗯,就到这儿了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: