如何对抗硬件断点--- 调试寄存器

1.前言

在我跨入ollydbg的门的时候,就对ollydbg里面的各种断点充满了疑问,以前我总是不明白普通断点,内存断点,硬件断点有什么区别,他们为什么 有些时候不能混用,他们的原理是什么,在学习了前辈们的文章以后,终于明白了一些东西。希望这篇文章能让你对硬件断点的原理和使用有一些帮助

2.正文
--------------------------------------------------
i.硬件断点的原理

在寄存器中,有这么一些寄存器,它们用于调试。人们把他们称为调试寄存器,调试寄存器一共有8个名字分别从Dr0-Dr7。所以我们也把调试寄存器简单的称为Drx。

对于Dr0-Dr3的四个调试寄存器,他们的作用是存放中断的地址,例如:401000
对于Dr4,Dr5这两个寄存器我们一般不使用他们,保留
对于Dr6,Dr7这两个寄存器的作用是用来记录你在Dr0-Dr3中下断的地址的属性,比如:对这个401000是硬件读还是写,或者是执行;是对字节还是对字,或者是双字。

好了,从这里你可能明白一些东西。

1. 为什么在OD里面只能下4个硬件断点?
2. 为什么下硬件断点有byte,word,dword只分?
3. 为什么下硬件断点有读,写,执行只分?

ii.关于F4,F8,F7,F2的区别

在ollydbug的help里面只是提到如何使用F7和F8的使用,并没说明他们的实现原理

现在我们来做一个实验

实验一(F4的原理)

1.随便找一个程序,载入OD,构造一个死循环

就象这样:

00400154 > 90 nop //EP停在这里
00400155 90 nop
00400156 90 nop
00400157 90 nop
00400158 ^ EB FA jmp short 天2国际.<ModuleEntryPoint> //构造一个死循环
0040015A 61 popad
0040015B 94 xchg eax,esp

2.对0040015A这一行按下F4,由于死循环,程序一直运行

3.调试器的窗口里,右键--查看调试寄存器

结果在Drx里面显示:

DR0 0040015A //地址
DR1 00000000
DR2 00000000
DR3 00000000
DR6 FFFF0FF0 //断点属性
DR7 00000401

实验二(F8原理)

1.随便找一个程序,载入OD,构造一个子程序的死循环

就像这样

00400154 t> E8 0100D03F call 4010015A //EP,停在这里
00400159 90 nop
0040015A 90 nop
0040015B 90 nop
0040015C 90 nop //对这里下F2断点
0040015D C3 retn // 返回

2.按下F8,由于INT3断点,程序中断在0040015C

3.调试器的窗口里,右键--查看调试寄存器

结果在Drx里面显示:

DR0 00400159 //call的返回地址
DR1 00000000
DR2 00000000
DR3 00000000
DR6 FFFF4FF1 //断点属性
DR7 00000401


实验三(F7原理)

1.随便找一个程序,载入OD

2.双击调试器的窗口里的T标志,将TF从原来的0变成1

3.F9运行

结果程序断在了下面的一行

实验四(F2的原理)

1.用98的notepad吧,载入OD,构造一个死循环

004010CC N> 90 nop //EP,挺在这里
004010CD 90 nop
004010CE ^ EB FC jmp short NOTEPAD.<ModuleEntryPoint> //死循环
004010D0 90 nop //在这里按下F2,普通断点
004010D1 90 nop

2.按下F9,由于死循环,程序一直运行着

3.使用LordPE(不要用ollydump)将这个程序dump下来

4.重新载入OD

来看看成什么样子了

004010CC d> $ 90 nop
004010CD . 90 nop
004010CE .^ EB FC jmp short dumped.<ModuleEntryPoint>
004010D0 CC int3 //这里变成了CC了
004010D1 90 nop

--------------------------------------------------

3.总结

从实验一和实验二我们能清楚的看到,F4是直接将该行的地址放入drx里面,F8是将下一行的地址放入到drx里面,他们都使用了调试寄存器。从实验三中 我们知道对于F7来说很可能使用的是将TF置一的办法,也就是说当我们按下F7的时候OD把TF置一。对于F2来说他是将,第一个字节悄悄的修改成了 CC,虽然并没有显示给我看到这个是一个CC,当我们按下F2的时候,OD还没有运行,只是把这个表示记录下来,当运行的时候他就把所有标记的字节修改 了,尽管还是显示原来的代码,当然当他一暂停下来就又修改回来了。

