OLLYDBG使用笔记

F2 断点  F3载入程序   F4运行到光标处   F7单步步入   F8单步步过  F9运行
Ctrl+F2重新载入
分号: 写注释
Ctrl+G 查询表达式
CTRL+F9返回到被调用之前的位置
点击窗口上的B跳到断点窗口
点击C跳到CPU窗口
void A(a,b,c);
//将函数参数从左往右推入栈中
push c
push b
push a
然后再调函数地址
Call A

修改字符串时,后面要加00,字符串默认是以00结尾的
获取文本框的内容的API:
GetDlgItemTextA     获取acsi编码字符
GetDlgItemTextW     获取unicode编码宽字符
GetWindowTextA
GetWindowTextW
任何编程语音函数的返回值都被放在eax里面。
如何将修改后的文件保存起来??
选中修改的代码,复制到可执行文件。

Alt+b打开断点编辑器  空格键切换断点状态。
右下角的一块为栈空间。
右边的一大块为寄存器。
eip  里面存储的是下一条要执行的指令。
eax  函数或过程的地址存放在这个里面。  任何编程语音函数的返回值都被放在eax里面。
Call XXX  等值于:
push eip; 然后再jmp xxx;
Call 404000h; 直接跳到函数或过程的地址。
Call eax; 函数或过程的地址存放在eax.
一共有32个不同的标志位,每个标志位有2个属性,置1置0.
在逆向中真正需要关心的标志位只有3个,也就是CMP指令能修改的那几个:Z(0标志位)/O(溢出标志位)/C(进位标志位)
逻辑运算符: AND  OR  XOR  NOT
test eax,eax   test指令一般用来判断eax是否为0.

jnz  满足ZF为0就跳转
xor ebx,ebx   对ebx清0
jl  SF!=OF   则跳转(SF为S位,OF为O位)

例:去掉烦人的注册提示窗口??
1.直接将je改成jmp
2.将弹窗的代码用nop指令填充
3.将弹窗的参数“父窗体句柄改为1”,因为父窗体句柄不可能为1,所以这个函数也不可能执行成功.
4.找到程序的入口点地址,将程序的入口点地址修改为你想要的地址。

点击面板上面的M(memory)弹出的是内粗分布图。从这里找到程序入口点地址。。
C回到正常界面。

PE 是可执行文件的一种规范。
PixtopianBoox
如果运行程序遇到异常用一下方法忽略异常。
忽略异常的方法
1.Shift+F9   忽略异常
2.选项--调试选项---异常---点住那个复选框---添加范围(8个0到8个F,32位,0到32,即为整个内存段)
alt+F9返回到用户代码。
retn z指令的用法
比如有一个A进程调用了B函数,B函数调用完毕之后接着A进程就要接着执行后面的指令,这时我们用retn指令从B函数的后面返回到A进程所要执行的下一条指令。

先暂停然后alt+F9,然后再点滴弹窗上的却定,代码就在制定的地方暂停了。

在整个内存中搜索字符串:
点击面板上的M(memory),ctrl+b搜索
搜索到所要找的字符串然后再修改,但修改后的在内存面板处无法保存的,这时我们记住修改的地址点C回到前面,在前面面板的最下面搜索刚修改的地址,然后选中二进制代码保存就行了。

在面板最下面的16进制窗口,右键查看参考,就可以看到是哪个地址引用当前的所选的内容了。

Ctrl+F8自动跳过
如果遇到了死循环,我们就在这个循环的下一个指令处打一个断点,然后按F8就跳出来了。
软件断点和硬件断点:
软件断点只限于在当前程序里,在dll里面就不行,重新启动程序断点就没了。
在dll里面要用硬件断点。--右键>断点>硬件执行
面板上的K,是记录当前哪些函数被使用了。
je 时,看z标志位,z为1代表跳转实现为0代表未实现。
0050BBA2
在调用函数的地方按回车就可以看到函数的具体内容了。

Ctrl+F9   直到出现ret指令时中断。(即当位于某个call中,Ctrl+F9就可以返回到调用这个call的地方)。
ALT+F9    若进入系统领空,此命令可瞬间回到应用程序领空。(如果位于是位于系统dllAPI函数中,此时相反回到应用程序领空,ALT+F9).

CTRL+N  打开应用程序输入表,即改应用程序所调用的所有函数都会在这里列出来。如果想对某个函数下断,只需要在这里找到这个函数,然后,右键“查找输入函数参考”或直接按enter,这是就会自动跳转到调用该函数的代码处。

test eax,eax   test指令一般用来判断eax是否为0.

F4运行到当前光标所在行

