准备工作:吾爱破解[LCG].exe
一小例子
简单介绍一下OD的界面
基本操作:
OllyDbg比较容易上手
Ctrl+F2 - 重启程序,即重新启动被调试程序。如果当前没有调试的程序,OllyDbg会运行历史列表[history
list]中的第一个程序。程序重启后,将会删除所有内存断点和硬件断点。
译者注:从实际使用效果看,硬件断点在程序重启后并没有移除。
Alt+F2 - 关闭,即关闭被调试程序。如果程序仍在运行,会弹出一个提示信息,询问您是否要关闭程序。
F3 - 弹出“打开32位.EXE文件”对话框[Open 32-bit .EXE file],您可以选择可执行文件,并可以输入运行参数。
Alt+F5 -
让OllyDbg总在最前面。如果被调试程序在某个断点处发生中断,而这时调试程序弹出一个总在最前面的窗口(一般为模式消息或模式对话框[modal message
or dialog]),它可能会遮住OllyDbg的一部分,但是我们又不能移动最小化这个窗口。激活OllyDbg(比如按任务栏上的标签)并按
Alt+F5,OllyDbg将设置成总在最前面,会反过来遮住刚才那个窗口。如果您再按一下Alt+F5,OllyDbg会恢复到正常状态。
OllyDbg是否处于总在最前面状态,将会保存,在下一次调试时依然有效。当前是否处于总在最前面状态,会显示在状态栏中。
F7 -
单步步入到下一条命令,如果当前命令是一个函数[Call],则会停在这个函数体的第一条命令上。如果当前命令是是含有REP前缀,则只执行一次重复操作。
Shift+F7 -
与F7相同,但是如果被调试程序发生异常而中止,调试器会首先尝试步入被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。
Ctrl+F7 -
自动步入,在所有的函数调用中一条一条地执行命令(就像您按住F7键不放一样,只是更快一些)。当您执行其他一些单步命令,或者程序到达断点,或者发生异常时,自动步入过程都会停止。每次单步步入,OllyDbg都会更新所有的窗口。所以为了提高自动步入的速度,请您关闭不必要成窗口,对于保留的窗口最好尽量的小。按Esc键,可以停止自动步入。
F8 -
单步步过到下一条命令。如果当前命令是一个函数,则一次执行完这个函数(除非这个函数内部包含断点,或发生了异常)。如果当前命令是含有REP前缀,则会执行完重复操作,并停在下一条命令上。
Shift+F8 -
与F8相同,但是如果被调试程序发生异常而中止,调试器会首先尝试步过被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。
Ctrl+F8 -
自动步过,一条一条的执行命令,但并不进入函数调用内部(就像您按住F8键不放一样,只是更快一些)。当您执行其他一些单步命令,或者程序到达断点,或者发生异常时,自动步过过程都会停止。每次单步步过,OllyDbg都会更新所有的窗口。所以为了提高自动步过的速度,请您关闭不必要成窗口,对于保留的窗口最好尽量的小。按Esc键,可以停止自动步过。
F9 - 让程序继续执行。
Shift+F9 -
与F9相同,但是如果被调试程序发生异常而中止,调试器会首先尝试执行被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。
Ctrl+F9 -
执行直到返回,跟踪程序直到遇到返回,在此期间不进入子函数也不更新CPU数据。因为程序是一条一条命令执行的,所以速度可能会慢一些。按Esc键,可以停止跟踪。
Alt+F9 -
执行直到返回到用户代码段,跟踪程序直到指令所属于的模块不在系统目录中,在此期间不进入子函数也不更新CPU数据。因为程序是一条一条执行的,所以速度可能会慢一些。按Esc键,可以停止跟踪。
Ctrl+F11
-Run跟踪步入,一条一条执行命令,进入每个子函数调用,并把寄存器的信息加入到Run跟踪的存储数据中。Run跟踪不会同步更新CPU窗口。
F12 - 停止程序执行,同时暂停被调试程序的所有线程。请不要手动恢复线程运行,最好使用继续执行快捷键或菜单选项(像 F9)。
Ctrl+F12 - Run跟踪步过,一条一条执行命令,但是不进入子函数调用,,并把寄存器的信息加入到Run跟踪的存储数据中。Run跟踪不会同步更新CPU窗口。
拿一个简单的例子
运行它得到
在反汇编窗口右键-->中文搜索引擎-->智能搜索
可以看到例子的全部字符串
双击“flag错误,再试试?”
来到上面的je跳转下断点(关于跳转知识请学习一下汇编,这里不多介绍了)
输入flag之后 , OD会停下来· 咱们把je修改成jmp
使得程序直接跳转到成功
这种方法叫爆破法
下面进行算法的分析
看到请输入flag下面的十六进制数 与ASCII码进行比较得到
galf
leW{
emoc
_oT_
W_ER
dlro
}!
由于是小端方式存储 把字符反过来就好了
常用断点:
常用的断电有INT 3 、硬件断点、内存断点、消息断点等。
INT 3断点(快捷键F2)
执行一个INT 3断点是,该地址出的内容呗调试器用INT 3指令代替了 ,此时OD将INT 3 隐藏,显示出来的仍是中断前的指令。实际上,
显示的是 00401511 CC 00004100
硬件断点:
硬件断电和DRx调试寄存器有关。在Intel CPU体系结构手册中可以找到DRx调试寄存器的介绍。
下硬件断点操作:在反汇编窗口右键-->断点-->硬件执行
取消硬件断点可以在菜单栏调试-->硬件断点中取消
硬件断点只有4个
原理是用DR0、DR1、DR2、DR3设定地址,并使用DR7设定状态。
硬件执行断点与CC的断点的作用一样,蛋硬件断点不会降至零首字节修改为“CC”所以难以检测
内存断点:
设置内存访问/写入断点,原理是对所设的地址赋予不可以访问/不可写属性,这样当访问/写入的时候就会产生异常。OD在截获一场后,比较异常地址是不是断点地址,如果是就中断。
操作方式:在反汇编窗口右键-->断点-->内存访问/写入
消息断点:
Windows本身是有消息驱动的,如果调试时没有合适的断点,可以尝试使用消息断点。
在菜单栏-->查看-->窗口 下断点
OD常用插件:
CmdBar
吾爱OD上配有