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断点的更多相关文章
- OD常用断点
OD常用断点 很全很全 常用断点 拦截窗口: bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWi ...
- 学习:CC断点
断点介绍: shark恒老师说有四种说法,但是其实都是相同的 第一个读法:普通断点 第二个读法:F2断点 第三个读法:INT3断点( int3其实就是汇编指令 ) 第四个读法:CC断点 (CC其实就是 ...
- windbg-bp、 bm、 bu、 bl、 bc、 ba(断点、硬件断点)
bp bp 命令是在某个地址下断点, 可以 bp 0x7783FEB 也可以 bp MyApp!SomeFunction . 对于后者,WinDBG 会自动找到MyApp!SomeFunction 对 ...
- Jlink 软件断点和硬件断点
调试2440 RAM拷贝至SDRAM遇到的问题 汇编代码主要是初始化一些寄存器,关狗,初始化时钟,初始化存储管理器以便访问内存,然后将SoC上4k RAM数据拷贝至SDRAM,然后在SRAM里面运行, ...
- Lua中如何实现类似gdb的断点调试—06断点行号检查与自动修正
前面两篇我们对性能做了一个优化,接下来继续来丰富调试器的特性. 我们前面提到过,函数内并不是所有行都是有效行,空行和注释行就不是有效行.我们之前在添加断点的时候,并没有对行号进行检查,任何行号都能成功 ...
- Ollydbg中的内存断点和硬件断点的区别
转载自: https://www.zhihu.com/question/52625624 旅人的回复 作者:旅人链接:https://www.zhihu.com/question/52625624/a ...
- 学习:API断点和条件记录断点和内存断点的配合
前言:感觉可能与之前有点相同,主要是介绍shark恒老师说的一种断点方法,结合了API和条件记录进行下断点 适用条件:当我们利用简单的WINDOWS API函数如MessageBoxW/A 又或者获取 ...
- ajax异步的问题,(主要解决有时候前台打断点和不打断点结果不一样的问题,一般情况下是存在异步的问题)
一,代码 $(function() { $(".btn-submit").click(function() { if(!checkData()){ return; } var ur ...
- phpstorm开启xdebug断点调试,断点调试不成功来这里
感谢一下两篇博主的文章 其他的就... https://paper.seebug.org/308/ https://www.cnblogs.com/jice/p/5064838.html 首先安装xd ...
随机推荐
- Android Studio开发遇到程序崩溃问题
在用Android Studio开发过程中,经常遇到程序本身没有错误,但运行起来却总是挂掉,具体有如下几个解决方案: 1.将运行在真机上的app卸载,重新运行安装 2.在Build选项中有一个clea ...
- 一场完美的“秒杀”:API加速的业务逻辑
清晨,我被一个客户电话惊醒,客户异常焦急,寻问CDN能不能帮助他们解决“秒杀”的问题,他们昨天刚刚进行了“整点秒杀活动”,结果并发量过大,导致服务宕机,用户投诉. 为了理清思路,我问了对方三个问题: ...
- 2015.07.20MapReducer源码解析(笔记)
MapReducer源码解析(笔记) 第一步,读取数据源,将每一行内容解析成一个个键值对,每个键值对供map函数定义一次,数据源由FileInputFormat:指定的,程序就能从地址读取记录,读 ...
- pyqt样式表语法笔记(下)--原创
pyqt样式表语法笔记(下) python 启动界面 QSS pyqt 一.启动界面的设置 简单点~说话的方式简单点用一张静态图片作为程序启动界面为例. 原来的语句 python 7行 ...
- Redis应用----消息传递
1.摘要 消息传递这一应用广泛存在于各个网站中,这个功能也是一个网站必不可少的.常见的消息传递应用有,新浪微博中的@我呀.给你评论然后的提示呀.赞赞赞提示.私信呀.甚至是发微博分享的新鲜事:知乎中的私 ...
- OpenCV局部变形算法探究
OpenCV是跨平台的强大的计算机视觉识别和图像处理的开源库,可以利用他来实现:模式识别.构建神经网络.深度学习,总之用途多多,入门级就先做一下图像处理吧! 基本的图像处理算法(图像灰阶化.二值化.仿 ...
- Nagios邮件报警
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; line-height: 150%; fon ...
- 【转】ActionScript,Flash,Flash/Flex Builder,FlashPlayer,AIR,swf,swc,swz之间的区别
原文链接:http://zengrong.net/post/1295.htm ActionScript ActionScript通常简称为AS,它是Flash平台的语言.AS编写的程序,最终可以编译成 ...
- 【转】一个小工具类,利用shareObject把数据缓存
原文链接:http://bbs.9ria.com/thread-284082-1-2.html 之前做一个数据缓存,就顺便把写入缓存,清除缓存,获取缓存都整理了一下,其中也做了些参考,个人水平有限,有 ...
- 手机自动化测试:appium源码分析之bootstrap十二
手机自动化测试:appium源码分析之bootstrap十二 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...