动态调试中获取mfc程序的消息响应函数列表的思路
2013-08-08 07:29
453 查看
Debug版本:mfc42d.dll: 5F4926BB B9 10484D5F mov ecx, offset _afxBaseModuleState 5F4D4810->dword[1]即[5F4D4810]+4==&theApp 5F4993E7 |. 8951 04 mov dword ptr [ecx+4], edx ; MFCTest.theApp edx==&theApp 结论: CMFCTestApp theApp;的初始化函数中调用了 004018A8 . B9 70684100 mov ecx, offset theApp 004018AD . E8 F3F7FFFF call 004010A5 ...... 004010A5 $ /E9 86060000 jmp CMFCTestApp::CMFCTestApp 其中又调用了 00401752 |. E8 1B100000 call CWinApp::CWinApp ; jmp 到 MFC42D.#528 因此theApp的地址实际上被硬编码在mfc程序的某个特定的初始化函数中,再传到mfc42d保存起来 而这个初始化函数的地址在动态调试中可以通过MFC42D.#528下断再逆向推出; messageMap及_messageEntries存在于.rdata段 004010BE . /E9 DD0D0000 jmp CMFCTestDlg::GetMessageMap 除非在函数中用到messageMap,否则仅在GetMessageMap函数中存在硬编码(mov eax,#~~~~~~) [m_pMainWnd+0h]+30h==GetMessageMap即CObject::__vfptr[12] Release版本:mfc42.dll: 6B730A3D 8906 mov dword ptr [esi], eax &_afxBaseModuleState==esi 00400401 . E8 3E060000 call <jmp.&MFC42.#561> => 6B732E4E > 8BFF mov edi, edi 结论: 在动态调试中通过对MFC42.#561下断可以在ecx中得到&theApp m_pMainWnd==&theApp+20h 然而在静态分析中 由入口点函数中的 00400C24 FF15 D80F4000 call dword ptr [<&MSVCRT.__getmainarg>; msvcrt.__getmainargs 00400C2A |. 68 2C1B4000 push 00401B2C 00400C2F |. 68 201B4000 push 00401B20 00400C34 |. E8 A1000000 call <jmp.&MSVCRT._initterm> 得到初始化函数数组,其中就包含theApp的初始化函数 总结:theApp的初始化函数地址在.rdata段中且有重定位(如果存在) 当vc6.0调试时类没有显示继承的成员信息的时候,清除一下重新编译 全局变量和静态变量最初都是以硬编码的形式引出 查找过程如下: Null=>theApp->m_pMainWnd->GetMessageMap=>messageMap->_messageEntries[] 1.在动态调试中通过对MFC42.#561下断可以在ecx中得到&theApp 2.m_pMainWnd==&theApp+20h 3.[m_pMainWnd+0h]+30h==GetMessageMap 4.在GetMessageMap函数中存在硬编码(mov eax,#~~~~~~) 5._messageEntries==[messageMap+4h]
何时达到庖丁解牛的感觉就好了
现在感觉如果是动态链接的mfc程序,可以链接到自己改的mfc上面,想做什么都可以
另见:重新编译MFC
相关文章推荐
- 关于PHP-Zend framework2 框架 学习过程。 阅前须知: ZF2中的配置文件是可以静态文件配置来注册和通过相关函数动态注册。 1.EventManager(事件驱动),关于事件驱动,在ZF2相关资料没有详细说明,可以参考ANDROID的事件驱动,MFC的消息响应/事件驱动。
- MFC中动态生成CComBox,响应CComBox选中项的消息ON_CBN_SELCHANGE,并获取项的值
- MFC单文档程序添加消息映射和消息响应函数的问题
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
- MFC 动态创建控件及添加消息响应函数
- 【转载】MFC动态创建控件及其消息响应函数
- MFC动态创建控件及其消息响应函数
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
- MFC动态创建控件及添加消息响应
- MFC动态添加按钮以及消息响应
- 在MFC中动态创建控件以及消息响应
- MFC程序中消息以及函数的处理顺序简介
- MFC单文档添加控件和消息响应函数
- MFC动态创建对话框中的按钮控件并创建其响应消息
- GUI程序如何使用控制台输出调试信息[zz][MFC调用win32窗口显示调试信息,使用AllocConsole 函数 ]
- MFC界面响应ESC和Enter键盘消息,阻止程序退出
- MFC动态创建控件及添加消息响应
- 在初始对话框中利用函数GetCommandLineW获取MFC程序的命令行参数
- 模仿MFC寻找消息响应函数指针的 核心 代码
- 对话框程序动态生成按钮数组并响应点击消息