病毒原理与防范-PE+文件型病毒_第1页
病毒原理与防范-PE+文件型病毒_第2页
病毒原理与防范-PE+文件型病毒_第3页
病毒原理与防范-PE+文件型病毒_第4页
病毒原理与防范-PE+文件型病毒_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第1页病毒原理与防范病毒原理与防范 PE文件型病毒文件型病毒林春蔷林春蔷计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社病毒如何感染病毒如何感染PE文件?文件?l首先判定文件是否是首先判定文件是否是PE文件文件l接下来,添加节接下来,添加节2022年3月8日第2页计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第3页Q:如何判断一个文件是否为:如何判断一个文件是否为PE文文件?件?l检验文件头部第一个字的值是否等于检验文件

2、头部第一个字的值是否等于MZ,如如果是,则果是,则DOS头有效。头有效。l用用DOS头的字段头的字段e_lfanew来定位来定位PE头。头。l比较比较PE透的第一个双字的值是否等于透的第一个双字的值是否等于45500000H(PE00)。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第4页代码实现代码实现/定义局部变量定义局部变量IMAGE_DOS_HEADER dos_header;IMAGE_NT_HEADER nt_header;CFile fp;计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月

3、8日第5页fp.Read(&dos_header,sizeof(dos_header);If(dos_header.e_magic!=0 x5A4D).fp.Seek(dos_header.e_lfanew,CFile:begin);if(nt_header.Signature!=0 x00004550)计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第6页PE病毒编写的关键技术病毒编写的关键技术l定位定位l获取获取API函数函数l搜索目标文件搜索目标文件l感染感染l破坏破坏计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社

4、清华大学出版社2022年3月8日第7页病毒编写的难点病毒编写的难点l病毒是在宿主的运行环境下运行,所以无病毒是在宿主的运行环境下运行,所以无法像在自己本身的运行环境下一样访问自法像在自己本身的运行环境下一样访问自己的静态(全局)变量的数据和直接调用己的静态(全局)变量的数据和直接调用系统系统API。l通过一些技术可以克服上述的难点,但编通过一些技术可以克服上述的难点,但编写起来会比较繁琐。写起来会比较繁琐。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第8页1 重定位重定位病毒编译后病毒编译后 病毒模块进入宿主体病毒模块进入宿主体病毒在感染前的

5、病毒在感染前的Var2位置位置病毒感染病毒感染HOST后后Var2的位置的位置变量Var2VIRUS00400000004010 xx变量Var2的实际位置HOST变量Var2VIRUS00400000004010 xxmov ax,Var2mov ax,004010 xx计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社问题的产生原因及解决方法?问题的产生原因及解决方法?l为什么程序加载到一个不同的位置之后会出错?为什么程序加载到一个不同的位置之后会出错?l病毒是否能够事先预料到自己的病毒代码将添加到病毒是否能够事先预料到自己的病毒代码将添加到HOST什么位置?加

6、载之后又在什么位置?什么位置?加载之后又在什么位置? 不能不能 怎么办?怎么办? 代码重定位计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第10页病毒模块病毒模块delta:DELTA的偏移量的偏移量病毒代码基地址病毒代码基地址= Delta的地址的地址 - Delta的偏移量的偏移量 病毒模块的基地址病毒模块的基地址计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社CALL语句用法语句用法mov al,?call dpcharmov ax,bxdpchar proc push ax push bx mov bx,0

7、 mov ah,0ehint 10hpop bxpop axretdpchar endp2022年3月8日第11页CALL 指令将返回地址压入堆栈(即指令将返回地址压入堆栈(即CALL的下一条的下一条指令地址压入堆栈)指令地址压入堆栈)计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第12页得到病毒代码基地址得到病毒代码基地址 call deltadelta: pop eax sub eax,offset delta 运行后,运行后,eax中存放的是病毒代码基地址中存放的是病毒代码基地址则则V2的地址的地址 = eax + offset v2计算

8、机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第13页实例:访问变量实例:访问变量 x的数据的数据l.codel call fl : jmp fl x dd 12345678hl : l pop ebxsub ebx, offset Bmov eax, ebx+x计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第14页2 获取获取API函数地址函数地址l为什么要获取为什么要获取API函数地址函数地址 Win32下的系统功能调用一般通过调用动态连接下的系统功能调用一般通过调用动态连接库中的库中的API函

9、数实现。函数实现。 API函数调用的实质是找到函数地址,然后函数调用的实质是找到函数地址,然后call计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第15页调用调用Windows API的方法的方法lMessageBox(0,”123”,0,0);lCall 0 x7c91001c; (WIN XP SP3)地址放在地址放在导入表中导入表中计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第16页引入表引入表l导入表是用来描述可执行文件需要调用的导入表是用来描述可执行文件需要调用的外部函数(外部函数

10、(API)。)。lAPI包含在众多扩展名为包含在众多扩展名为DLL的动态链接库的动态链接库中,当应用程序运行时,通过将函数所在中,当应用程序运行时,通过将函数所在的动态链接库载入到内存后调用的。的动态链接库载入到内存后调用的。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第17页病毒获取病毒获取API函数地址函数地址 病毒和普通程序一样需要调用病毒和普通程序一样需要调用API函数实现某函数实现某些功能,但病毒运行在宿主环境下,在编写上些功能,但病毒运行在宿主环境下,在编写上不能直接写函数名去调用不能直接写函数名去调用API(引入表提供把(引入表

11、提供把函数名转换为函数地址),必须病毒自身去获函数名转换为函数地址),必须病毒自身去获取取API函数地址(动态调用函数地址(动态调用API)。)。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第18页病毒获取病毒获取API函数地址函数地址l静态方式:调用时,根据函数名查引入表,静态方式:调用时,根据函数名查引入表,就可以获取该函数的地址。就可以获取该函数的地址。l动态方式:使用函数动态方式:使用函数LoadLibrary装载需要装载需要调用的函数所在的调用的函数所在的dll文件,获取模块句柄。文件,获取模块句柄。然后调用然后调用GetProcA

12、ddress获取需要调用的获取需要调用的函数地址。这种方式是在需要调用函数时函数地址。这种方式是在需要调用函数时才将函数所在的模块调入到内存中,同时才将函数所在的模块调入到内存中,同时也不需要编译器为函数在引入表中建立相也不需要编译器为函数在引入表中建立相应的项。应的项。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第19页两个有用的两个有用的APILoadLibrary加载一个加载一个DLL,返回,返回DLL地址地址GetProcAddress通过通过DLL地址和地址和API函数名获得函数名获得API函数的地址函数的地址C语言实例:语言实例:

13、DLL地址地址 = LoadLibrary(“DLL名名”);API函数地址函数地址 = GetProcAddress(DLL地址地址,“函数函数名名”);计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社问题问题LoadLibrary , GetProcAddress函数始终在内存函数始终在内存中吗?中吗?2022年3月8日第20页ExitProcessLoadLibraryGetProcAddressKernel32.dll计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第21页硬编码硬编码API地址地址l如何获取

14、如何获取API函数地址函数地址 通过工具查看通过工具查看API函数的地址,然后用硬编码地函数的地址,然后用硬编码地址来调用,比如址来调用,比如WIN 8系统环境下系统环境下API函数函数“LoadLibraryA”的地址是的地址是0 x76C4F864. 可直可直接通过函数地址调用接通过函数地址调用: Call 0 x76C4F864 API函数地址在不同的函数地址在不同的WINDOWS版本下一般会版本下一般会有所不同。所以用硬编码地址来调用有所不同。所以用硬编码地址来调用API只能针只能针对某个版本的系统,兼容性不好。对某个版本的系统,兼容性不好。计算机病毒分析与防治教程计算机病毒分析与防治

15、教程 清华大学出版社清华大学出版社2022年3月8日第22页动态获取动态获取l获得获得LoadLibrary和和GetProcAddress的地址的地址l这两函数是系统模块这两函数是系统模块kernel32.dll提供的,提供的,所以他们必定在所以他们必定在kernel32的引出表中被导的引出表中被导出。出。l只要我们能得到只要我们能得到kernel32的地址,我们就的地址,我们就可以通过搜索可以通过搜索kernel32的引出表,搜索得的引出表,搜索得到它们的地址。到它们的地址。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第23页得到模块得到

16、模块kernel32的地址方法的地址方法1由于程序入口点是被由于程序入口点是被kernel32某个函数调用的,某个函数调用的,所以这个调用函数肯定在所以这个调用函数肯定在kernel32的地址空间的地址空间上。上。那么我们只要取得这个返回地址,就得到了一个那么我们只要取得这个返回地址,就得到了一个kernel32空间中的一个地址。空间中的一个地址。通过这个地址,我们可以从高地址向低地址方向通过这个地址,我们可以从高地址向低地址方向进行搜索,通过进行搜索,通过PE标志的判断,搜索到标志的判断,搜索到kernel32模块的基地址!模块的基地址!计算机病毒分析与防治教程计算机病毒分析与防治教程 清华

17、大学出版社清华大学出版社2022年3月8日第24页l取栈顶值到寄存器取栈顶值到寄存器A(KERNEL32中的一个地址中的一个地址)lA = A 与与 0FFFFF000h(分配粒度是分配粒度是1000h,基,基地址必然在地址必然在xxxx000h处处)l循环:循环:l 如果如果A = IMAGE_DOS_SIGNATURE(判(判断断DOS头标志)头标志)l B = A;B =B+e_lfanew; 指向指向PE标志标志l 如果如果B =IMAGE_NT_SIGNATURE (判断判断“PE00”标志)标志)l 跳出循环;跳出循环;(找到,退出!)(找到,退出!)l A = A - 01000

