QQ登录

只需一步,快速开始

OD找CALL之定位对话框MessageBox

[ 复制链接 ]
对话框是一个程序与用户交互信息的简单快速方法。
弹出对话框显示信息在编程时简单,在逆向时也很容易用来找CALL。
这里自己通过vc2010编程一个MFC程序,使用MessageBox弹出信息。
然后再使用OD工具来定位调用MessageBox位置,并修改程序的一些信息。

VC2010中我们创建一个基于对话框的MFC程序。
默认的对话框确定按钮控件,双击关联它的点击函数,实现对话框弹出功能用于测试。
再添加一自定义函数,如下代码。
  1. int add(int a,int b)
  2. {
  3.         return a+b;
  4. }
  5. void CMy123Dlg::OnBnClickedOk()
  6. {
  7.         int x=add(1,2);

  8.         CString s;
  9.         s.Format(_T("value:%d"),x);
  10.         MessageBox(s);
  11. //        CDialogEx::OnOK();
  12. }
复制代码


这样编程运行后,我们就准备了一个例程,点击例程界面的确定按钮,就会弹出对话框显示信息。

OD找CALL之定位对话框MessageBox

OD找CALL之定位对话框MessageBox

可以看到点击按钮后弹出了一个对话框,显示的信息在下面我们通过OD来修改,
也就是会介绍一步步定位找CALL过程。

OD打开例程,可以按F9,简单运行例程查看效果。
我们知道对话框是调用对应函数MessageBox来实现,使用unicode字符时,函数对应为MessageBoxW 。
使用ASCII时,函数对应为MessageBoxA。由于例程默认使用unicode,所以我们会通过MessageBoxW 来定位。
在OD指令框输入指令bp MessageBoxW,会在MessageBoxW相关位置下断点,切换到断点管理窗口,可以查看此断点。

OD找CALL之定位对话框MessageBox

OD找CALL之定位对话框MessageBox


再次按F9运行例程,按钮弹出对话框时,会在断点处暂停,但定位在user32.dll动态库领空。
且对话框还未弹出,这时我们在下几行可以看到MessageBoxW。
定位近在只近在咫尺。

OD找CALL之定位对话框MessageBox

OD找CALL之定位对话框MessageBox


这里我们想让对话框弹出,按CTRL+F9或菜单,调试,执行到返回。
OD运行支如上图箭头位置后,对话框已弹出且被我们自己关闭。

下一目的就是在应用程序领空找到调用此函数位置。
一路按F8,单步执行,也可在菜单,调试下找到此按菜单项。
一路观察OD标题栏或地址处的变化,发现到了程序领空,就可以往上滚动,找到函数入口了。

OD找CALL之定位对话框MessageBox

OD找CALL之定位对话框MessageBox


在找到的函数入口下断点,重新操作例程,弹出对话框,可以发现断点定位在了刚才的位置。
F8单步执行,可很快找到MessageBox调用处,及函数的两参数。
这样我们可以根据自己功能需要,修改代码,如我们修改对话框显示信息value为fuck!
如下图。

OD找CALL之定位对话框MessageBox

OD找CALL之定位对话框MessageBox


这样我们去除全部断点,运行例程来查看修改的效果。
也可以将修改后的例程重新保存。
选中修改后的代码,鼠标右键,复制到可执行文件,弹出窗口。
再鼠标右键,保存到可执行文件,保存。

操作过程用文字描述有点繁琐,实际操作却很快。
ASCII形式的也可以编译一个例程来测试。
下面是用到附件下载地址。
请点击此处下载

查看状态:已购买或有权限

您的用户组是:游客

文件名称:123.rar 
文件大小:205.59 KB 
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索