看雪软件安全论坛

返回   看雪软件安全论坛 > 软件安全 > 『加壳与脱壳』

Expired Thread 该主题: "[转]如何对抗硬件断点之一 --- 调试寄存器" 因在一年内没有任何回复而自动关闭。
如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。

发表新主题 关闭主题
转帖  
主题工具 显示模式
linhanshi
级别:42 | 在线时长:1983小时 | 升级还需:38小时级别:42 | 在线时长:1983小时 | 升级还需:38小时级别:42 | 在线时长:1983小时 | 升级还需:38小时级别:42 | 在线时长:1983小时 | 升级还需:38小时级别:42 | 在线时长:1983小时 | 升级还需:38小时级别:42 | 在线时长:1983小时 | 升级还需:38小时

linhanshi 的头像

『资源下载』版主</br>论坛督察官</br>核心管理团常务
『资源下载』版主
论坛督察官
核心管理团常务

资 料:
注册日期: May 2004
帖子: 11,273 linhanshi 品行端正
精华: 0
现金: 2527 Kx
1 旧 2005-02-04, 22:51 默认 [转]如何对抗硬件断点之一 --- 调试寄存器
linhanshi 当前离线

原文出处:
http://www.popbase.net/bbs/dispbbs.asp?boardID=5&ID=2377&page=1

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

Author:Lenus
From: www.popbase.net
E-mail:Lenus_M@163.com

--------------------------------------------------
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。

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


回复时引用此帖 返回顶端
小虾
级别:28 | 在线时长:897小时 | 升级还需:60小时级别:28 | 在线时长:897小时 | 升级还需:60小时级别:28 | 在线时长:897小时 | 升级还需:60小时级别:28 | 在线时长:897小时 | 升级还需:60小时

小虾 的头像

『Win32/Win64编程』版主
『Win32/Win64编程』版主

资 料:
注册日期: Apr 2004
帖子: 2,171 小虾 品行端正
精华: 10
现金: 2077 Kx
2 旧 2005-02-04, 23:42 默认
小虾 当前离线

支持,等下篇Anti_hardbreakpoint。


回复时引用此帖 返回顶端
采臣·宁
级别:4 | 在线时长:42小时 | 升级还需:3小时

采臣·宁 的头像

普通会员
普通会员

资 料:
注册日期: Aug 2004
帖子: 1,236 采臣·宁 品行端正
精华: 1
现金: 200 Kx
3 旧 2005-02-05, 00:22 默认
采臣·宁 当前离线

好,顶啊顶

回复时引用此帖 返回顶端
Lenus
级别:7 | 在线时长:90小时 | 升级还需:6小时级别:7 | 在线时长:90小时 | 升级还需:6小时级别:7 | 在线时长:90小时 | 升级还需:6小时级别:7 | 在线时长:90小时 | 升级还需:6小时

VIP会员
VIP会员

资 料:
注册日期: Nov 2004
帖子: 361 Lenus 品行端正
精华: 2
现金: 203 Kx
4 旧 2005-02-05, 00:44 默认
Lenus 当前离线

还记得对内存断点的问题一直有困惑的地方
是采臣兄点拨了我,要再道一声:谢谢

回复时引用此帖 返回顶端
love8909
级别:0 | 在线时长:2小时 | 升级还需:3小时

初级会员
初级会员

资 料:
注册日期: Jun 2004
帖子: 32 love8909 品行端正
精华: 0
现金: 200 Kx
5 旧 2005-02-05, 10:57 默认
love8909 当前离线

为什么每次小lenus的帖子都是linhanshi兄转过来的?

回复时引用此帖 返回顶端
prince
级别:5 | 在线时长:57小时 | 升级还需:3小时级别:5 | 在线时长:57小时 | 升级还需:3小时

prince 的头像

高级会员
高级会员

