OllyDbg快捷键
快捷键 | 功能 |
---|---|
F7 | 单步步进,遇到call指令跟进 |
F8 | 单步步过,不跟进 |
F9 | 运行 |
ctrl + F9 | 知道出现ret指令时中断,运行到程序返回 |
alt + F9 | 进入内核中后,执行此命令,可以瞬间返回用户态 |
F2 | 打断点 |
F4 | 直接诶运行到光标所在处 |
ctrl + F2 | 重新加载可执行文件,重新运行 |
ctrl + N | 查找当前程序调用动态链接库的API列表,然后打断点 |
Alt + M | 显示内存,可以看到很多段,并附有每个段的访问、读、写、执行属性 |
F2 | 当显示内存后,使用F2直接打内存访问一次性断点 |
shift + F2 | 设置条件断点 |
shift + F4 | 打开条件断点窗口 |
保存更改的执行文件
在已经更改的可执行文件中,单击右键,“复制到可执行文件” -->"选择"
会弹出另一个汇编界面,然后在弹出的汇编界面上,单击右键,“备份”-->"备份数据到文件"
破解软件方法
调试分析
爆破法
通过屏蔽程序的某些功能或者该表程序流程使程序失效的方法称为“爆破”
算法分析
常用断点
常用断点有 INT3断点、硬件断点、内存断点、消息断点等。
INT3断点
INT3是一个常用断点,可以使用bp命令或者F2快捷键来设置或者取消断点。
当执行一个INT3断点时,该地址处的内容被调试器用INT3指令替换了,此时
OllyDbg将INT3隐藏,显示出来的仍然是中断前的指令,实际上被替换成了“CC”。
原理:
这个INT3指令,因为机器码是0xCC,也常被称为“CC”指令,当程序执行INT3时,
会导致一个异常,调试器此时就会捕捉这个异常,从而停在断点处,然后将断点处的
指令恢复成原来的指令。
优点: 可以设置无数个断点。
缺点: 容易被检测,检测API的首地址是否是“CC”。
硬件断点
硬件断点和DRx寄存器有关,在Intel CPU架构中有8个DRx寄存器。
8个(DR0~DR7)特性如下:
* DR0~DR3:调试地址寄存器,用于保存需要监视的地址,例如设置硬件断点。
* DR4~DR5:保留,未公开具体作用
* DR6 : 调试寄存器组状态寄存器
* DR7 : 调试寄存器组控制寄存器
* 原理:
硬件断点的原理是使用DR0、DR1、DR2、DR3设定地址,并使用DR7设定状态,因此最多设置4个硬件断点。
* 设置断点:
“断点”--->"硬件执行"。
* 删除和查看硬件断点:
“调试”-->“硬件断点”
F4 快捷键相当于提供了一个一次性的硬件断点。中断后自动删除。
* 缺点:
断点最多只能下4个断点,需要对代码循环下断点。
内存断点
* 原理:
在对所设的地址赋予不可以访问/不可写的属性,那么当访问/写入的时候就会产生异常。比较异常地址是不是断点地址,如果是中断,让用户继续操作。由于每一次异常,都要通过比较来确定是否应该中断,所以内存断点会降低OllyDbg的执行速度。
内存断点不修改原始代码,所以在遇到校验代码且硬件断点失灵的情况下可以使用内存断点。
内存访问一次性断点
消息断点
windows本身就是消息驱动的,当某个特定窗口函数接收某个特定消息时,消息断点将使程序中断。
* 和INT3区别:
INT3断点可以在程序启动之前设置,消息断点只有在窗口被创建之后才能被设置并拦截消息。
* 当捕捉到消息断点时,由于还处于系统底层代码,不属于当前调试运行的代码,所以使用Alt + F9 或者ctrl +9 快捷键返回当前调试代码是完全没有用的。由于主程序代码在.text段中,从系统代码返回应用程序代码段的时候,正是.text区块代码执行的时候,因此,对.text下断点就能返回应用程序的代码领空。按Alt + M 快捷键打开内存窗口,对.text区块下内存断点。
条件断点
原理:
条件断点时一个带有条件表达式的普通INT3断点。
按照寄存器条件中断
在某个地址处,设置断点,按"shift+F2",输入条件表达式,例如:“eax==0x40000”,这样,当运行到此地址时,条件成立,则中断,否则,则继续执行。
按照存储器条件中断
条件记录断点
条件记录点除了具有条件断点外,还能记录断点处函数表达式或者参数的值,也可以通过设置断点的次数,每次符合暂停条件时,计数器减一。
监视代码运行
需要插件 Hit trace
当我们需要分析部分代码,那部分运行,那部分未运行时,选中部分代码,
右键“Hit trace”-->"add selection",然后按F9运行代码,就可以查看
那些代码被运行。
MDebug支持设置模块断点
模块断点用于在程序执行到那个模块的空间代码时设断,在分析的过程中我们不仅仅知道主程序调用了那个模块,还可以知道调用了那个函数。