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位置,就可以切换到断点窗口,右击来对断点进行删除、禁止等操作。

断点窗口:

原文发布于微信公众号 - 七夜安全博客(qiye_safe)

原文发表时间:2017-05-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据之美

storm 原理简介及单机版安装指南

本文翻译自: https://github.com/nathanmarz/storm/wiki/Tutorial Storm是一个分布式的、高容错的实时计算系统...

18210
来自专栏左瞅瞅,右瞅瞅

Linux LVM简明教程

逻辑卷管理LVM是一个多才多艺的硬盘系统工具。无论在Linux或者其他类似的系统,都是非常的好用。传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可...

791
来自专栏社区的朋友们

运维利器之万能的 strace

strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。strace...

2950
来自专栏linux驱动个人学习

解析Linux中的VFS文件系统之文件系统的注册(二)

继上一篇文章:https://cloud.tencent.com/developer/article/1053882 3. 文件系统的注册 这里的文件系统是指可...

3236
来自专栏程序员互动联盟

【编程基础】Windows下如何玩转串口编程

问题:有朋友在群里问Windows下如何给单片机发送或者接收数据。 ? 在windows下,各种外设都被看成文件,这个跟Linux下看成设备节点类似,所以串...

2875
来自专栏代码世界

Python之socketserver模块和验证客户端链接的合法性

验证客户端链接的合法性 分布式系统中实现一个简单的客户端链接认证功能 #_*_coding:utf-8_*_ from socket import * impo...

3647
来自专栏coding for love

从输入url到看到页面的过程分析

我思考了很多知识组织方法来帮助理解网络知识,比如按osi模型从底至上,或者按协议种类,或者按网络发展史。但最终我还是决定选择用这个经典的问题,将网络知识串成线。...

792
来自专栏技术博文

H5缓存机制浅析

1 H5 缓存机制介绍 H5,即 HTML5,是新一代的 HTML 标准,加入很多新的特性。离线存储(也可称为缓存机制)是其中一个非常重要的特性。H5 引入的离...

3108
来自专栏Java3y

HTTP就是这么简单

为什么要学HTTP? 我们绝大多数的Web应用都是基于HTTP来进行开发的。我们对Web的操作都是通过HTTP协议来进行传输数据的。 简单来说,HTTP协议就是...

3063
来自专栏行者悟空

cas server + cas client 单点登录 原理介绍

3035

扫码关注云+社区