楼主,沙发
银光图片

今天看到论坛中某位网友的《IE被篡改的修复方法》,文章提到通过注册表修改被篡改后的修复方法,从相对根本的原因来解释了IE主页的配置原理。回复也提到了一些安全软件修复IE的方法,就像zgy5729版主说的那样,知其然更要知其所以然,所以今天就谈一下安全软件中修复IE中的一个颇具特色的功能:锁定IE主页。


首先谈一下注册表,注册表在Windows中有时候许多人觉得很神秘,网上不知什么时候流传着一种修改注册表很容易导致系统崩溃的说法,有点夸大其词,导致很多用户对注册表存在一定的畏惧心理。其实注册表并没有那么神秘,它最大的功能就是一个存储着系统及软件配置信息的一个数据库。修改里面的信息可能会影响系统以及一些软件的配置信息工作方式,比如开机启动、各类软件的一些配置、包括今天要说的IE配置比如IE主页信息都是存储在注册表中。而我们通常说的注册表是指Windows中自带的注册表编辑器regedit.exe。其实正如其名一样,这只是一个编辑器,真正的注册表中的信息是存储在系统的二进制文件中的,成为HIVE文件,译为“储巢”。想了解这方面相关信息的可以参考《深入解析Windows操作系统》。


首先要了解的是,在程序开发中,无论是恶意软件还是安全软件在改动IE主页时都是通过修改注册表来达到目的,通常使用RegSetValueAPI实现,API译为应用程序接口,稍微学过的编程的同学将其理解为和函数差不多的东西就行,这样的API的参数通常指定了注册表的主键、子键、修改的项以及值等信息。可以想象,安全软件实现修复IE主页的功能就是通过调用这个API来实现的,病毒亦如此。而安全软件和病毒往往都是相克的,都会采用一些手段来阻止对方的操作,说道这里就不得不提到HOOK这个概念。HOOK是木马、病毒和安全软件都在采用的一种技术,没有哪个安全软件中不在用HOOK,最直接的概念就是主动防御以及HIPS就是采用HOOK实现的。说了这些HOOK是什么呢,HOOK译为钩子,最常见的就是消息钩子,而我们在这里要提的是API HOOK。正常情况下我们调用系统API都是正常的,而在一定情况下我们调用API可能是被HOOK后的。通过HOOK指定的API我们可以拦截指定的操作,比如创建进程、创建文件、读写文件等。API HOOK有多种不同的实现途径,目前大多数安全软件都采用内核中的SSDT HOOK


简单谈谈SSDTSSDTSystemServices Descriptor Table),系统服务描述符表。在应用层的API进入内核后正是根据这个表找到内核中的相应函数,进而实现层层调用。也就是说SSDT记录这应用层API和内核中的函数的对应关系。通过SSDT HOOK我们可以改变这一对应关系,是应用层API进入内核后不再按原来的对应关系调用内核相应的函数,而是转去调用我们自己实现的内核函数。这样我们就达到了截获API的目的,进而可以在我们的函数中对API进行的操作进行判断,最简单的就是我们可以决定是阻止这次调用还是允许这次调用。这就是安全软件中锁定IE主页功能的原理。当然SSDT HOOK需要我们写驱动来完成。说了这么多是不是有点天书的感觉,下面通过一个简单的小实验来体会这个过程。我们以QQ电脑管家为例,以及需要借助一款非常优秀的工具XueTr,可在附件中下载。


首先运行QQ电脑管家,在系统修复中锁定IE主页,比如我的IE主页是Google




然后尝试修改IE主页,比如通过Internet选项或者更直接通过注册表修改。从注册表修改可以看到是修改不成功的。







现在我们运行XueTr(如果提示是否允许加载驱动,点允许,安全软件的底层操作都是借助驱动完成的)。运行后选项卡切换到内核钩子中的SSDT,可以看到列出了很多被HOOK的函数,而且是红色的,不过通过后面的当前函数所在的模块我们可以看到,这些是QQ管家的模块,所以是不具备威胁的。如果有未知的你不熟悉的模块做了HOOK,那么就得小心了,很可能是病毒、木马。



工具罗列出了这么多钩子,那都是什么作用呢。其实看不懂这些函数不要紧,看着名字也能猜出一二,比如有创建文件(CreateFile)、DeleteFile(删除文件)TerminateProcess(结束进程)等等的钩子,而我们要关注的就是改注册表键值的函数的钩子(NtStValueKey)。现在我们右击选中这个钩子,选择恢复。



不是恢复所有!


恢复后再次尝试修改主页,通过internet选项或者注册表,你会发现可以修改成功。但是当你再次打开IE,主页却还是原来的!!这时我们看看刚刚修改过的注册表会发现,的确修改成功了,这是怎么回事呢?没关系,我们关掉QQ管家后再打开IE,看看这次应该显示的是我们修改后的主页吧。


所以说到这里有个问题,为什么运行QQ管家时尽管已经更改了主页,但是还是显示不正确呢;而关掉后却显示正确?这是留给大家的一个问题,虽然咱们并不知道腾讯的具体做法,但是我们通过今天说的可以窥出大概。最后注意我们现在修复了SSDT的部分表,但是只是本次起作用,因为这是内存中的数据,下次重新启动系统安全管家的驱动还会改写SSDT来实现某些功能,在这里这些HOOK是有益的HOOK,请不要进行修复。