贴子已被锁定
早期,流氓软件在没有被正式定性为恶意程序时,流氓软件使用的技术比较简单,往往是修改主页,使用户只要一登陆浏览器,就自动跳转到流氓软件提供的广告网址,或者安装到系统中后,私下收集用户的信息发送出去。而后来,随着利益的驱动和流氓软件正式作为恶意程序被反病毒厂商绞杀,流氓软件采用的技术也越来越先进,如今已经形成了与杀毒软件对抗的态势,魔道之争真正进入白热化。 了解了它们使用的技术,会对它们有一个更加清晰的认识,以下便是流氓软件使用的经典技术。
秘密潜入-流氓软件的隐藏技术
隐藏是流氓软件的天性,也是病毒的一个特征,任何流氓软件都希望在用户的电脑中隐藏起来不被发现,由于隐藏的目的,衍生出隐藏的技术。
首先是隐藏窗口。我们知道,在Windows操作系统下,所有的程序执行时都是以窗口的形式出现的,每个窗口都有不同的属性,流氓软件的目的就是不想为人所知,因此它们在运行的过程会将自己的程序窗口的属性设为“不可见”,这样用户就看不到程序的窗口了。
但是,我们知道,每个程序运行时虽然用户看到的是窗口,但是对于系统来说,其实是执行了一个进程,对于稍微专业的用户来说,虽然窗口不能看见,但是程序产生的进程却是很容易通过系统的任务管理器看到,从而使流氓软件暴露。因此便出现了隐藏进程技术。
隐藏进程其实是调用了微软的一个未公开函数,将流氓软件本身注册为服务,这样系统的任务管理器就无法显示这类程序的进程了,从而达到了隐藏自己的目的。
对于一些细心的用户来说,电脑出现了新的文件会引起他们的怀疑,因此流氓软件作者又采用了隐藏文件技术。它们在安装时会将自身拷贝到系统目录,然后将文件的属性设置为隐藏,这样,用户如果采用的是默认系统设置,则就无法看到他们。
但是,这些都是初级的隐藏技术,对电脑熟悉的用户,只要利用系统提供的工具就可以找到这些流氓软件的蛛丝马迹,或者安装一个防火墙软件,只要有程序访问网络,立刻就会报警,从而能够暴露流氓软件的行踪。
我中有你-流氓软件的线程插入技术
为了更好地隐藏自己,流氓软件开始大量采用线程插入技术。
上面讲到,一个程序进入系统中,会首先产生文件,该文件运行时,会产生窗口,在内存中产生进程。进程说白了就是一个被激活了的程序文件。而进程又会产生许多线程。
线程是Windows系统为程序提供的并行处理机制,它允许一个程序在同一时间建立不同的线程,完成不同的操作。另外,由于Windows操作系统为了提高软件的复用性,减少重复开发的开销,采用了动态链接库机制,即将一些公用的程序放在DLL文件中,程序不用包括这些代码,只要在运行时对这些DLL文件直接进行调用就可以完成各种功能,因此每一个可执行程序除了自身的程序体外,还包括许多外部的模块。如果我们用一些内存查看工具的话,能看到每一个应用程序都包含了大量的DLL动态链接库文件。
而流氓软件正是利用了这一点。他们的可执行程序并不是EXE形式的,而是DLL形式,这类文件一般是存在于系统中,由可执行程序进行调用。
而流氓则是将DLL文件载入内存,然后通过“线程插入”的方式,插入到某个进程的地址空间。一般地,如果流氓软件想控制浏览器,则它们往往会将自己注入到浏览器(explorer.exe)的进程空间,只要浏览器运行,就会自动调用该流氓软件。
由于浏览器程序本身会调用大量的DLL文件,因此即使用户用第三方进程查看工具,也分辨不清哪个DLL是流氓软件。面且,采用线程注入技术的流氓软件由于已经并入了正常程序的内存空间,即使是防火墙程序也不会拦截,从而可以在用户电脑自由出入。
销声匿迹-流氓软件的RootKit技术
线程插入对于普通用户来说,或者对于用户的手工清除来说,是很难处理的, 但是这些招数对于杀毒软件来说,是非常简单的,为了能够躲避杀毒软件的追杀,流氓软件的研制者又引入了RootKit技术。
本来RootKit是LINUX的概念,指能够以透明的方式隐藏于系统,并获得LINUX系统最高权限的一组程序集。而后来被病毒制作者借鉴,病毒的RootKit技术指的是那些能够绕过操作系统的API调用,直接利用更底层的调用,然后接管系统的高级API调用,当有程序试图查找它们时,便返回假信息,从而得以隐藏自己的技术。由于目前的杀毒软件都是直接调用系统API来进行病毒扫描的,因此采用这种技术的病毒,都能够轻松躲避杀毒软件的追杀,因为如此,所以目前的流氓软件开始越来越多地采用这种方式来保护自己。