
本章开始介绍32位程序破解的利器---Ollydbg.该工具由Oleh Yuschuk编写,是Windows平台下最强的32位程序反汇编调试器之一.什么是调试器?我们经常听说某某游戏某某程序出了BUG,调试器就是负责帮助程序员找到BUG的东西,破解只是它的其中一个功能.
时至今日已有许多爱好者对Ollydbg进行了改造使得它更强大,因此原版的Ollydbg已经很少人使用,我个人主要使用的是吾爱破解论坛发布的专用Ollydbg,它的界面比起原版更清晰明了并且比较护眼.
下载地址https://down.52pojie.cn/Tools/Debuggers/ ,最后一条.
下载完成后解压,然后以管理员权限运行.
我们随便打开一个exe文件,另外这个版本的Ollydbg支持文件拖拽.
打开文件之后,Ollydbg会将程序中断在其入口点处.

调试器的字体颜色等可以更换,在调试器窗口中鼠标右键,找到界面选项->全局颜色,然后可以自己选择喜欢的颜色.
下面一一介绍窗口的各个部分:

窗口标题
窗口标题显示了你当前正在调试的程序名称,以及当前程序暂停到的地方,这里正在调试的程序叫做GetLocalTime.exe,程序暂停在了它自己的代码里面,如果模块后面的字样跟程序的名字不一样,那么程序就暂停在其他模块的代码里面,例如:

这时程序就暂停在系统的User32.dll模块中.

这一栏是状态栏和快捷入口栏,最左边的是状态提示栏,显示当前程序的状态,现在程序处于暂停状态.

从左到右分别为:打开新的程序,重新启动要调试的程序,终止当前调试.

运行,暂停
运行和暂停按钮,功能和字面意思一样,使程序运行或暂停.

这是窗口按钮栏,点击不同的字母可以打开不同的窗口.
l:打开日志窗口.
e:打开程序载入的模块窗口.

显示程序载入的模块
m:打开显示程序内存分布情况的窗口.

显示程序的内存分布
t:显示程序的线程

显示程序的线程
w:显示程序创建的窗口,这里因为程序还没有运行,因此没有任何窗口被创建.

h:显示程序创建的句柄,至于什么是句柄之后会说明.

c:CPU窗口,也就是程序在被OD载入之后默认打开的那个窗口,另外当你不知道程序现在运行到哪里的时候,点一下该按钮就会转到程序当前执行的位置.
p:补丁窗口,记录了你曾经修改过程序的什么地方.

k:调用堆栈窗口,该窗口的使用以后再谈
b:断点窗口,显示了你对这个程序下过的断点.

后面3个窗口目前还不会使用到,暂且略过.
当然说了这么多,最重要的还是CPU窗口:

窗口的组成部分如下:
反汇编:

反汇编
反汇编部分由4个区域组成,最左边的是地址区域,显示了对应的指令在程序的内存空间中的地址(虚拟地址).其次是机器码,显示了这条汇编指令所对应的机器码,第3个区域是反汇编区,显示的是反汇编指令,第4个区域是注释区域,Ollydbg会在该区域自动添加一些注释,例如函数的参数提示等,鼠标在上面双击可以添加自己的注释.

当前高亮的指令就是程序下一条要执行的指令,例如现在高亮的指令的地址为0x013B1CD3,机器码为 EB 24050000,反汇编码为
CALL 013B21FC.
右边是寄存器区域,显示了程序暂停的时候寄存器的值,至于什么是寄存器,之后会进行说明.

下面是内存数据窗口,以16进制和ASCII码形式显示程序的内存数据.

内存窗口的右边是栈窗口,显示了当前线程的栈:

在反汇编和内存数据窗口之间还有一个小窗口用于提示一些信息,例如寄存器的值,某个内存地址中的数据等:

可能你还在疑惑什么是栈什么是机器码等等,不用担心,这些都会在之后进行说明.
接下来说说常用的快捷键:
F7:步进,按下F7后程序将执行一条汇编指令,然后停住.
F9:按下F9后程序直接运行起来.
Ctrl+G:打开地址跳转框,在其中输入地址或者表达式可以进行跳转.例如:

就会跳转到0x000A2308.
F2:按下F2键后将会在当前高亮指令处设置一个断点(BreakPoint):

有断点存在的那行指令其地址将会变为红色.
当程序运行到有断点的地方的时候,将会中断到调试器,此时就可以观察各个寄存器的状态以及堆栈的情况.
Ollydbg的基本结构我们先介绍到这里,下一章介绍常见的汇编指令.