OD常用断点之CC断点

Posted 七夜的故事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OD常用断点之CC断点相关的知识,希望对你有一定的参考价值。

  在做Windows平台软件逆向时,Ollydbg是极其常用的逆向工具,动态调试功能非常强大。在调试过程中,断点的使用有助于确定关键的破解位置,今天讲解的内容是OD常用断点中的CC断点。

CC断点有很多名称,比如普通断点、F2断点或者int3断点,每个名称都有它的来源。下面我们以crackme_01.exe为例子讲解一下如何设置CC断点以及其原理。

技术分享

  打开VM虚拟机,虚拟机中运行的操作系统为XP,接着使用OD载入crackme_01.exe。如下所示。

技术分享

  

  汇编窗口中展示的是crackme_01.exe的反汇编代码,选中一行汇编代码,按下F2快捷键或者双击,就可以设置CC断点,由于OD中设置断点的快捷键是F2,也被称为F2断点。断点设置成功后,汇编代码的地址会变红。

 

技术分享

  

  CC断点是OD中比较常用,而且相对普通的断点。这类断点的好处是可以设置任意个,缺点是容易被会检测出来。下面咱们从原理上解释一下为什么会被检测出来。

首先,我们双击下断点位置的下一条指令,将汇编代码修改为mov eax,[0x0040100c],这个语句的意思是将内存地址为0x0040100c处的dword大小的数据赋值给eax。大家仔细看0x0040100c地址即为下断点出指令的地址,因此可以换一种说法,即将0x0040100c处汇编语句的机器码赋值给eax。

 

技术分享

接下来F9运行程序,程序会断在刚才设置的断点位置,然后F8单步运行程序,运行到刚才修改过的汇编指令的下一句指令。我们注意一下下图中eax中的值是多少。

技术分享

  

  我们注意到下端点出的汇编指令机器码为E8170300,按照mov eax,[0x0040100c]的逻辑,eax中的值应该为000317E8,可是我们发现汇编指令机器码第一个字节的E8变成了CC,这就是CC断点的由来。CC断点的原理是将断下的指令地址处的第一个字节设置为0xCC,当然这是OD帮我们做的,而0xCC对应的汇编指令为int3,是专门用来调试的中断指令。当CPU执行到int3指令时,会触发异常代码为EXCEPTION_BREAKPOINT的异常,这样OD就能够接收到这个异常,然后进行相应的处理,这也是CC断点也叫int3断点的原因。

为什么说CC断点容易检测呢?从上面我们使用的方法,就可以轻易获取到修改的指令,那么程序员就可以在一些特殊的函数位置设置检测点,来检测是否设置了CC断点,以便进行反调试。这些检测点也就是我们常说的“暗桩”。

除了使用双击和F2进行CC断点设置外,我们还可以使用一些命令进行设置。比如bp 0x0040100c,也可以设置和刚才一样的断点。

 

技术分享

我们点击B位置,就可以切换到断点窗口,右击来对断点进行删除、禁止等操作。

技术分享断点窗口:

技术分享

以上是关于OD常用断点之CC断点的主要内容,如果未能解决你的问题,请参考以下文章

Windows 逆向OD 调试器工具 ( 分析 OD 硬件断点处的关键代码 | 添加硬件断点 | 关键代码 | MOV 指令 | EAX 寄存器值分析 | 使用命令查看 esi+0cc 地址 )(代码

汇编命令及OD常用命令及断点设置

OD调试器断点——消息断点

fiddler常用操作之断点

学习:断点

请问OD中怎么用命令下断点呢?我看见教程里面输入bp RegOpenKeyExA 。然后就跳转到一个内存地址。