18、h;l循环结束循环结束 计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第25页汇编算法汇编算法GetKBase:GetKBase: mov edi ,esp ; mov edi ,esp ;取栈顶值,就是取栈顶值,就是KERNEL32KERNEL32中的一个地址中的一个地址 and edi,0FFFFF0000h ;and edi,0FFFFF0000h ;分配粒度是分配粒度是10000h10000h,基地址必然在,基地址必然在xxxx0000hxxxx0000h处处 .while TRUE.while TRUE .if WORD ptr ed

19、i = .if WORD ptr edi = IMAGE_DOS_SIGNATUREIMAGE_DOS_SIGNATURE ; ;判断判断DOSDOS头标志头标志 mov esi,edimov esi,edi add esi,DWORD ptr esi+03Ch ;esi add esi,DWORD ptr esi+03Ch ;esi指向指向PEPE标志标志 .if DWORD ptr esi =.if DWORD ptr esi =IMAGE_NT_SIGNATUREIMAGE_NT_SIGNATURE ; ;判断判断PEPE标志标志 .break.break ; ;若正确,则跳出循环若正确

20、,则跳出循环 .endif.endif .endif.endif sub edi, 010000h sub edi, 010000h .endw.endwmov hKernel32,edimov hKernel32,edi ; ;把找到的把找到的KERNEL32.DLLKERNEL32.DLL的基地址保存起来的基地址保存起来计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第26页得到模块得到模块kernel32的地址方法的地址方法2l通过宿主进程的通过宿主进程的PEB:进程环境块获得:进程环境块获得lFs寄存器寄存器-TEBlTEB + 0 x3