资 料:
注册日期: Apr 2004
帖子: 1,826 prince 品行端正
精华: 16
现金: 200 Kx
6 旧 2005-02-05, 11:17 默认
prince 当前离线

期待下一篇!
支持Lenus!

回复时引用此帖 返回顶端
kanxue
级别:79 | 在线时长:6643小时 | 升级还需:77小时级别:79 | 在线时长:6643小时 | 升级还需:77小时级别:79 | 在线时长:6643小时 | 升级还需:77小时级别:79 | 在线时长:6643小时 | 升级还需:77小时

kanxue 的头像

坛主
坛主

资 料:
注册日期: Apr 2004
帖子: 10,114 kanxue 品行端正
精华: 7
现金: 2778 Kx
7 旧 2005-02-05, 11:41 默认
kanxue 当前在线

引用:
最初由 love8909 发布
为什么每次小lenus的帖子都是linhanshi兄转过来的? 
因为lenus只发表在他论坛上,我曾和linhanshi说过,在网上如看到“十分优秀”的相关文章(一般的文章不转帖),如作者允许转载的话,就转一份拷贝过来.转到这对lenus有好处,让更多的人认识他。;)

回复时引用此帖 返回顶端
newpp
级别:0 | 在线时长:0小时 | 升级还需:5小时

初级会员
初级会员

资 料:
注册日期: Jul 2004
帖子: 21 newpp 品行端正
精华: 0
现金: 200 Kx
8 旧 2005-02-05, 11:47 默认 Thanks You.Well it is
newpp 当前离线

If someone is interesting it,can take a look Intel Software Developes' Manual.

回复时引用此帖 返回顶端
Lenus
级别:7 | 在线时长:90小时 | 升级还需:6小时级别:7 | 在线时长:90小时 | 升级还需:6小时级别:7 | 在线时长:90小时 | 升级还需:6小时级别:7 | 在线时长:90小时 | 升级还需:6小时

VIP会员
VIP会员

资 料:
注册日期: Nov 2004
帖子: 361 Lenus 品行端正
精华: 2
现金: 203 Kx
9 旧 2005-02-06, 00:40 默认
Lenus 当前离线

引用:
最初由 kanxue 发布


因为lenus只发表在他论坛上,我曾和linhanshi说过,在网上如看到“十分优秀”的相关文章(一般的文章不转帖),如作者允许转载的话,就转一份拷贝过来.转到这对lenus有好处,让更多的人认识他。;) 
我想kanxue老大误会在下的意思了.
我并不是不愿意把文章放到看雪上,在这个给予我知识的地方,有太多的高手在看着我们的一言一行,象我这些小儿科的东西,只是在追求知识的道路上的一些心得,说真的这些东西,就来我再看一遍也觉得很幼稚,如果看过我这些东西的朋友也知道,我所写的只是最最简单的东西....(都是高手不屑一顾去说的)
不是不愿意放到看雪,只是没能找到一份让自己满意的文字能发表在看雪论坛这神圣的知识论坛里面,我不知道linhanshi兄弟如此,看得起在下的垃圾...我只是希望早一天能拿出一写至少起码连自己看起来还满意的文字,能自己放到这里.
我从以前到现在,以及将来都曾经,正在,一定会默默的支持着看雪论坛...

回复时引用此帖 返回顶端
linhanshi
级别:42 | 在线时长:1983小时 | 升级还需:38小时级别:42 | 在线时长:1983小时 | 升级还需:38小时级别:42 | 在线时长:1983小时 | 升级还需:38小时级别:42 | 在线时长:1983小时 | 升级还需:38小时级别:42 | 在线时长:1983小时 | 升级还需:38小时级别:42 | 在线时长:1983小时 | 升级还需:38小时

linhanshi 的头像

『资源下载』版主</br>论坛督察官</br>核心管理团常务
『资源下载』版主
论坛督察官
核心管理团常务

资 料:
注册日期: May 2004
帖子: 11,273 linhanshi 品行端正
精华: 0
现金: 2527 Kx
10 旧 2005-02-06, 00:48 默认
linhanshi 当前离线

