查看文章
 
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贴吧|浏览(1620)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu