百度空间 | 百度首页 
 
查看文章
 
ring0不调api徒手设置硬件断点[转帖]
2009-08-04 16:06
ring0不调api徒手设置硬件断点
by flyingkisser
09.2.12
时间比较有限,捡关键的说说

1.如何写dr0,dr7,一般用NtSetContextThread,
为了不调API,这个问题就成了如何定位到指定线程的context,办法是:
先由tid拿到ethread
kthread.InitialStack-29ch就是,如果这个地址无效,就使用ethread->TrapFrame
这时拿到的地址指向结构KTRAP_FRAME,修改它对应的drx就行了。
为什么是_KTHREAD.InitialStack-29ch,自己逆向一下PspGetSetContextSpecialApc就知道了。
xp下是29ch,其它系统没试过

2.设置kthread->DebugActive为1,如果不设置,线程切换时不会把trapframe里的drx写回到线程context中去。
这个问题搞了我很久。

3.硬件断点断下时,1号中断ISR接管控制,这时,你下的断点处的指令并没有执行,你得在恢复所有环境准备返回时,
自己去模拟断点处的指令执行,然后修改返回地址,指向断点的下一条指令处,最后再iretd。所以,选择硬件执行断点时,
最后不要选择像push,pop,jmp,je这样难以模拟的指令。这个问题也困扰了我好几天。

okey,这个方法有点淫荡,至少不用改别人的代码段就可以在你想停下的地方接管控制,也不用调用什么API就可以实现。
检测起来呢,有点麻烦,但不是很难,至少不怕别人hook什么SetContextThread了。

类别:windows内核探索 | | 添加到搜藏 | 分享到i贴吧 | 浏览() | 评论 (4)
 
最近读者:
 
网友评论:
1
2009-08-04 17:27 | 回复
沙发~
 
2
2009-08-05 14:42 | 回复
呃 能对付NP?
 
3
2009-08-14 18:20 | 回复
很是淫荡
 
5
2009-09-20 20:39 | 回复
淫乱是很淫乱 ,但怎么对付 反调试 检 测 硬件断点?
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2010 Baidu