上面的是实验中,F7的原理只是猜测,还没有很好的办法能证明他就是使用TF,下面我继续猜测一下内存断点的原理

1.将设置的内存断点的地址记录下来

2.对这个地址的内存页面修改其属性

如果是内存写断点,就修改为RE(可读,可执行)
如果是内存访问断点,就修改为NO ACCESS(不可访问)

3.只要访问到这个页面就会产生相应的异常,然后由OD来判断是否与记录的断点一致,从而是否中断下来

--------------------------------------------------
4.后话

对于上面的F7和内存断点的原理,我还没想出什么好的办法去找出OD的原理,或许去调试一下ollydbg.exe是一个不错的建议。如果有哪位兄弟知道有什么好办法,希望能告诉我。当然也很欢迎各位和我讨论。

下面一篇将讨论,如何anti-hardbreakpoint。

如果转载请保持文章完整,谢谢您能看完。

转载于:https://www.cnblogs.com/milantgh/p/3861367.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019 半导体领袖新年展望(一)| 半导体行业观察

来源&#xff1a;半导体行业观察摘要&#xff1a;为了让大家更好地了解半导体厂商2019年的规划&#xff0c;我们整理了三十多家国内外产业链供应商参与了这次讨论&#xff0c;给大家呈现一个完整的2019半导体面面观。过去一年的半导体产业波谲云诡&#xff01;曾经供不应求的被…

正确的 zip 压缩与解压代码

网上流传的zip压缩与解压 的代码有非常大的问题 尽管使用了ant进行压缩与解压&#xff0c;可是任务的流程还是用的java.util.zip 的方式写的&#xff0c;我在使用的过程中遇到了压缩的文件夹结构有误&#xff0c;甚至出现不同解压软件显示的文件夹结构不同的窘境。 以下给出使用…

String和STL的一些基础知识

一.STL&#xff08;标准模板库&#xff09;的六大组件:容器&#xff0c;算法&#xff0c;迭代器&#xff0c;仿函数&#xff0c;适配器&#xff08;配接器&#xff09;&#xff0c;空间配置器 1.容器:各种数据结构&#xff0c;vector,list,deque,unordered_set&#xff1b; 2.…

机器学习如何借鉴人类的视觉识别学习?让我们从婴幼儿的视觉学习说起

来源&#xff1a;AI科技评论当只需要把大规模标注图像数据库塞给深度神经网络就可以得到高准确率的物体分类模型之后&#xff0c;有很多研究人员开始考虑更深入的问题&#xff1a;人类的视觉识别学习过程是怎样的&#xff1f;以及既然人类视觉系统与计算机视觉系统之间表现出了…

ggplot2绘图入门系列之四:再说散点图

1 色彩和形状的控制 数据特征不仅可以用坐标来表示&#xff0c;也可以用不同的色彩或形状来表示。仍以mpg数据集为例&#xff0c;所用到的变量有cty&#xff08;城市中行驶距离&#xff09;,hwy&#xff08;高速路行驶距离&#xff09;,displ&#xff08;排量大小&#xff09;,…

2019年物联网发展的六大趋势

来源&#xff1a;资本实验室摘要&#xff1a;在人类发展史上&#xff0c;通讯技术的每次革命性突破&#xff0c;都会让我们离完全的数字化社会越来越近。当现金变成微信和支付宝&#xff1b;当逛商场变成逛淘宝&#xff1b;当叫出租车变成叫滴滴&#xff1b;当“您好”变成“您…

exec函数簇

exec一共有六种函数&#xff0c;都是以exec开头。 1 int execl(const char *path, const char *arg, ...); 2 int execlp(const char *file, const char *arg, ...); 3 int execle(const char *path, const char *arg, ..., char * const envp[]); 4 int execv(const char *pat…

gdb基础知识

文档 一.gdb打印demo.cpp运行结果 在CMakeLists.txt中添加 set(CMAKE_BUILD_TYPE Debug) 然后make以后通过gdb filename进入该文件的gdb调试模式,同时使用shell 就可以像终端一样使用shell命令。 例子: demo.cpp #include <iostream> #include <vector> #i…

