病毒原理与防范-PE+文件型病毒讲述.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
病毒原理与防范-PE文件型病毒讲述

* 第*页 00 08 0f * 第*页 引入表IMAGE_IMPORT_DESCRIPTOR 结构数组,有多少DLL就有多少该结构 00 08 0F * 第*页 引出节 PE : EXE,DLL… 当Windows启动运行一个EXE之前,需要将该EXE需要使用的DLL都装入内存。 引出节是DLL向PE提供的导出函数信息的列表,通常这些信息包含了导出的函数名和函数的地址。 EXE文件的格式 * 第*页 * 第*页 AddressOfFunctions指向一个数组,数组的每个成员指向一个API函数的地址。既然如此,我们要获得一个API函数的地址,就必须找到该API函数在这个数组中的具体位置,也就是一个索引号。 AddressOfNames?和AddressOfNameOrdinals指向两个数组,一个是函数名字数组,一个是函数名字所对应的索引号的数组。这两个数组是一一对应的,也就是说,如果第一个数组中的第m项是我们查找的函数的名字,那么第二个数组中的第m项就是该函数的索引号。这样,我们通过在第一个数组中查找我们需要查找函数的函数名,如果查到,便记住该项在该数组中的位置,然后再到第二个数组中相同的位置就可以取出该函数在函数地址数组中的索引号。 通过函数名称查找函数地址 定位到PE文件头。 从PE文件头中的可选文件头中取出数据目录表的第一个数据目录,得到导出表的地址。 从导出表的NumberOfNames字段得到以命名函数的总数,并以这个数字做微循环的次数来构造一个循环。 从AddressOfNames字段指向的函数名称地址表的第一项开始,在循环中将每一项定义的函数名与要查找的函数名比较,如果没有任何一个函数名符合,说明文件中没有指定名称的函数。 如果某一项定义的函数名与要查找的函数名符合,那么记住这个函数名在字符串地址表中的索引值(如x),然后在AddressOfNameOrdinals指向的数组中以同样的索引值x去找数组项中的值,假如该值为y。 以y值作为索引值,在AddressOfFunctions字段指向的函数入口地址表中获取的RVA就是函数的入口地址,当函数被装入内存后,这个RVA值加上模块实际装入的基址(ImageBase),就得到了函数真正的入口地址。 从Kernel32.dll的导出表中获取某个API函数的地址 exportD=hKernel32.OptionalHeader.DataDirectory.VirtualAddress + hKernel32; int i,iA; for (i=0;iexportD.NumberOfNames;i++) { p=hKernel32+exportD.AddressOfNames[i]; If (!strcmp(p,name)) break; } WORD *pw = (WORD*)(hKernel32 + exportD.AddressOfNamesOrdinals); iA = pw[i]; DWORD *pA = (DWORD*)(hKernel32 + exportD.AddressOfFunctions); DWORD address = pA[iA]; * 第*页 搜索目标文件 PE病毒通常以PE文件格式的文件(如EXE、SCR、DLL等)作为感染目标。 在对目标进行搜索时一般采用两个关键的API函数: FindFirstFile FindNextFile 其一般搜索“*.exe”、“*.scr”等文件进行感染。 在算法上可以采用递归或者非递归算法对所有盘符进行搜索。 文件感染 一个被病毒感染的HOST程序通常首先执行病毒代码,然后执行HOST程序的正常代码。这既保证病毒首先获得控制权,同时也不影响HOST程序的正常执行。 另外也可能在HOST程序执行的过程中调用病毒代码,例如病毒的EPO技术中就采用这种方式。 * 第*页 病毒对PE文件的修改方式 添加节 扩展节 插入节 * 第*页 4.2 添加节方式修改PE 在文件的最后建立一个新节,在节表结构的后面建立一个节表,用以表述该节。入口地址修改为病毒所在节 * 第*页 增加新一节步骤 先把病毒代码追加到文件尾部。 在节表中增加一个section?header各项数据填写正确(VirtualSize,VirtualAddress,PointerToRawData…..)。 在FILEHEADER中修改节表项数目: +1。 重新计算SizeofHeaders,并替换原值。 重新计算SizeofImage,并替换原值。 * 第*页 记录未感染时的AOEP(入口地址),因为在病毒代码结束时要让宿主程序正常执行。所以要先记录AOEP,在病毒程序结束后JMP跳到宿主程序的AOEP。 修改Optiona

文档评论(0)

整理王 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档