ALT+W  列出当前窗口的相关参数
消息断点:
Windows本身是由消息驱动的,如果调试时没有合适的断点,可以尝试消息断点。
ALT+W打开窗口参数列表,你会看到很多控件的类名,如Button、Edit等,选中相应的类名右键设置消息断点。

【各种通用的跳转指令】
JE   等于就跳转,与CMP指令合用
JAE  大于或等于时跳转,与CMP指令合用(Jump if above or equal)
JB  小与就跳转,与CMP指令合用
JBE  小于等于就跳转,与CMP指令合用
JC  错误就跳转
JNC 正确就跳转(Jump if not carry)
JMP 无条件跳转
ADD 加法指令
ORG 是指把机器指令装在到内存中的某个地址中去
INT 软件中断指令或函数调用
HLT 让CPU进入待机状态

【快捷键】
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窗口。
  
 
Esc - 如果当前处于自动运行或跟踪状态,则停止自动运行或跟踪;如果CPU显示的是跟踪数据,则显示真实数据。
  
 
Alt+B - 显示断点窗口。在这个窗口中,您可以编辑、删除、或跟进到断点处。 
Alt+C - 显示CPU窗口。
 
Alt+E - 显示模块列表[list of modules]。
  
 
Alt+K - 显示调用栈[Call stack]窗口。
  
 
Alt+L - 显示日志窗口。
   
Alt+M - 显示内存窗口。
 
Alt+O - 显示选项对话框[Options dialog]
 
Ctrl+P - 显示补丁窗口。
 
Ctrl+T - 打开 暂停 Run跟踪 对话框
   
Alt+X - 关闭 OllyDbg。
  
大多数窗口都支持以下的键盘命令:
  
Alt+F3 - 关闭当前窗口。

Ctrl+F4 - 关闭当前窗口。 
F5 - 最大化当前窗口或将当前窗口大小改为正常化。
  
F6 - 切换到下一个窗口。
  
Shift+F6 - 切换到前一个窗口。
 
F10 - 打开与当前窗口或面板相关的快捷菜单。
  
 
左方向键 - 显示窗口左方一个字节宽度的内容。
  
Ctrl+左方向键 - 显示窗口左方一栏的内容。
  
右方向键 - 显示窗口右方一个字节宽度的内容
 
Ctrl+右方向键 - 显示窗口右方一栏的内容
  
反汇编窗口中的快捷键[Disassembler shortcuts]
  
当CPU窗口中的反汇编面板[Disassembler pane]处于激活状态时,您可以使用以下快捷键:
   
回车键 - 将选中的命令添加到命令历史[command history]中,如果当前命令是一个跳转、函数或者是转换表的一个部分,则进入到目的地址。
  
退格键 - 移除选中部分的自动分析信息。如果分析器将代码误识别为数据,这个快捷键就非常有用。请参考解码提示[decoding hints]. 

Alt+退格键 - 撤消所选部分的修改,以备份数据的相应内容替换所选部分。仅当备份数据存在且与所选部分不同时可
 
Ctrl+F1 -如果API帮助文件已经选择,将打开与首个选择行内的符号名相关联的帮助主题。
  
F2 -在首个选择的命令上开关INT3 断点[Breakpoint],也可以双击该行第二列。
   
Shift+F2 -在首个选择命令设置条件断点,参见忽略Kernel32中内存访问异常[Ignore memory access violations 
in Kernel32]。
  
F4 
-执行到所选行,在首个选择的命令上设置一次性断点,然后继续执行调试程序,直到OllyDbg捕获到异常或者停止在该断点上。在程序执行到该命令之前,该一次性断点一直有效。如有必要,可在断点窗口[Breakpoints
 
window]中删除它。
  
Shift+F4 -设置记录断点(一种条件断点,当条件满足时一些表达式的值会记录下来), 详情参见断点[Breakpoint]。
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]对话框供您输入汇编命令,并从当前命令开始搜索。
  
 
星号[Asterisk](*) -转到原始位置(激活线程的EIP处)。
 
Ctrl+星号(*) - 指定新的起始位置,设置当前所选线程的EIP为首个选择字节的地址。您可以在选择EIP并撤消该操作。
 
加号[Plus](+) -如果run跟踪[run trace] 没有激活,则根据命令历史[command 
history]跳到下一条运行过命令的地方;否则跳到Run跟踪的下一个记录。
  
Ctrl+加号 - 跳到前一个函数开始处。(注意只是跳到,并不执行)
 
减号[Minus](-) - 如果run跟踪[run trace] 没有激活,则根据命令历史[command 
history]跳到前一条运行过命令的地方;否则跳到Run跟踪的前一个记录。
 
