OD断点操作
原文链接:https://www.cnblogs.com/qiyeboy/p/6815988.html
在做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断点操作的更多相关文章
- C#中如何使用断点操作调试程序
Visual Studio调试器调试 当代码不能正常运行时,可以通过调试定位错误.常用的程序调试操作包括设置断点.开始.中断和停止程序的执行.单步执行程序以及使程序运行到指定的位置.下面将对这几种常用 ...
- JavaScript指定断点操作
什么是断点操作(Breakpoint action) 做前端开发的小伙伴,或许对这个断点操作不是很熟悉.不过你要是问其他语言(比如C,C++ ,C #等)的开发者,他们应该都挺熟悉断点操作,这种断点操 ...
- WinDbg常用命令系列---断点操作b*
ba (Break on Access) ba命令设置处理器断点(通常称为数据断点,不太准确).此断点在访问指定内存时触发. 用户模式下 [~Thread] ba[ID] Access Size [O ...
- Fiddler大全之断点操作
打断点(bpu) 1.为什么要打断点呢?比如一个购买的金额输入框,输入框前端做了限制100-1000,那么我们测试的时候,需要测试小于100的情况下.很显然前端只能输入大于100的.这是我们可以先抓到 ...
- OD之常用命令
一:od断点注释保存的问题,由于od只有在正常退出的情况下才会保存分析代码时留下的注释,而很多时候为了在退出od时不让目标程序退出使用了剥离进程,这样就会导致这次操作所有的注释都没有保存,第二次重新载 ...
- OD之修改文件标题(一)
OD是逆向工程中的一个重要工具,逆向工程调试说明具体请参考:百度百科,OD介绍,当然就我了解而言,俗话就是破解软件,市面上的什么破解版,精简版啥的基本都是通过这种技术的,但是这并不能一概而论说逆向工程 ...
- 学习:API断点和条件记录断点和内存断点的配合
前言:感觉可能与之前有点相同,主要是介绍shark恒老师说的一种断点方法,结合了API和条件记录进行下断点 适用条件:当我们利用简单的WINDOWS API函数如MessageBoxW/A 又或者获取 ...
- 学习:API断点
API的介绍:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而 ...
- ring3硬件断点
4个断点寄存器DR0~DR3用来设置断点的线性地址. DR6为状态寄存器,DR7为控制寄存器. DR4和DR5保留.当CR4.DE==1时,访问DR4和DR5产生#UD异常:IF CR4.DE==0, ...
随机推荐
- 什么是 session 和 cookie
cookie 大家应该都熟悉,比如说登录某些网站一段时间后,就要求你重新登录:再比如有的同学很喜欢玩爬虫技术,有时候网站就是可以拦截住你的爬虫,这些都和 cookie 有关.如果你明白了服务器后端对于 ...
- 设计Twitter 时间线
「design Twitter」是 LeetCode 上第 335 道题目,不仅题目本身很有意思,而且把合并多个有序链表的算法和面向对象设计(OO design)结合起来了,很有实际意义,本文就带大家 ...
- import tensorflow 出现非法指令(核心已转储)
使用 conda install -c conda-forge tensorflow 或者 conda install -c conda-forge tensorflow-gpu 试下.
- 【洛谷】P1009 阶乘之和——高精度算法
题目描述 用高精度计算出S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) 其中"!&qu ...
- Lte Design Documentation之RRC
RRC 特点 RRC模型在模拟器中提供以下功能 生成(在eNB中)和解释(在UE中)信息块(尤其是MIB和SIB1, SIB2) 初始化小区选择 RRC连接建立过程 RRC重新配置程序, 支持以下方式 ...
- 20 HTTP1.0和HTTP1.1
20 HTTP1.0和HTTP1.1 推荐: http://blog.csdn.net/elifefly/article/details/3964766 请求头Host字段,一个服务器多个网站 长链接 ...
- VBA_50段代码总结
'' 30个有用的VBA代码 '目录: '1--合理使用数组:'2--一次保存并关闭所 ...
- [MIT6.006] 20. Daynamic Programming II: Text Justification, Blackjack 动态规划II:文本对齐,黑杰克
这节课通过讲解动态规划在文本对齐(Text Justification)和黑杰克(Blackjack)上的求解过程,来帮助我们理解动态规划的通用求解的五个步骤: 动态规划求解的五个"简单&q ...
- mysql mybatis Date java时间和写入数据库时间不符差一秒问题
1,java的数据库实体定义 private Timestamp createTime:2,非常重要!ddl语句建表字段的单位 datetime要手动设置保留3位毫秒数,不然就四舍五入了! ALTER ...
- Nacos配置中心源码分析
1.使用 compile 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2.2.3.RELEASE' spring: app ...