OllyDbg调试器-动态调试

调试方式

OD有2种调试方式选择:

  第一种是“File”->"Open"打开选择一个未运行的程序进行调试

  第二种是“File”->"attach"附加到一个正在运行的程序进行调试

调试时常用快捷键

F7 单步步进,遇到 call 会进入
F8 单步步过,遇到 call 不会进入
F2 设置断点
F9 运行程序,直到遇到断点
Ctrl + F9 运行程序,直到遇到ret(函数返回)
Alt + F9 运行程序,直到回到应用程序领空

设置断点

INT 3断点(F2)

INT 3断点实际上是把要中断的地方的指令改为INT 3,其机器码为0xCC,INT 3会导致异常,调试器会捕获该异常进而停留在该处然后将指令恢复继续执行,当下达断点后,程序的指令就会被修改,这时应用程序时可以检测到程序是否被下了断点的,比如在程序的函数入口处下断点,那么程序可以在进入该函数前,检测入口函数的第一个字节是否为0xCC,进而判断程序是否被跟踪,解决方法时在一些不常被检测的地方下断点,如函数内。

内存断点

内存断点是在内存被读或写时中断,将设断的内存设置为不可读或不可写,进而抛出异常被调试器捕获,需要注意,内存断点只能有一个,因为内存断点的效率比较慢,程序在抛出异常后,调试器会比较异常的地址是否为断点的地址,如果是则中断,否则继续执行,内存断点可以在指定区域、段、行上设下,比如可以“Alt+M”弹出的内存窗口中在任意的段上设内存断点,当读或写该段时,程序就会中断,如在代码段上设下内存访问断点,那么在非应用程序领空时,按“F9”就可快速跳转到程序领空。

消息断点

消息断点是在消息被触发时产生中断。Windows是由消息驱动,点击按钮、移动鼠标等动作时,都有消息产生,设下不同的消息断点就可在这些动作发生时中断程序。消息是控件发出的,因此断点也是针对控件下的:“View” -> "Windows"弹出与被调试窗口相关句柄,选择句柄右键->"Message breaking on ClassProc"弹出的窗口中选择消息类型即可,消息中断后会来的系统代码处,,跳转回应用程序代码后还会经过几次消息循环(系统与应用程序代码之间跳转)才会跳转到消息处理相关的代码处。
条件断点

条件断点是在消息、寄存器、存储器等满足一定条件时发生中断。在设断处,如果满足条件则中断程序。

1.寄存器条件中断

在需要设置断点的行按“shift+F2”,在弹窗中设置条件如:ecx==20。则当程序执行到此地址时,如果ecx为20则中断生效。

2.存储器条件中断

内存条件中断与寄存器条件中断类似,在某行设置断点,当运行到该行时,内存符合条件:某处为某值,则断点生效,程序中断。如:在函数入口设条件:[STRING[esp+8]]=="abc",则当程序执行到该函数时,如果第二个参数的值为"abc",那么就断点生效,程序中断。注:[esp+8]表示esp+8上的值在这里表示指针,[[esp+8]]表示指针所指的的值。

3.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章