如果说CE是逆向中不可或缺的突破口工具,那么OD就是最重要的动态调试工具,在整个动态调试过程中,使用最频繁的工具就是OD了,甚至80%以上的时间,我们是面对这个软件的,所以我们必须熟练掌握该软件的使用。
点文件我们可以选择直接打开或则附加进程。
选择一个我们想要调试的进程附加
附加以后,进程是处于暂停状态的
我们的可以按F9 或则 点下图运行按钮,让程序运行起来
当然还有时出现这样的情况
我们点了F9,程序依然是卡住的,没有办法运行起来
这个时候怎么办呢?往往是因为线程全部被暂停了
我们只需要点击‘T’
然后右键恢复所有线程就可以让进程运行起来了。
那么我们来了解一下OD的基本界面
看下图
由这几个基本窗口组成
包含分析代码的代码段,查看数据的数据段,分析变量,参数和操作中间数的堆栈,以及寄存器和标志位。
了解了OD的基本界面
我们要学会基本的使用。
动态调试,最重要的是下断点,当程序执行到我们下断点的位置的时候,被暂停下来,此时我们可以分析内存和寄存器以对程序进行分析。
在代码段任意代码上右键---->断点
可以看到各种断点类型以及快捷键
下过如下
F2,只要代码执行到此处便会断下
SHIFT+F2,在F2的基础上可以在该处附加条件。
内存访问和内存写入,对该处内存地址有访问或则写入,因为该处是代码段,正常是不存在访问和写入的,所以在该处下此类型断点一般是错误的做法,但是有一种情况是需要这样做的,就是如果你修改了该处代码,又想知道该处是否有CRC等检测的时候,就需要在该处下内存断点了,我们说正常情况下代码段是不会有内存访问和写入的,一旦有的话9层就是检测了。
硬件执行断点,实现原理和F2不同,达到效果和F2相同,并且硬件断点只有4个坑,多了下不了,所有很多游戏公司也在这个问题上做了一定功夫,这是理所当然的。
还有在数据段上下断
这个时候就是2种断点可以下了
内存断点和硬件断点,还是一样除了实现原理不同,这样也导致检测原理不同,其最终的效果是相同的。再者说一下,访问断点和写入断点的区别,访问断点是包含写入断点的,而写入断点只有在内存被写入值的时候才会断下。
只要我们能熟练的找到突破口,熟练的下断点就可以找到我们想要找到的代码处,进行分析了。