21、0-PEBlPEB + 0 xc-PEB_LDR_DATAlPEB_LDR_DATA+0 x1c处存放了一些处存放了一些DLL的地址,第一个是的地址,第一个是nt.dll地址,第二个就是地址,第二个就是kernel32.dll的地址了。的地址了。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第27页得到模块得到模块kernel32的地址方法的地址方法3lSEH(结构化异常处理结构化异常处理)lSEH链表中最顶层的异常处理函数是链表中最顶层的异常处理函数是Kernel32.dll中的一个函数。中的一个函数。l可以遍历这个链表去搜索这个函数地址,可

22、以遍历这个链表去搜索这个函数地址,通过这个函数地址向低地址方向以通过这个函数地址向低地址方向以64KB为为对齐单位查找对齐单位查找PE文件的文件的DOS头标志头标志”MZ”,从而找到从而找到Kernel32.dll的地址。的地址。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社SEH结构结构2022年3月8日第28页自定义异常处理函数自定义异常处理函数自定义异常处理函数FFFFFHUnhandleExceptionFilterFs:0计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第29页得到模块得到模块kernel

23、32的地址方法的地址方法4l宿主进程中的宿主进程中的TEB:线程环境块,这个块:线程环境块,这个块存放了线程的栈顶地址,这个地址存放了线程的栈顶地址,这个地址+0 x1c肯肯定位于定位于kernel32.dll中(中(NT系统)。系统)。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第30页获取获取API函数地址函数地址 在得到了在得到了Kernel32的模块地址以后,就可以搜的模块地址以后,就可以搜索他的导出表得到索他的导出表得到GetProcAddress和和LoadLibrary两个两个API函数的地址。函数的地址。 对这两个对这两个AP

