阅读了“MFC程序逆向 – 消息篇(上)+(下)”一文后,收获颇丰。作者提到对于对话框程序,在这个函数函数入口处设置断点最好(请记住这个函数:CCmdTarget::OnCmdMsg())。在学习的过程中,对OD的一些使用方法进一步加深了理解。
首先用VC6.0建立一个基于对话框的MFC程序,分别采用动态链接(TraceButtonDynamic.exe)和静态链接(TraceButtonStatic.exe)生成。
1. 动态链接的程序分析
(1)首先用IDA找到CCmdTarget::OnCmdMsg()的地址。在我的计算机中为0040157C.
(2)用OD载入,CTRL+G,输入0040157C,来到0040157C 。
可以看到有一jmp语句,Enter进入。这里就是:OnCmdMsg()的入口处。
向下翻倒push dword ptr [eax+14], F2下断,运行程序。
单击“hello,world”按钮,可以看到00401480,就是按钮所处理的东西。
CTRL+G,输入00401480,来到00401480。OK,搞定。
(3)更简单的方法。
重新载入TraceButtonDynamic.exe。Alt+ E,载入DLL模块,双击MFC42.
7
来到MFC42.dll
CTRL+S, 输入
push dword ptr [ebp+14]
push dword ptr [eax+10]
push dword ptr [ebp+10]
push dword ptr [eax+14]
push dword ptr [ebp+C]
push dword ptr [ebp+8]
单击查找。
在“push dword ptr [eax+14]”, F2下断即可
2. 静态链接的程序分析。
Od载入。CTRL+S,输入指令序列。
单击查找,在“push dword ptr [eax+14]”, F2下断即可。
当然还可以在语句序列下面的call处F7进入(本例为call 004157F5)。进入后,直接在“call dword ptr [ebp+14]”这条语句出下断。当然可以用搜索的方法。
以上是本人的一些学习心得,不妥之处,敬请指正。
2000-09-17
By littlewisp