Thanks!!!
发的邮件收到了没有
linhanshi@yahoo.com.cn

此帖于 2005-02-06 00:59 被 linhanshi 最后编辑
回复时引用此帖 返回顶端
prince
级别:5 | 在线时长:57小时 | 升级还需:3小时级别:5 | 在线时长:57小时 | 升级还需:3小时

prince 的头像

高级会员
高级会员

资 料:
注册日期: Apr 2004
帖子: 1,826 prince 品行端正
精华: 16
现金: 200 Kx
11 旧 2005-02-06, 09:07 默认
prince 当前离线

不用这么谦虚吧?Lenus兄,你这么说我以后还怎么发贴啊?
其实你看看你每篇文章的回贴率就知道你的文章是绝对受欢迎的~
希望加油继续,我还等着下一篇呢!

回复时引用此帖 返回顶端
ljy3282393
级别:1 | 在线时长:6小时 | 升级还需:6小时

ljy3282393 的头像

普通会员
普通会员

资 料:
注册日期: Nov 2004
帖子: 425 ljy3282393 品行端正
精华: 1
现金: 200 Kx
12 旧 2005-02-06, 13:59 默认
ljy3282393 当前离线

Lenus兄的文章详细易懂,非常适合我们这些小菜鸟观看!不象有些高手只写HOW(怎么做)不写WHY(为什么这样做)的!期待Lenus兄再写多几篇调试原理方面的文章给我们这些小菜鸟观看!

回复时引用此帖 返回顶端
qiweixue
级别:7 | 在线时长:81小时 | 升级还需:15小时级别:7 | 在线时长:81小时 | 升级还需:15小时级别:7 | 在线时长:81小时 | 升级还需:15小时级别:7 | 在线时长:81小时 | 升级还需:15小时

qiweixue 的头像

高级会员
高级会员

资 料:
注册日期: May 2004
帖子: 1,124 qiweixue 品行端正
精华: 19
现金: 206 Kx
13 旧 2005-02-06, 15:22 默认
帅哥 qiweixue 当前离线

引用:
最初由 love8909 发布
为什么每次小lenus的帖子都是linhanshi兄转过来的? 
国际问题:石油换食品。。。

回复时引用此帖 返回顶端
David
级别:0 | 在线时长:2小时 | 升级还需:3小时

David 的头像

中级会员
中级会员

资 料:
注册日期: Apr 2004
帖子: 404 David 品行端正
精华: 20
现金: 200 Kx
14 旧 2005-02-07, 12:15 默认
David 当前离线

 不用太低调。

回复时引用此帖 返回顶端
shoooo
级别:40 | 在线时长:1784小时 | 升级还需:61小时级别:40 | 在线时长:1784小时 | 升级还需:61小时级别:40 | 在线时长:1784小时 | 升级还需:61小时级别:40 | 在线时长:1784小时 | 升级还需:61小时

shoooo 的头像

BAN

资 料:
注册日期: Nov 2004
帖子: 2,029 shoooo 不日成名
精华: 16
现金: 200 Kx
15 旧 2005-02-07, 12:41 默认
shoooo 当前离线

很好啊!
有些东西正好是欠缺的
不知道有没有API能直接对Dr0-Dr7进行操作的


回复时引用此帖 返回顶端
发表新主题 关闭主题

书签
Expired Thread 该主题: "[转]如何对抗硬件断点之一 --- 调试寄存器" 因在一年内没有任何回复而自动关闭。
如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。


主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子
论坛启用 BB 代码
论坛启用 表情符号
论坛跳转

所有时间均为北京时间。现在的时间是 19:13


©2000-2009 PEdiy.com All rights reserved.By PEDIY
Powered by vBulletin ®Jelsoft Enterprises Ltd. 增强包制作PHP源动力.界面支持standme Studio.