由于我练习的都是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文件中了怎么继续寻找,还希望哪位路过的大神告知一下,下一步的学习,嗯,就到这儿了