IceSword似乎被研究的差不多了

来源:互联网 发布:html5自助建站系统源码 编辑:程序博客网 时间:2024/03/28 19:54
驱动开发网上悬赏破解IceSword,重赏之下必有勇夫啊。

    http://bbs.zndev.com/read.php?tid=97320

    http://bbs.zndev.com/read.php?tid=98377

    最让我“吃惊”的是IS列举进程的办法竟然是通过PspCidTable,晕啊。我记得很久以前我写knlps0.4的时候,就在幻影论坛提到过这个办法。这个办法被公开就完全失效了,所以我没有用它来实现knlps0.5。我本以为,IS应该是利用了某些无法被轻易修改的系统数据结构来列举进程。线程调度链表算一种,但IS不是用它。我能想到的就只有在非分页内存里搜索EPROCESS了。其它各种各样的“表”都可以很容易的涂改掉,只要知道是哪张“表”。虽然非分页内存也可以看作一张“表”,但改起来比较麻烦。

    关于IS的反调试,知道谜底了自然觉得没什么大不了的。不过我是个完全不会猜谜的人,所以没猜到也不觉得可惜。既然pjf是挑战赛的裁判,估计IS2.0会有不小的改进吧。希望将来谜底公开的时候,不会让我“不觉得可惜”,呵呵。

    wuyanfeng对IS驱动的分析,没说是什么版本。所以我下载了一个1.12en版,看看有啥变化。反WinDbg调试有点不一样了,以前(1.06)是只在启动的时候判断一次KdDebuggerEnabled,如果非零就调用KdDisableDebugger,现在是不断地检查它。我把KdDisableDebugger入口改成了ret指令,结果调试器不会被断开了,但CPU占用100%。一计不成又生一计,我在KdDebuggerEnabled上设内存读断点,想等IS读的时候,给IS打个“补丁”。结果在调试状态下,总是系统的KeUpdateSystemTime和KdPollBreakIn例程在读取,IS完全没有机会动。两个系统例程读取KdDebuggerEnabled的值后,紧接着是jz和jnz指令,哈,分别改成jnz和jz,再把KdDebuggerEnabled改成0,搞定!建议pjf用关闭调试端口的办法反WinDbg。靠判断KdDebuggerEnabled实在太容易pass了。

    涂改了PspCidTable,发现还是可以隐藏进程,失望ing