24、I函数的联合调用就可以得到函数的联合调用就可以得到WIN32 应用层上任何所需要的应用层上任何所需要的API函数地址了。函数地址了。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社MZ文件头:DOS MZ HEADERDOS插桩程序:DOS StubIMAGE_SECTION_HEADERIMAGE_SECTION_HEADERIMAGE_SECTION_HEADERIMAGE_SECTION_HEADER.text.data.edata.reloc.COFF行号COFF符号表Code View调试信息PE文件标志:“PE00”映像文件头:IMAGE_FILE_H

25、EADER可选映像头:IMAGE_OPTIONAL_HEADER32数据目录表:IMAGE_DATA_DIRECTORYDOS头PE文件头节表(Section Table)节(Section)调试信息文件头文件尾计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第32页MZ文件头:DOS MZ HEADERDOS插桩程序:DOS StubIMAGE_SECTION_HEADERIMAGE_SECTION_HEADERIMAGE_SECTION_HEADERIMAGE_SECTION_HEADER.text.data.edata.reloc.COFF

26、行号COFF符号表Code View调试信息PE文件标志:“PE00”映像文件头:IMAGE_FILE_HEADER可选映像头:IMAGE_OPTIONAL_HEADER32数据目录表:IMAGE_DATA_DIRECTORYDOS头PE文件头节表(Section Table)节(Section)调试信息文件头文件尾00080f计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第33页引入表引入表IMAGE_IMPORT_DESCRIPTOR 结构数组,结构数组,有多少有多少DLL就有多少就有多少该结构该结构00080F计算机病毒分析与防治教程计算

27、机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第34页引出节引出节 PE : EXE,DLL 当当Windows启动运行一个启动运行一个EXE之前,需要将该之前,需要将该EXE需要使用的需要使用的DLL都装入内存。都装入内存。 引出节是引出节是DLL向向PE提供的导出函数信息的列表,提供的导出函数信息的列表,通常这些信息包含了导出的通常这些信息包含了导出的函数名和函数的地址。函数名和函数的地址。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第35页计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版

28、社2022年3月8日第36页lAddressOfFunctions指向一个数组,数组的每个成指向一个数组,数组的每个成员指向一个员指向一个API函数的地址。既然如此,我们要获函数的地址。既然如此,我们要获得一个得一个API函数的地址,就必须找到该函数的地址,就必须找到该API函数在函数在这个数组中的具体位置,也就是一个索引号。这个数组中的具体位置,也就是一个索引号。lAddressOfNames 和和AddressOfNameOrdinals指向指向两个数组,一个是函数名字数组,一个是函数名字两个数组,一个是函数名字数组,一个是函数名字所对应的索引号的数组。这两个数组是一一对应的,所对应的索引

