检测和恢复SSDT HOOK,INLINE SSDT HOOK

来源:互联网 发布:php socket编程 编辑:程序博客网 时间:2024/05/16 10:14

检测和恢复SSDT HOOK,INLINE SSDT HOOK

2008-09-25 来源:梦飞鸟( 投递新闻稿件 )
<script type="text/javascript">&lt;!--google_ad_client = "pub-3730291377033254";google_ad_slot = "7307761760";google_ad_width = 336;google_ad_height = 280;//--&gt;</script><script style="display: none;" src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

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/

原创粉丝点击