Ctrl+减号 - 跳到下一个函数开始处。(注意只是跳到,并不执行)
  
空格[Space] - 
修改命令。您可在显示对话框中以汇编语言修改实际指令或输入新指令,这些指令将替换实际代码,您也可以在想要修改的指令处双击鼠标。
   
冒号[Colon]( - 添加标签。显示添加标签窗口[Add label]或修改标签窗口[Change 
label],您可在此输入与首个选择的命令中的第一个字节相关联的标签(符号名)。注意,在多种编程语言中,冒号可以是标签的一部分。
 
分号[Semicolon](;) - 添加注释[comment]。显示添加注释窗口[Add label]或修改注释窗口[Change 
label],您可在此输入与首条所选命令的第一个字节相关联的注释(注释串会显示在最后一列中)。注意,多种汇编语言使用分号作为注释开始。您也可以在注释列双击需要注释的命令行。
  
命令行插件支持的命令
  
CALC
 
判断表达式
  
WATCH
 
添加监视表达式
 
AT
 
在指定地址进行反汇编
 
FOLLOW
 
跟随命令 
ORIG
 
反汇编于 EIP
  
DUMP
 
在指定地址进行转存
 
DA  转存为反汇编代码
 
DB  使用十六进制字节格式转存
 
DC  使用 ASCII 格式转存
DD  转存在堆栈格式 
 
DU  转存在 UNICODE 格式
DW  使用十六进制字词格式转存  
STK AS (AS + 地址 + 字符串) 在指定地址进行汇编 
 
BP  进行条件中断(有条件的断点)
BPX  中断在全部调用 (Call) 
BPD  清除全部调用中的断点
 
BC  清除断点
 
MR  内存断点于访问时
 
MW 内存断点于写入时
 
MD  清除内存断点
 
HR 访问时进行硬件中断
 
HW 写入时进行硬件中断
HE 执行时进行硬件中断
 
HD  清除硬件断点
 
STOP 停止运行程序调试 
PAUSE 暂停执行程序调试
 
RUN 运行程序进行调试 
GE 运行和通过例外
SI 单步进入 Call 中 
SO 步过 Call 
TI 跟踪进入直到地址
 
TO 跟踪步过直到地址 
TC 跟踪进入直到满足条件
TOC 跟踪步过直到满足条件 
TR  运行直到返回 
 
TU  运行直到用户代码 
 
LOG  查看记录窗口 
 
MOD  查看模块窗口
 
MEM  查看内存窗口
CPU 查看 CPU 窗口
CS  查看 Call 堆栈 
 
BRK 查看断点窗口
OPT  打开选项设置窗口
 
EXIT  退出 OllyDbg 
 
QUIT 退出 OllyDbg

OPEN  打开一个可执行文件
 
CLOSE  关闭可执行文件
 
RST  重新运行当前程序
 
HELP  查看 API 函数的帮助

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OllyDbg是一款用于调试和分析Windows可执行文件的工具。使用它可以帮助开发人员理解程序的运行方式,以便进行错误修复和代码优化等工作。 要开始使用OllyDbg,你可以按照以下步骤进行操作: 1. 下载和安装OllyDbg:你可以从OllyDbg的主页(http://home.t—online.de/home/Ollydbg)下载最新版本的OllyDbg,并按照安装向导进行安装。 2. 启动OllyDbg:你可以通过命令行指定可执行文件,也可以从菜单中选择,或直接拖放可执行文件到OllyDbg中。另外,你还可以重新启动上一个被调试程序,或者挂接(Attach)一个正在运行的程序。OllyDbg支持即时调试,不需要安装,可以直接在软盘中运行。 3. 调试功能:一旦你打开了一个可执行文件,OllyDbg将会显示程序的汇编代码和相关的调试信息。你可以使用OllyDbg的各种功能来分析代码、设置断点、查看和修改寄存器和内存中的值,以及跟踪程序的执行流程。 4. 插件功能:如果你需要增加更多功能,你可以使用OllyDbg的插件。插件是一个DLL,可以通过OllyDbg的主页免费下载。插件可以提供额外的调试功能,例如反汇编插件、内存查看插件、脚本扩展等。 请注意,OllyDbg的插件是无法通过调试OllyDbg本身的方式来进行调试的,因为Windows系统不能在同一个应用程序中加载和运行两个可执行文件。 总之,OllyDbg是一款功能强大而灵活的调试工具,使用它可以帮助你分析和调试Windows可执行文件。你可以根据需要选择运行方式、设置断点、查看和修改内存值等。如果需要更多功能,可以考虑使用插件来扩展OllyDbg的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Ollydbg入门](https://blog.csdn.net/n3verl4nd/article/details/84443295)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值