OD快捷键使⽤⼤全。⾮常详细(游戏逆向分析必看)+OD断
点使⽤⼤全
OllyDBG 快捷键
OllyDbg 窗⼝通⽤快捷键
快捷键 功能
Ctrl + F2重启程序,即重新启动被调试程序( 重新载⼊程序 )。如果当前没有调试的程序,OllyDbg会运⾏历史列表[historylist]中的第⼀个程序。程序重启后,将会删除所有内存断点和硬件断点。译者注:从实际使⽤效果看,硬件断点在程序重启后并没有移除。
Alt + F2 关闭,即关闭被调试程序。如果程序仍在运⾏,会弹出⼀个提⽰信息,询问您是否要关闭程序。
F2设置断点(INT3型断点),只要在光标定位的位置(上图中灰⾊条)按 F2 键即可,再按⼀次 F2键则会删除断点。Shift + F2设置条件断点
F3弹出 " 打开32位.EXE⽂件 " 对话框。选择可执⾏⽂件,并可以输⼊运⾏参数。
F4运⾏到所选择的那⼀⾏。作⽤就是直接运⾏到光标所在位置处暂停。即 执⾏到光标所在位置(直接转到要调试的位置)
Shift + F4设置记录断点(⼀种条件断点,当条件满⾜时⼀些表达式的值会记录下来), 详情参见断点[Breakpoint]。
F5最⼤化当前窗⼝或将当前窗⼝⼤⼩改为正常化。
Alt + F5让 OllyDbg 总在最前⾯。
F6切换到下⼀个窗⼝。
Shift + F6切换到前⼀个窗⼝。
F7单步步⼊到下⼀条命令( 单步进⼊ ),如果当前命令是⼀个函数[Call],则会停在这个函数体的第⼀条命令上。如果当前命令是是含有REP前缀,则只执⾏⼀次重复操作。
Shift + F7 与 F7 相同,但是如果被调试程序发⽣异常⽽中⽌,调试器会⾸先尝试步⼊被调试程序指定的异常处理(请参考忽略Kernel32中的内存⾮法访问)。
Ctr l+ F7⾃动步⼊,在所有的函数调⽤中⼀条⼀条地执⾏命令(就像按住 F7 键不放⼀样,只是更快⼀些)。当您执⾏其他⼀些单步命令,或者程序到达断点,或者发⽣异常时,⾃动步⼊过程都会停⽌。每次单步步⼊,OllyDbg都会更新所有的窗⼝。所以为了提⾼⾃动步⼊的速度,请您关闭不必要成窗⼝,对于保留的窗⼝最好尽量的⼩。按Esc键,可以停⽌⾃动步⼊。
F8单步步过到下⼀条命令( 单步跳过 )。如果当前命令是⼀个函数,则⼀次执⾏完这个函数(除⾮这个函数内部包含断点,或发⽣了异常)。如果当前命令是含有REP前缀,则会执⾏完重复操作,并停在下⼀条命令上。
Shift + F8与 F8 相同,但是如果被调试程序发⽣异常⽽中⽌,调试器会⾸先尝试步过被调试程序指定的异常处理(请参考忽略 Kernel32 中的内存⾮法访问)。
Ctrl + F8 ⾃动步过,⼀条⼀条的执⾏命令,但并不进⼊函数调⽤内部(就像按住 F8 键不放⼀样,只是更快⼀些)。当您执⾏其他⼀些单步命令,或者程序到达断点,或者发⽣异常时,⾃动步过过程都会停⽌。每次单步步过,OllyDbg都会更新所有的窗⼝。所以为了提⾼⾃动步过的速度,请您关闭不必要成窗⼝,对于保留的窗⼝最好尽量的⼩。按Esc键,可以停⽌⾃动步过。
F9 运⾏,遇到断点则停在断点位置。如果没有设置相应断点的话,被调试的程序将直接开始运⾏直到结束。
Shift + F9与 F9 相同,但是如果被调试程序发⽣异常⽽中⽌,调试器会⾸先尝试执⾏被调试程序指定的异常处理(请参考忽略Kernel32中的内存⾮法访问)。
Ctrl + F9
把本层call执⾏完。即执⾏函数代码内的命令,直到遇到 RETN 命令,⽤于跳出函数体。在此期间不进⼊⼦函数也不更新CPU数据。
Ctrl + F9
因为程序是⼀条⼀条命令执⾏的,所以速度可能会慢⼀些。按Esc键,可以停⽌跟踪。
Alt + F9 执⾏直到返回到⽤户代码段,跟踪程序直到指令所属于的模块不在系统⽬录中,在此期间不进⼊⼦函数也不更新CPU数据。因为程序是⼀条⼀条执⾏的,所以速度可能会慢⼀些。按Esc键,可以停⽌跟踪。
F10 打开与当前窗⼝或⾯板相关的快捷菜单。
Ctrl + F11Run 跟踪步⼊,⼀条⼀条执⾏命令,进⼊每个⼦函数调⽤,并把寄存器的信息加⼊到Run跟踪的存储数据中。Run跟踪不会同步更新CPU窗⼝。
F12暂停程序,F9 可以继续运⾏。
Ctrl + F12 Run 跟踪。步过,⼀条⼀条执⾏命令,但是不进⼊⼦函数调⽤,并把寄存器的信息加⼊到Run跟踪的存储数据中。Run跟踪不会同步更新CPU窗⼝。
Esc 如果当前处于⾃动运⾏或跟踪状态,则停⽌⾃动运⾏或跟踪。如果CPU显⽰的是跟踪数据,则显⽰真实数据。
空格点击反汇编窗⼝,可以修改原有汇编代码
分号(或者直接双击)增加注释
回车 Enter 将选中的命令添加到命令历史[command history]中,如果当前命令是⼀个跳转、函数或者是转换表的⼀个部分,则进⼊到⽬的地址。即在返汇编窗⼝⾥⾯点击 call,可以查看 call 内反汇编代码。
Alt + B显⽰断点窗⼝。在这个窗⼝中,您可以编辑、删除、或跟进到断点处。
Alt + C显⽰ CPU 窗⼝。
Alt + E显⽰模块列表[list of modules]。
Alt + K显⽰调⽤栈[Call stack]窗⼝。
Alt + L显⽰⽇志窗⼝。
Alt + M 显⽰内存窗⼝。
Alt + O显⽰选项对话框[Options dialog]
Alt + X关闭 OllyDbg。
Ollydbg 断点:
内存断点:是通过把相应位置指令替换成int3来实现的。因为修改程序代码你想怎么改就怎么改。所以内存断点你可以设置很多个。因为修改的是程序的代码,所以内存断点很容易被程序⾃⾝检测到。
硬件断点:是通过设置CPU相应硬件寄存器来阻⽌程序继续运⾏的。硬件寄存器数量有限,所以只能设置⼏个(⽬前⼤多数是4个)。
因为不修改程序的代码,所以硬件断点则很难被发现(不是绝对的,当硬件断点不⾏时,可以试下内存断点)。
硬件断点的前置知识。
1. 现代cpu为程序调试提供了6个寄存器,名为DRx,仔细说的话就是DR0/DR1/DR2/DR3/DR6/DR7。没错就是没有4和5,我没
写错。cpu内部对这6个寄存器作为硬件断点提供了⽀持。
2. 调试器可以轻易读写被调试程序的这6个寄存器,⽽被调试程序不容易读写也通常不需要读写。
3. DR0~DR3 四个寄存器⽤来存放欲下断的地址,DR6和DR7⽤来控制断点的⼤⼩和触发断点的时机。(⽐如说⼤⼩⼀个byte,触发
汇编指令汇总时机为写⼊时)
------------------------------------------------
硬件断点就不需要 od 做太多事情了,它只需要把⽤户的需求转换⼀下格式,写⼊被调试程序的DRx系列的寄存器中,并等待系统发来的消息就⾏了。当od收到了消息就暂停⽬标程序,你就知道程序断下了。
关于硬件断点:
1. 寄存器数量的限制导致硬件断点最多只能同时存在4个,并且od在特定设置或者插件的影响下可能内部还会占⽤⼀两个⽤来辅助程序
调试,导致可⽤数量⼗分有限。
2. 不仅硬件断点数量不多,在32位程序中,每个硬件断点最⼤范围是4个字节,这也经常不太够⽤。
3. 由于cpu 的直接⽀持,硬件断点的效率是⾮常⾼的,给⼀个程序设置了硬件断点,在不触发的情况下,不会有⾁眼可见的效率影
响,毕竟只是写了个寄存器⽽已。
总结:内存断点通过修改内存页的属性并捕获异常来间接暂停被调试的程序运⾏,⽽硬件断点是由cpu直接提供⽀持。因为这样,所以内存断点的效率⼤⼤低于硬件断点,但内存断点的⾃由性⼤于硬件断点,可以下很多很⼤不⽤担⼼硬件限制。通常在调试程序时,能⽤硬件断点就别⽤内存断点,太卡了。⽽且内存断点经常下了不着,⽽硬件断点od有单独的窗⼝显⽰。
反汇编窗⼝中的快捷键[Disassembler shortcuts]
当 CPU 窗⼝中的反汇编⾯板[Disassembler pane]处于激活状态时,您可以使⽤以下快捷键:
快捷键功能
退格键移除选中部分的⾃动分析信息。如果分析器将代码误识别为数据,这个快捷键就⾮常有⽤。
Alt + 退格键 撤消所选部分的修改,以备份数据的相应内容替换所选部分。仅当备份数据存在且与所选部分不同时可⽤。
Ctrl+F1如果API帮助⽂件已经选择,将打开与⾸个选择⾏内的符号名相关联的帮助主题。
Ctrl+F5 打开与⾸个选择的命令相对应的源⽂件。
Alt+F7转到上⼀个到的参考。
Alt+F8转到下⼀个到参考。
Ctrl+A分析当前模块的代码段。
Ctrl+B开始⼆进制搜索。
Ctrl+C复制所选内容到剪贴板。复制时会简单地按列宽截断不可见内容,如果希望排除不需要的列,可把这些列的宽度调整到最⼩。Ctrl+E以⼆进制(⼗六进制)格式编辑所选内容。
Ctrl+F开始命令搜索。
Ctrl+G转到某地址。该命令将弹出输⼊地址或表达式的窗⼝。该命令不会修改 EIP。
Ctrl+J列出所有的涉及到该位置的调⽤和跳转,在您⽤这个功能之前,您必须使⽤分析代码功能。
Ctrl+K查看与当前函数相关的调⽤树[Call tree]。在您⽤这个功能之前,您必须使⽤分析代码功能。
Ctrl+L搜索下⼀个,重复上⼀次的搜索内容。
Ctrl+N打开当前模块的名称(标签)列表。
Ctrl+O 扫描object⽂件。扫描Object⽂件。该命令会显⽰扫描Object⽂件对话框,您可以在该对话框中选择Object⽂件或者lib⽂件,并扫描这个⽂件,试图到在实际代码段中⽤到的⽬标模块。
Ctrl+R 搜索所选命令的参考。该命令扫描激活模块的全部可执⾏代码,以到涉及到⾸个选中的命令的全部相关参考(包括:常量、跳转及调⽤),您可以在参考中使⽤快捷键Alt+F7 和 Alt+F8来浏览这些参考。为便于您使⽤,被参考的命令也包含在该列表中。
Ctrl+S命令搜索。该命令显⽰命令查[Find command]对话框供您输⼊汇编命令,并从当前命令开始搜索。星号 (*)转到原始位置(激活线程的EIP处)。
Ctrl + 星号(*)指定新的起始位置,设置当前所选线程的EIP为⾸个选择字节的地址。您可以在选择EIP并撤消该操作。
加号 (+)如果run跟踪[run trace] 没有激活,则根据命令历史[command history]跳到下⼀条运⾏过命令的地⽅;否则跳到Run跟踪的下⼀个记录。
Ctrl + 加号跳到前⼀个函数开始处。(注意只是跳到,并不执⾏)
减号 (-)如果run跟踪[run trace] 没有激活,则根据命令历史[command history]跳到前⼀条运⾏过命令的地⽅;否则跳到Run跟踪的前⼀个记录。
Ctrl + 减号跳到下⼀个函数开始处。(注意只是跳到,并不执⾏)
空格修改命令。您可在显⽰对话框中以汇编语⾔修改实际指令或输⼊新指令,这些指令将替换实际代码,您也可以在想要修改的指令处双击⿏标。
冒号(:)添加标签。显⽰添加标签窗⼝[Add label]或修改标签窗⼝[Change
label],您可在此输⼊与⾸个选择的命令中的第⼀个字节相关联的标签(符号名)。注意,在多种编程语⾔中,冒号可以是标签的⼀部分。
分号 (;)添加注释[comment]。显⽰添加注释窗⼝[Add label]或修改注释窗⼝[Changelabel],您可在此输⼊与⾸条所选命令的第⼀个字节相关联的注释(注释串会显⽰在最后⼀列中)。
注意,多种汇编语⾔使⽤分号作为注释开始。您也可以在注释列双击需要注释的命令⾏。
命令⾏插件⽀持的命令
命令功能
/ CALC 表达式判断表达式。计算给定表达式。 注意,参与计算的数值默认为16进制W / WATCH 表达式添加监视表达式。打开监视窗⼝并监视表达式
AT在指定地址进⾏反汇编
FOLLOW跟随命令
ORIG反汇编于 EIP
DUMP在指定地址进⾏转存
DA转存为反汇编代码
DB使⽤⼗六进制字节格式转存
DC使⽤ ASCII 格式转存
DD转存在堆栈格式
DU转存在 UNICODE 格式
DW使⽤⼗六进制字词格式转存
STK前往堆栈中的地址
(AS + 地址 + 字符串)
AS
在指定地址进⾏汇编
BP进⾏条件中断(有条件的断点)
BPX中断在全部调⽤ (Call)
BPD清除全部调⽤中的断点
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论