29、号的数组。这两个数组是一一对应的,也就是说,如果第一个数组中的第也就是说,如果第一个数组中的第m项是我们查找项是我们查找的函数的名字,那么第二个数组中的第的函数的名字,那么第二个数组中的第m项就是该项就是该函数的索引号。这样,我们通过在第一个数组中查函数的索引号。这样,我们通过在第一个数组中查找我们需要查找函数的函数名,如果查到,便记住找我们需要查找函数的函数名,如果查到,便记住该项在该数组中的位置,然后再到第二个数组中相该项在该数组中的位置,然后再到第二个数组中相同的位置就可以取出该函数在函数地址数组中的索同的位置就可以取出该函数在函数地址数组中的索引号。引号。 计算机病毒分析与防治教程计算

30、机病毒分析与防治教程 清华大学出版社清华大学出版社通过函数名称查找函数地址通过函数名称查找函数地址l定位到定位到PE文件头。文件头。l从从PE文件头中的可选文件头中取出数据目录表的第一个数据目录,得到导出文件头中的可选文件头中取出数据目录表的第一个数据目录,得到导出表的地址。表的地址。l从导出表的从导出表的NumberOfNames字段得到以命名函数的总数,并以这个数字做字段得到以命名函数的总数,并以这个数字做微循环的次数来构造一个循环。微循环的次数来构造一个循环。l从从AddressOfNames字段指向的函数名称地址表的第一项开始,在循环中将字段指向的函数名称地址表的第一项开始,在循环中将

31、每一项定义的函数名与要查找的函数名比较,如果没有任何一个函数名符合每一项定义的函数名与要查找的函数名比较,如果没有任何一个函数名符合,说明文件中没有指定名称的函数。,说明文件中没有指定名称的函数。l如果某一项定义的函数名与要查找的函数名符合,那么记住这个函数名在字如果某一项定义的函数名与要查找的函数名符合,那么记住这个函数名在字符串地址表中的索引值(如符串地址表中的索引值(如x),然后在),然后在AddressOfNameOrdinals指向的数指向的数组中以同样的索引值组中以同样的索引值x去找数组项中的值,假如该值为去找数组项中的值,假如该值为y。l以以y值作为索引值,在值作为索引值,在Ad

32、dressOfFunctions字段指向的函数入口地址表中获字段指向的函数入口地址表中获取的取的RVA就是函数的入口地址,当函数被装入内存后,这个就是函数的入口地址,当函数被装入内存后,这个RVA值加上模块值加上模块实际装入的基址实际装入的基址(ImageBase),就得到了函数真正的入口地址。,就得到了函数真正的入口地址。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社从从Kernel32.dll的导出表中获取某个的导出表中获取某个API函数函数的地址的地址exportD=hKernel32.OptionalHeader.DataDirectory.Virtua

33、lAddress + hKernel32;int i,iA;for (i=0;iexportD.NumberOfNames;i+)p=hKernel32+exportD.AddressOfNamesi; If (!strcmp(p,name) break;WORD *pw = (WORD*)(hKernel32 + exportD.AddressOfNamesOrdinals);iA = pwi;DWORD *pA = (DWORD*)(hKernel32 + exportD.AddressOfFunctions);DWORD address = pAiA;2022年3月8日第38页计算机病毒

34、分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社搜索目标文件搜索目标文件lPE病毒通常以病毒通常以PE文件格式的文件(如文件格式的文件(如EXE、SCR、DLL等)作为感染目标。等)作为感染目标。l在对目标进行搜索时一般采用两个关键的在对目标进行搜索时一般采用两个关键的API函数:函数: FindFirstFile FindNextFilel其一般搜索其一般搜索“*.exe”、“*.scr”等文件进行感染。等文件进行感染。l在算法上可以采用递归或者非递归算法对所有盘符进在算法上可以采用递归或者非递归算法对所有盘符进行搜索。行搜索。计算机病毒分析与防治教程计算机病毒分析与防治

35、教程 清华大学出版社清华大学出版社文件感染文件感染l一个被病毒感染的一个被病毒感染的HOST程序通常首先执行程序通常首先执行病毒代码,然后执行病毒代码,然后执行HOST程序的正常代码程序的正常代码。这既保证病毒首先获得控制权,同时也。这既保证病毒首先获得控制权,同时也不影响不影响HOST程序的正常执行。程序的正常执行。l另外也可能在另外也可能在HOST程序执行的过程中调用程序执行的过程中调用病毒代码,例如病毒的病毒代码,例如病毒的EPO技术中就采用技术中就采用这种方式。这种方式。 计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第41页病毒对病毒

36、对PE文件的修改方式文件的修改方式l添加节添加节l扩展节扩展节l插入节插入节计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第42页4.2 添加节方式修改添加节方式修改PE 在文件的最后建立一个新节,在节表结构的后面建立一个节在文件的最后建立一个新节,在节表结构的后面建立一个节表,用以表述该节。入口地址修改为病毒所在节表,用以表述该节。入口地址修改为病毒所在节计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第43页增加新一节步骤增加新一节步骤l先把病毒代码追加到文件尾部。先把病毒代码追加到文件尾部。

37、l在节表中增加一个在节表中增加一个section header各项数据填写正确各项数据填写正确(VirtualSize,VirtualAddress,PointerToRawData.)。)。l在在FILEHEADER中修改节表项数目:中修改节表项数目: +1。l重新计算重新计算SizeofHeaders,并替换原值。,并替换原值。l重新计算重新计算SizeofImage,并替换原值。,并替换原值。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第44页l记录未感染时的记录未感染时的AOEP(入口地址),因为(入口地址),因为在病毒代码结束时要让

