本文所用实验程序如下:
这次实验用的很多是关于跳转的。这里给大家分享张图片,是在OD 调试中各种跳转指令。
接下里,我们首先分析下这个程序,总体浏览程序,我们可以发现三个对话框,
1
2
3
分析: 请注意标记或者圈起来的地方,MessageBoxA,我们学过MFC的都知道这是一个对话框函数,当程序运行到这里,对话框就会弹出来,上面的信息也会显示在框中。我们的目的就是跳转到第三个。但是它是怎么切换的呢?仔细看,它都有一些跳转,第一个有些特殊,运行过后就结束了,可不是我们需要的。后两个是在第一个运行的后面,所以要切换到到第三个也就是正确的对话框,必须跳过第一个和第二个。中间的一些跳转位置需要我们注意。小心修改。
第一步:加载程序,我们先看下运行效果。(F8运行)运行到光标处,也就是MessageBoxA处,点击‘确定’程序结束。
第二步,我们来修改这个程序。按F8运行到jnz处,我们可以发现一个跳转,正好可以跳过第一个对话框。那我们就修改这个jnz的标志位,或者修改汇编。
对于jnz,前面我们说过,z标志位为0时跳转,那就修改为1,
修改会变得话就改为jmp,这个命令就是强制跳转。
这样我们就跳过第一个对话框,接着运行。
第三步:我们会发现又碰到一个跳转,而这个跳转正好到第二个对话框。
对于这种情况,我们只需把jmp修改为nop让它不起作用。点击右键汇编,修改。因为jmp占两个字节,所以nop也是两个。
第二个跳转修改完毕,接着往下走。
第四步:走着走着又发现一个跳转 jl.同理和第一个跳转原理相同,修改标志位或者汇编。
对于jl,标志位s!=o时跳转,那我们就修改为s=0,
修改汇编,就是改为nop,不让它跳。这里就不给出截图了。
修改完毕,接着运行。
第五步:接着走我们会发现两个小跳转,但不会跳到第二个错误的对话框,可以接着往下走。又碰到一个跳转,这个是调到第二个对话框,需要修改。
又是烦人的jl,当然了修改的道理同上了。修改后接着走。
第六步:又到了一个小跳转,这个跳转就有点意思了。指的不是第二个对话框,往下拉。就看到了惊喜。第三个对话框。上图说话:
第七步,我们来看下最后的运行结果。
这样程序就修改结束了。接下来就是保存的问题了。
强调:1.标志位的修改是不能保存的,所以如果我们想要保存为可执行文件的话,所有的修改方式都要用修改汇编的方法。这样才可以保存。
2.这部分内容都是用的跳转命令,所以文章开头的图片是很有用的。
试验程序下载:www.fishc.com