驱动开发网上悬赏破解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。
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=2997142
来自Neeao's Security Blog的IceSword浼间箮琚爺绌剁殑宸笉澶氫簡的引用:
鏉ヨ嚜锛歔url=http://zzzevazzz.blogchina.com/2997142.html]zzzevazzz鈥榮 blog [/url] 椹卞姩寮?鍙戠綉涓婃偓璧忕牬瑙ceSword锛岄噸璧忎箣涓嬪繀鏈夊媷澶晩銆? http://bbs.zndev.com/read.php?tid=97320 http://bbs.zndev.com/read.php?tid=98377 鏈?璁╂垜鈥滃悆鎯娾?濈殑鏄疘S鍒椾妇杩涚▼鐨勫姙娉曠珶鐒?...
- 评论人:XFreeBOY
2005-09-24 12:21:49
|
||||
对,我就发现有时提升了权限来杀hxdef进程也是杀不掉,但是把它里面的线程一个个结束掉就OK了! |
||||
- 评论人:zzzevazzz
2005-09-23 23:11:19
|
||||
把所有的线程都“终止”--排除出调度链表,不就搞定了吗? |
||||
- 评论人:XFreeBOY
2005-09-23 19:43:04
|
||||
老大可不可以分析下Icesword的结束进程的功能啊?应该也是与众不同吧. |
||||
- 评论人:XFreeBOY
2005-09-23 19:36:23
|
||||
为什么现在才被人分析出来,是大牛们都太懒了吧,呵呵 |
||||