38、宿主程序正常执行。在病毒代码结束时要让宿主程序正常执行。所以要先记录所以要先记录AOEP,在病毒程序结束后,在病毒程序结束后JMP跳到宿主程序的跳到宿主程序的AOEP。 l修改修改OptionalHEADER中的中的AddressOfEntryPoint,让它指向新加节,让它指向新加节的入口代码的入口代码计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第45页总结总结l病毒程序进行了如下工作:病毒程序进行了如下工作:(1)分析)分析EXE搜索到的文件是否为正常的搜索到的文件是否为正常的PE文件,判断文件,判断DOS头有无头有无MZ标志,标志,PE

39、头有无头有无PE标志。标志。(2)通过感染标记分析是否已经感染过,如已经感染过就)通过感染标记分析是否已经感染过,如已经感染过就不必重复感染。不必重复感染。(3)建立病毒节表结构,将病毒代码写入到感染文件的最)建立病毒节表结构,将病毒代码写入到感染文件的最后。节表结构中需要填入的有节名,节的内存偏移地址,后。节表结构中需要填入的有节名,节的内存偏移地址,节的属性,节的文件偏移,节的实际大小。节的属性,节的文件偏移,节的实际大小。(4)修改的参数有)修改的参数有PE头中的节个数,代码段大小,内存中头中的节个数,代码段大小,内存中整个整个PE映像体的尺寸,入口地址等。映像体的尺寸,入口地址等。计算

40、机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第46页思考?思考?l如果被感染文件的最后一个节表结构和第如果被感染文件的最后一个节表结构和第一个节之间的间距很小,不足以让病毒插一个节之间的间距很小,不足以让病毒插入一个新的节表结构,病毒还能感染该文入一个新的节表结构,病毒还能感染该文件吗?件吗?计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第47页4.3 加长最后一节修改加长最后一节修改PE 计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第48页l先

41、把病毒代码追加到最后一个节的尾部。先把病毒代码追加到最后一个节的尾部。l修改节表中最后一项修改节表中最后一项section header并增并增加加 SizeOfRawData 的大小和内存布局大小。的大小和内存布局大小。计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第49页感染前感染前后对比后对比计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第50页4.4 插入节方式修改插入节方式修改PE 计算机病毒分析与防治教程计算机病毒分析与防治教程 清华大学出版社清华大学出版社2022年3月8日第51页插入节方式修改插入节方式修改PEl这种方式不增加节的个数和文件长度,病这种方式不增加节的个数和文件长度,病毒搜寻到一个可执行文件后,分析每个节,毒搜寻到一个可执行文件后,分析每个节,查询节的空白空间查询节的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论