检测和恢复SSDT HOOK,INLINE SSDT HOOK
1、简单说下什么是SSDT
SSDT就是一张存于系统内核中的一张表。这个表的作用就是指向一些函数的地址。比如我们调用OPENPROCESS,最终会调用SSDT表中的122号服务。哈~~。
2、SSDT HOOK
现在杀软,NP,安全软件都在争SSDT这个表,这个表已快用烂了。郁闷呀,偶的电脑呀。启动后就给瑞星HOOK了。
所谓SSDT HOOK就是将SSDT表中相应服务号的函数地址改为自己的函数,在自己的函数中进行相应处理后,回调原函数。这样说不知大家可否明白?
3、INLINE SSDT HOOK
当SSDT成为菜B才挂的HOOK后,就又出现了INLINE SSDT HOOK了。
所谓INLINE就是直接修改相应功能服务号函数代码流程,一般是在前5字节处修改,改为JMP XXXXXX,XXXXX为你自己的函数地址,进 程相应处理后,把前5字节运行后,再JMP到原函数第6字节开始执行,OK了。哈哈~~。不过现在大家都在用INLINE,所以有些软件为不冲突,进行检 测,如果有人先INLINE了,那他就从第6字节开始HOOK。哈哈,道理一样的。
4、恢复SSDT
这个容易些。
1)从内核文件NTXXXX.EXE中获取相应真实的SSDT表,不过这个表的内容要经过处理才是真实有效的。
2)通过驱动得到内核SSDT位置,对刚才获取的SSDT表进行+-运算后就是正确的了。
3)进行比较,不对则HOOK了。
4)恢复的话就是将正确值写到内核SSDT表中。用驱动吧。
5、恢复INLINE SSDT
1)如何得到正确的功能函数代码呢。我在网上找了半天没有发现有用的。呵呵,高手都是一句代过。偶菜呀。自己想办法吧。
强行加载刚才提到的内核文件。因为加载位置和真正内核是不同的,要进行一下重定位修正,同于重定位有3万多条。这么多
都修正吗?很慢的,所以我的方法是对我要读取的代码进行修正下就OK了。快多了。
2)那取多少字节进行比较呢,我取16字节,360的MJ说的,哈哈~~。为什么呢。因为现在两次HOOK的很正常了。一个JMP就是5字节,2个就是10字节 了。所以16字节比较吧。
3)上述都是RING3下实现的,驱动中代码越少越好呀,因为偶菜,代码多保不准系统瘫了。
4)通过驱动读取内核中相应函数代码前16字节,与刚得到的正确的比较。不一样就是HOOK了。
5)恢复的话就是将正确的写到内核中去,当然用驱动了。
结束,哈~~。菜了这么多话,只是按我的理解说的,且这些偶都用代码实现了。这里记录下顺便科普下。哈!!
具体后HOOK到哪了,当然是看JMP到哪了,枚举出系统加载模块,和相应模块加载地址比较就知道了。哈~~
高手看了的话,请指正其中错误。偶菜呀。现在SSDT及INLINE SSDT HOOK都用烂了,偶才懂得了。不是我不明白,这世界变化快呀
原文作者:梦飞鸟 http://blog.zjol.com.cn/