重磅!罗振宇跨年演讲:扎心5问

来源&#xff1a;亿欧网摘要&#xff1a;我们不断追问“这个世界到底是什么样子的&#xff1f;”今年罗振宇在“2018时间的朋友跨年演讲”中给出的解题思路是&#xff1a;小趋势。2018年12月31日晚&#xff0c;“2018时间的朋友跨年演讲”在深圳春茧体育馆拉开帷幕。从4000人的…

C++ opencv的一些基础知识

一&#xff0e;基础知识 1.cv::mat type返回数字对应的类型 C1, C2, C3, C4 指的是通道(Channel)数&#xff0c;比如3通道的float 32&#xff1a; cv::Mat M5 cv::Mat::zeros(2, 3, CV_32FC(3)); 2.at方法数据类型 知道通道数和每个通道数据类型的情况下&#xff0c;指定给…

centos 6.5 x64编译有python的vim7.4

wget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-extra.tar.gzwget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-lang.tar.gzwget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2 下载后&#xff0c;解压 tar jxf vim-7.4.tar.bz2tar zxf vim-7.2-extra.tar.gztar zxf vim-7.2-l…

难以想象!未来十年,颠覆性技术将带来这些社会变革……

作者&#xff1a;张一清来源&#xff1a;财新《中国改革》摘要&#xff1a;技术飞速进步改变生活&#xff0c;人类是否准备好迎接它们给生活、制度和文化带来的挑战&#xff1f;现代社会&#xff0c;技术的更新速度永远比你想得更快。当感叹技术的飞速进步&#xff0c;当憧憬技…

硬件工程师电路设计必须紧记的十大要点

一、电源是系统的血脉&#xff0c;要舍得成本&#xff0c;这对产品的稳定性和通过各种认证是非常有好处的。1.尽量采用∏型滤波&#xff0c;增加10uH电感&#xff0c;每个芯片电源管脚要接104旁路电容;2.采用压敏电阻或瞬态二极管&#xff0c;抑制浪涌&#xff1b;3.模电和数电…

C++模板的一些基础知识

一.函数模板 可看出就是将函数返回类型和形参类型去掉。 1.代码1 #include <iostream> #include <vector> #include <string> #include <algorithm> #include <map> #include <fstream> using namespace std;template<typename T>…

芯片热!价格战!争落地!2018年人工智能发展回忆录

来源&#xff1a;网易智能摘要&#xff1a;2018年是非同寻常的一年&#xff0c;对于人工智能行业而言更是如此。在这一年&#xff0c;几乎所有科技公司宣布全面拥抱AI&#xff0c;在这一年&#xff0c;巨头深入布局&#xff0c;挤压着创业者的想象空间&#xff0c;在这一年&…

如何附加数据库

转载于:https://www.cnblogs.com/tanqianqian/p/5975072.html

a16z基金:顶级风投眼中的2019技术趋势

来源&#xff1a;资本实验室位于硅谷的顶级风险投资公司——安德森霍洛维兹基金&#xff08;Andreessen Horowitz&#xff0c;简称a16z&#xff09;在近期提出了他们将在2019年遵循的五大技术趋势&#xff0c;涉及生物医疗、数字货币与区块链、人工智能等技术领域。从字面上来看…

CXF 调用C#.net的WebService

原文链接&#xff1a;http://hi.baidu.com/pengfeiiw/blog/item/3203e29065aa3a8aa977a4d0.html 1.编写C#.net的WebService Service.cs using System;using System.Web;using System.Web.Services;using System.Web.Services.Protocols; [WebService(Namespace "http://l…

新算力下的2019 AI

来源&#xff1a;乐晴智库精选▌AI步入下半场IT每十年一阶段形成六大阶段每一轮科技革命都会带来新的赢家基础设施—通用平台—应用层的发展路径每一轮科技革命均印证基础设施先行的发展路径基础设施与通用平台易形成寡头垄断应用层的发展愈来愈依托于生态云计算厂商的资本开支…

leetcode动态规划(python与c++)

1 . 斐波那契数 class Solution:def fib(self, n: int) -> int:# if n0:# return 0# elif n1:# return 1# else:# return self.fib(n-1)self.fib(n-2)a 0b 1for i in range(n):a,b b,abreturn a class Solution { public:int fib(int n) {int a 0, b 1;fo…