对话框是一个程序与用户交互信息的简单快速方法。
弹出对话框显示信息在编程时简单,在逆向时也很容易用来找CALL。
这里自己通过vc2010编程一个MFC程序,使用MessageBox弹出信息。
然后再使用OD工具来定位调用MessageBox位置,并修改程序的一些信息。
VC2010中我们创建一个基于对话框的MFC程序。
默认的对话框确定按钮控件,双击关联它的点击函数,实现对话框弹出功能用于测试。
再添加一自定义函数,如下代码。
- int add(int a,int b)
- {
- return a+b;
- }
- void CMy123Dlg::OnBnClickedOk()
- {
- int x=add(1,2);
- CString s;
- s.Format(_T("value:%d"),x);
- MessageBox(s);
- // CDialogEx::OnOK();
- }
复制代码
这样编程运行后,我们就准备了一个例程,点击例程界面的确定按钮,就会弹出对话框显示信息。
OD找CALL之定位对话框MessageBox
可以看到点击按钮后弹出了一个对话框,显示的信息在下面我们通过OD来修改,
也就是会介绍一步步定位找CALL过程。
OD打开例程,可以按F9,简单运行例程查看效果。
我们知道对话框是调用对应函数MessageBox来实现,使用unicode字符时,函数对应为MessageBoxW 。
使用ASCII时,函数对应为MessageBoxA。由于例程默认使用unicode,所以我们会通过MessageBoxW 来定位。
在OD指令框输入指令bp MessageBoxW,会在MessageBoxW相关位置下断点,切换到断点管理窗口,可以查看此断点。
OD找CALL之定位对话框MessageBox
再次按F9运行例程,按钮弹出对话框时,会在断点处暂停,但定位在user32.dll动态库领空。
且对话框还未弹出,这时我们在下几行可以看到MessageBoxW。
定位近在只近在咫尺。
OD找CALL之定位对话框MessageBox
这里我们想让对话框弹出,按CTRL+F9或菜单,调试,执行到返回。
OD运行支如上图箭头位置后,对话框已弹出且被我们自己关闭。
下一目的就是在应用程序领空找到调用此函数位置。
一路按F8,单步执行,也可在菜单,调试下找到此按菜单项。
一路观察OD标题栏或地址处的变化,发现到了程序领空,就可以往上滚动,找到函数入口了。
OD找CALL之定位对话框MessageBox
在找到的函数入口下断点,重新操作例程,弹出对话框,可以发现断点定位在了刚才的位置。
F8单步执行,可很快找到MessageBox调用处,及函数的两参数。
这样我们可以根据自己功能需要,修改代码,如我们修改对话框显示信息value为fuck!
如下图。
OD找CALL之定位对话框MessageBox
这样我们去除全部断点,运行例程来查看修改的效果。
也可以将修改后的例程重新保存。
选中修改后的代码,鼠标右键,复制到可执行文件,弹出窗口。
再鼠标右键,保存到可执行文件,保存。
操作过程用文字描述有点繁琐,实际操作却很快。
ASCII形式的也可以编译一个例程来测试。
下面是用到附件下载地址。
|