- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
对Win32病毒分析与处理
对Win32病毒分析与处理
摘 要: 本文对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函数地址。
解决了以上问题之后,我们就知道如何从引出表结构查找
您可能关注的文档
最近下载
- 《汽车理论》课件.pptx VIP
- 设计进度计划及质量保证措施.docx VIP
- 成为自己的勇气:认知自我的情绪心理学.pptx VIP
- 2025年中考数学 (山西卷)真题详细解读及评析.docx
- 新起点、新扩建—新一轮高速公路改扩建的思考与展望NewBeginning.PDF VIP
- GB50235-2010 工业金属管道工程施工规范.pdf VIP
- T_CAOE T_CAOE72—2023(海滩养护拦沙堤设计技术导则).pdf VIP
- 《体重管理指导原则(2024年版)》解读PPT课件.pptx VIP
- 纤维支气管镜的清洗3、消毒与维护程序.ppt VIP
- T∕CAOE 21.2-2020 海岸带生态减灾修复技术导则 第2部分:红树林.docx VIP
文档评论(0)