论文部分内容阅读
摘 要: 本文对Win32病毒的原理、传播途径、危害与症状进行了分析,并提出了查杀Win32病毒的几种方法。
关键词: Win32病毒 病毒原理 反病毒技术
1.前言
从1987年美国F.Cohe提出计算机病毒的概念到现在,计算机病毒的研究已经形成一门属于计算机领域中新兴的学科,即计算机病毒学。计算机病毒学是一门专门研究计算机病毒的产生、活动机制、传染机制,以及计算机病毒免疫和防治的科学。研究计算机病毒学的目的,在于研究如何防止和抑制计算机病毒,计算机病毒学作为一门新兴的学科,它是计算机程序设计技术发展与计算机技术发展极不平衡及当今操作系统开放性与折中性和倾斜性的产物。
正当计算机以日新月异的速度迅猛发展、广泛地深入到社会生活的各个方面的时候,以计算机为核心的信息产业成为一个国家现代化水平的一个标志。在这种情况下,计算机病毒的出现和广泛传播正成为各国政府关注的一个问题。本文以Win32病毒为例,对其病毒原理和反病毒技术进行分析。
2.Win32病毒的原理
2.1病毒的重定位
病毒不可避免要用到变量(常量),当病毒感染HOST程序后,由于其依附到HOST程序中的位置各有不同,病毒随着HOST载入内存后,病毒中的各个变量(常量)在内存中的位置自然也会随着发生变化。
call delta;执行后,堆栈顶端为delta在内存中的真正地址。
delta:pop ebp;这条语句将delta在内存中的真正地址存放在ebp寄存器中。
……
lea eax,[ebp (offset var1-offset delta)];这时eax中存放着var1在内存中的真实地址。
当pop语句执行完之后,ebp中放的是什么值呢?很明显是病毒程序中标号delta处在内存中的真正地址。如果病毒程序中有一个变量var1,那么该变量实际在内存中的地址应该是ebp (offset var1-offset delta),即参考量delta在内存中的地址 其它变量与参考量之间的距离=其它变量在内存中的真正地址。有时候我们也采用(ebp-offset delta) offset var1的形式进行变量var1的重定位。当然还有其它重定位的方法,但是它们的原理基本上都是一样的。
2.2获取API函数地址
2.2.1为什么要获取API函数地址
Win32 PE病毒和普通Win32 PE程序一样需要调用函数,但是普通的Win32 PE程序里面有一个引入函数表,该函数表对应了代码段中所用到的API函数在动态连接库中的真实地址。这样,调用API函数时就可以通过该引入函数表找到相应API函数的真正执行地址。
Win32 PE病毒只有一个代码段,并不存在引入函数段。既然如此,病毒就无法像普通PE程序那样直接调用相关API函数,而应该先找出这些API函数在相应动态链接库中的地址。
2.2.2如何获取API函数地址
如何获取API函数地址一直是病毒技术的一个非常重要的话题。要获得API函数地址,我们首先需要获得Kernel32的基地址。
下面介绍几种获得Kernel32基地址的方法:
2.2.2.1利用程序的返回地址,在其附近搜索Kernel32模块基地址。
我们知道,当系统打开一个可执行文件的时候,它会调用Kernel32.dll中的CreateProcess函数;CreateProcess函数在完成装载应用程序后,会先将一个返回地址压入到堆栈顶端,然后转向执行刚才装载的应用程序。当该应用程序结束后,会将堆栈顶端数据弹出放到IP中,继续执行。刚才堆栈顶端保存的数据是什么呢?仔细想想,我们不难明白,这个数据其实就是在Kernal32.dll中的返回地址。其实这个过程跟同我们的应用程序用call指令调用子程序类似。
2.2.2.2对相應操作系统分别给出固定的Kernel32模块的基地址。
对于不同的Windows操作系统来说,Kernel32模块的地址是固定的,甚至一些API函数的大概位置都是固定的。譬如,Windows 98为BFF70000,Windows 2000为77E80000,Windows XP为77E60000。
在得到了Kernel32的模块地址以后,我们就可以在该模块中搜索我们所需要的API地址。对于给定的API,搜索其地址可以直接通过Kernel32.dll的引出表信息搜索,同样我们也可以先搜索出GetProcAddress和LoadLibrary两个API函数的地址,然后利用这两个API函数得到我们所需要的API函数地址。
解决了以上问题之后,我们就知道如何从引出表结构查找我们需要函数的地址了。那我们怎样获取引出表结构的地址呢?很简单,PE文件头中的可选文件头中有一个数据目录表,该目录表的第一个数据目录中就放导出表结构的地址。
3.Win32病毒的传播途径
Win32病毒感染Windows系统下的EXE文件,当一个染毒的EXE文件被执行,病毒驻留内存,当其它程序被访问时对它们进行感染。
Win32病毒一般通过以下途径传播:
3.1U盘/移动硬盘/数码存储卡传播。
3.2各种木马下载器之间相互传播。
3.3通过恶意网站下载。
3.4通过感染文件传播。
3.5通过内网ARP攻击传播。
4.Win32病毒的危害与症状
系统只要运行这个被感染的文件,首先执行的就是病毒的引导代码,病毒会申请足够的内存空间,再将自己的所有数据从该文件中复制到独立的空间中去,然后创建进程,运行自己。成功之后,系统再跳转回被感染程序原先的入口,执行原程序。由于现在计算机的速度很快,因此多数情况下用户感觉不到病毒的这一附加的过程。
在杀毒过程中,我们一旦漏掉了一个被感染的文件,下次一运行这个文件,又会重新激活病毒。如果Win32病毒感染的对象是Windows自己的文件,而且一旦机器启动,这个程序就会运行的话,并受到Windows文件保护机制的保护,那么杀毒软件将很难恢复这个文件,也就一直无法杀掉病毒。更为严重的是,被感染者甚至可能是杀毒软件本身,那就更无法清除病毒了。
5.Win32病毒处理
杀毒的确要借助杀毒软件,但杀毒也要讲技巧。
5.1未被激活的非系统文件内的病毒
杀这种病毒很简单,只需要在一般的Windows环境下杀就行了。一般都能将其歼灭。
5.2已经被激活或发作的非系统文件内的病毒
如果在一般Windows环境下杀毒,效果可能会大打折扣。虽然现在的反病毒软件都能查杀内存病毒,但是此技术毕竟还未成熟,不一定能歼灭病毒。因此,杀此类病毒应在Windows安全模式下进行。在Windows安全模式下,这些病毒都不会在启动时被激活。因此,我们就能放心地杀毒了。
5.3系统文件内病毒
这类病毒比较难缠,所以在操作前请先备份。杀此类病毒一定要在干净的DOS环境下进行。有时候还要反复查杀才能彻底清除。
5.4网络病毒(特别是通过局域网传播的病毒)
此类病毒必须在断网的情况下才能清除,而且清除后很容易重新被感染。要根除此类病毒必需靠网络管理员的努力。
5.5感染杀毒厂家有提供专用杀毒工具的病毒
杀灭此类病毒好办,只需下载免费的专用杀毒工具就行了。专用杀毒工具杀毒精确性相对较高,因此推荐在条件许可的情况下使用专用杀毒工具。
6.结语
计算机病毒表现出的众多新特征和发展趋势表明,目前我国计算机网络安全形势仍然十分严峻,反病毒业者面临的挑战十分艰巨,需要不断地研发推出更加先进的计算机反病毒技术,才能应对和超越计算机病毒的发展,为电脑和网络用户提供切实的安全保障。电脑用户更应当增强安全意识,多学习和了解基本的计算机和网络安全防范知识和技术,做到不登陆和点击不明网站和链接,每日升级杀毒软件病毒库和修复操作系统漏洞,尽量使用最新版本的应用软件等安全防范。
参考文献:
[1][美]Stanley B著.Lippman,Josée LaJoie,Barbara E.Moo,李师贤译.C Primer中文版(第4版)[M].人民邮电出版社,2006.3.
[2][美]Mark Allen Weiss.数据结构与算法分析——C语言描述[M].机械工业出版社,2004.1.
[3]丁秀峰.间谍软件之危害及其防范对策[J].期刊大众科技,2005.7.
[4]杨珂,房鼎益,陈晓江.间谍软件和反间谍软件的分析与研究[J].微电子学与计算机,2006.8.
[5][美]Jeffrey Richter,Christophe Nasarre.Windows核心编程(第5版)[M].清华大学出版社,2008.9.
[6]张银奎.软件调试[M].电子工业出版社,2008.6.
[7][美]Mark E著.Russinovich,David A.Solomon,潘爱民译.深入解析Windows操作系统(第4版)[M].电子工业出版社,2007.4.
关键词: Win32病毒 病毒原理 反病毒技术
1.前言
从1987年美国F.Cohe提出计算机病毒的概念到现在,计算机病毒的研究已经形成一门属于计算机领域中新兴的学科,即计算机病毒学。计算机病毒学是一门专门研究计算机病毒的产生、活动机制、传染机制,以及计算机病毒免疫和防治的科学。研究计算机病毒学的目的,在于研究如何防止和抑制计算机病毒,计算机病毒学作为一门新兴的学科,它是计算机程序设计技术发展与计算机技术发展极不平衡及当今操作系统开放性与折中性和倾斜性的产物。
正当计算机以日新月异的速度迅猛发展、广泛地深入到社会生活的各个方面的时候,以计算机为核心的信息产业成为一个国家现代化水平的一个标志。在这种情况下,计算机病毒的出现和广泛传播正成为各国政府关注的一个问题。本文以Win32病毒为例,对其病毒原理和反病毒技术进行分析。
2.Win32病毒的原理
2.1病毒的重定位
病毒不可避免要用到变量(常量),当病毒感染HOST程序后,由于其依附到HOST程序中的位置各有不同,病毒随着HOST载入内存后,病毒中的各个变量(常量)在内存中的位置自然也会随着发生变化。
call delta;执行后,堆栈顶端为delta在内存中的真正地址。
delta:pop ebp;这条语句将delta在内存中的真正地址存放在ebp寄存器中。
……
lea eax,[ebp (offset var1-offset delta)];这时eax中存放着var1在内存中的真实地址。
当pop语句执行完之后,ebp中放的是什么值呢?很明显是病毒程序中标号delta处在内存中的真正地址。如果病毒程序中有一个变量var1,那么该变量实际在内存中的地址应该是ebp (offset var1-offset delta),即参考量delta在内存中的地址 其它变量与参考量之间的距离=其它变量在内存中的真正地址。有时候我们也采用(ebp-offset delta) offset var1的形式进行变量var1的重定位。当然还有其它重定位的方法,但是它们的原理基本上都是一样的。
2.2获取API函数地址
2.2.1为什么要获取API函数地址
Win32 PE病毒和普通Win32 PE程序一样需要调用函数,但是普通的Win32 PE程序里面有一个引入函数表,该函数表对应了代码段中所用到的API函数在动态连接库中的真实地址。这样,调用API函数时就可以通过该引入函数表找到相应API函数的真正执行地址。
Win32 PE病毒只有一个代码段,并不存在引入函数段。既然如此,病毒就无法像普通PE程序那样直接调用相关API函数,而应该先找出这些API函数在相应动态链接库中的地址。
2.2.2如何获取API函数地址
如何获取API函数地址一直是病毒技术的一个非常重要的话题。要获得API函数地址,我们首先需要获得Kernel32的基地址。
下面介绍几种获得Kernel32基地址的方法:
2.2.2.1利用程序的返回地址,在其附近搜索Kernel32模块基地址。
我们知道,当系统打开一个可执行文件的时候,它会调用Kernel32.dll中的CreateProcess函数;CreateProcess函数在完成装载应用程序后,会先将一个返回地址压入到堆栈顶端,然后转向执行刚才装载的应用程序。当该应用程序结束后,会将堆栈顶端数据弹出放到IP中,继续执行。刚才堆栈顶端保存的数据是什么呢?仔细想想,我们不难明白,这个数据其实就是在Kernal32.dll中的返回地址。其实这个过程跟同我们的应用程序用call指令调用子程序类似。
2.2.2.2对相應操作系统分别给出固定的Kernel32模块的基地址。
对于不同的Windows操作系统来说,Kernel32模块的地址是固定的,甚至一些API函数的大概位置都是固定的。譬如,Windows 98为BFF70000,Windows 2000为77E80000,Windows XP为77E60000。
在得到了Kernel32的模块地址以后,我们就可以在该模块中搜索我们所需要的API地址。对于给定的API,搜索其地址可以直接通过Kernel32.dll的引出表信息搜索,同样我们也可以先搜索出GetProcAddress和LoadLibrary两个API函数的地址,然后利用这两个API函数得到我们所需要的API函数地址。
解决了以上问题之后,我们就知道如何从引出表结构查找我们需要函数的地址了。那我们怎样获取引出表结构的地址呢?很简单,PE文件头中的可选文件头中有一个数据目录表,该目录表的第一个数据目录中就放导出表结构的地址。
3.Win32病毒的传播途径
Win32病毒感染Windows系统下的EXE文件,当一个染毒的EXE文件被执行,病毒驻留内存,当其它程序被访问时对它们进行感染。
Win32病毒一般通过以下途径传播:
3.1U盘/移动硬盘/数码存储卡传播。
3.2各种木马下载器之间相互传播。
3.3通过恶意网站下载。
3.4通过感染文件传播。
3.5通过内网ARP攻击传播。
4.Win32病毒的危害与症状
系统只要运行这个被感染的文件,首先执行的就是病毒的引导代码,病毒会申请足够的内存空间,再将自己的所有数据从该文件中复制到独立的空间中去,然后创建进程,运行自己。成功之后,系统再跳转回被感染程序原先的入口,执行原程序。由于现在计算机的速度很快,因此多数情况下用户感觉不到病毒的这一附加的过程。
在杀毒过程中,我们一旦漏掉了一个被感染的文件,下次一运行这个文件,又会重新激活病毒。如果Win32病毒感染的对象是Windows自己的文件,而且一旦机器启动,这个程序就会运行的话,并受到Windows文件保护机制的保护,那么杀毒软件将很难恢复这个文件,也就一直无法杀掉病毒。更为严重的是,被感染者甚至可能是杀毒软件本身,那就更无法清除病毒了。
5.Win32病毒处理
杀毒的确要借助杀毒软件,但杀毒也要讲技巧。
5.1未被激活的非系统文件内的病毒
杀这种病毒很简单,只需要在一般的Windows环境下杀就行了。一般都能将其歼灭。
5.2已经被激活或发作的非系统文件内的病毒
如果在一般Windows环境下杀毒,效果可能会大打折扣。虽然现在的反病毒软件都能查杀内存病毒,但是此技术毕竟还未成熟,不一定能歼灭病毒。因此,杀此类病毒应在Windows安全模式下进行。在Windows安全模式下,这些病毒都不会在启动时被激活。因此,我们就能放心地杀毒了。
5.3系统文件内病毒
这类病毒比较难缠,所以在操作前请先备份。杀此类病毒一定要在干净的DOS环境下进行。有时候还要反复查杀才能彻底清除。
5.4网络病毒(特别是通过局域网传播的病毒)
此类病毒必须在断网的情况下才能清除,而且清除后很容易重新被感染。要根除此类病毒必需靠网络管理员的努力。
5.5感染杀毒厂家有提供专用杀毒工具的病毒
杀灭此类病毒好办,只需下载免费的专用杀毒工具就行了。专用杀毒工具杀毒精确性相对较高,因此推荐在条件许可的情况下使用专用杀毒工具。
6.结语
计算机病毒表现出的众多新特征和发展趋势表明,目前我国计算机网络安全形势仍然十分严峻,反病毒业者面临的挑战十分艰巨,需要不断地研发推出更加先进的计算机反病毒技术,才能应对和超越计算机病毒的发展,为电脑和网络用户提供切实的安全保障。电脑用户更应当增强安全意识,多学习和了解基本的计算机和网络安全防范知识和技术,做到不登陆和点击不明网站和链接,每日升级杀毒软件病毒库和修复操作系统漏洞,尽量使用最新版本的应用软件等安全防范。
参考文献:
[1][美]Stanley B著.Lippman,Josée LaJoie,Barbara E.Moo,李师贤译.C Primer中文版(第4版)[M].人民邮电出版社,2006.3.
[2][美]Mark Allen Weiss.数据结构与算法分析——C语言描述[M].机械工业出版社,2004.1.
[3]丁秀峰.间谍软件之危害及其防范对策[J].期刊大众科技,2005.7.
[4]杨珂,房鼎益,陈晓江.间谍软件和反间谍软件的分析与研究[J].微电子学与计算机,2006.8.
[5][美]Jeffrey Richter,Christophe Nasarre.Windows核心编程(第5版)[M].清华大学出版社,2008.9.
[6]张银奎.软件调试[M].电子工业出版社,2008.6.
[7][美]Mark E著.Russinovich,David A.Solomon,潘爱民译.深入解析Windows操作系统(第4版)[M].电子工业出版社,2007.4.