第三章 计算机病毒结构分析.ppt

上传人:豆**** 文档编号:56541132 上传时间:2022-11-02 格式:PPT 页数:75 大小:2.23MB
返回 下载 相关 举报
第三章 计算机病毒结构分析.ppt_第1页
第1页 / 共75页
第三章 计算机病毒结构分析.ppt_第2页
第2页 / 共75页
点击查看更多>>
资源描述

《第三章 计算机病毒结构分析.ppt》由会员分享,可在线阅读,更多相关《第三章 计算机病毒结构分析.ppt(75页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第三章第三章 计算机病毒结计算机病毒结构分析构分析(6)引入表(ImportTable)两个概念:引入函数:是被某模块调用的但又不在调用者模块中的函数,因而命名为Import(引入)函数。引入函数实际位于一个或者更多的DLL里。调用者模块里只保留一些函数信息,包括函数名及其驻留的DLL名。DataDirectory:OptionalHeader最后一个成员就是DataDirectory,它是一个IMAGE_DATA_DIRECTORY结构数组,共有15个成员。DataDirectory包含了PE文件中各重要数据结构的位置和尺寸信息。每个成员包含了一个重要数据结构的信息。DataDirector

2、y的每个成员都是IMAGE_DATA_DIRECTORY结构类型,其定义如下所示:IMAGE_DATA_DIRECTORYSTRUCTVirtualAddressdd/数据结构的相对虚拟地址(RVA)isizedd/VirtualAddress所指向数据结构的字节数IMAGE_DATA_DIRECTORYENDS个成员序号便移包含信息简介0 96Export symbols导出表1 104Import symbols导入表2 112Resources资源3 120Exception异常4 128Security安全5 136Base relocation重定位表6 144Debug调试信息7

3、152Copyright string版权信息8 160GlobalPTR全局指针相对虚拟地址表9 168Thread local storage(TLS)本地线程存储10 172Load configuration装载配置表11 180Bound Import具体资料不祥12 188Import Address Table引入函数的地址(宿主程序中的地址)表13 192Delay Import具体资料不祥14 200COM descriptorCOM描述子15208Reserved未使用引入表:实际上是一个IMAGE_IMPORT_DESCRIPTOR结构数组。每个结构包含PE文件引入函数的

4、一个相关DLL的信息。如果该PE文件从10个不同的DLL中引入函数,那么这个数组就有10个成员。该数组以一个全0的成员结尾。IMAGE_IMPORT_DESCRIPTOR结构的定义如下:IMAGE_IMPORT_DESCRIPTORSTRUCTUnionCharacteristicsddOriginalFirstThunkddEndsTimeDateStampddForwarderChainddNameddFirstThunkddIMAGE_IMPORT_DESCRIPTORENDSOriginalFirstThunk含有指向一个IMAGE_THUNK_DATA结构数组的RVA。FirstTh

5、unk与OriginalFirstThunk的结构相同,只是作用不同。IMAGE_THUNK_DATA是一个指向IMAGE_IMPORT_BY_NAME结构的指针。注意IMAGE_THUNK_DATA包含了指向一个IMAGE_IMPORT_BY_NAME结构的指针,而不是结构本身。IMAGE_IMPORT_BY_NAME结构保存着一个引入函数的相关信息。IMAGE_IMPORT_BY_NAME结构的定义:IMAGE_IMPORT_BY_NAMESTRUCTHintdw引入函数在原中的索引号Namedb引入函数在原中的名字IMAGE_IMPORT_BY_NAMEENDS假设有几个IMAGE_IM

6、PORT_BY_NAME结构,我们收集起这些结构的RVA(IMAGE_THUNK_DATAs)组成一个数组,并以0结尾,然后再将数组的RVA放入OriginalFirstThunk。FirstThunk与OriginalFirstThunk区别OriginalFirstThunkIMAGE_IMPORT_BY_NAMEFirstThunk|IMAGE_THUNK_DATA-Function 1 Function 2 Function 3 Function 4.Function n Function 1 Address of Function 1 IMAGE_THUNK_DATA-Functio

7、n 2 Address of Function 2 IMAGE_THUNK_DATA-Function 3 Address of Function 3 IMAGE_THUNK_DATA-Function 4 Address of Function 4.-.IMAGE_THUNK_DATA-Function n Address of Function n 用函数名调用:IMAGE_IMPORT_BY_NAME用序号调用:IMAGE_THUNK_DATA值的低位字指示函数序数,而最高二进制位(MSB)设为1。例如,如果一个函数只由序数引出且其序数是1234H,那么对应该函数的IMAGE_THUNK

8、_DATA值是80001234H。列出某个PE文件的所有引入函数的步骤:第一,校验文件是否是有效的PE。第二,从DOSheader定位到PEheader。第三,获取位于OptionalHeader的数据目录(DataDirectory)的地址。第四,转至数据目录的第二个成员提取其VirtualAddress值。第五,利用上值定位第一个IMAGE_IMPORT_DESCRIPTOR结构。第六,检查OriginalFirstThunk值。若不为0,则顺着OriginalFirstThunk里的RVA值转入那个RVA数组。若OriginalFirstThunk为0,就改用FirstThunk值。有些

9、连接器生成PE文件时会置OriginalFirstThunk值为0,这应该算是个bug。不过为了安全起见,我们还是先检查OriginalFirstThunk的值。第七,对于每个数组元素,我们用IMAGE_ORDINAL_FLAG32来检查该元素的最高位。如果该元素值的最高二进位为1,那么函数是由序数引入的,可以从该值的低字节提取序数。如果元素值的最高二进位为0,就可将该值作为RVA转入IMAGE_IMPORT_BY_NAME数组,跳过Hint就是函数名字了。第八,再跳至下一个数组元素提取函数名,一直到数组底部(它以null结尾)。现在我们已遍历完一个DLL的引入函数,接下去处理下一个DLL。第

10、九,即跳转到下一个IMAGE_IMPORT_DESCRIPTOR并处理之。依次循环直到数组结尾(IMAGE_IMPORT_DESCRIPTOR数组以一个全0域元素结尾)。(7)引出表(ExportTable)附加概念:引出函数,数据目录引出表是数据目录的第一个成员,又可称为IMAGE_EXPORT_DIRECTORY。IMAGE_EXPORT_DIRECTORY共有个成员,部分介绍如下:域名含义nName模块的真实名称。该域是必须的,因为文件名可能会改变。这种情况下,PE装载器将使用这个内部名字。nBase基数,(引出序数 nBase)就是函数地址数组的索引值了。NumberOfFunctio

11、ns模块引出的函数/符号总数。NumberOfNames通过名字引出的函数/符号数目。该值不是模块引出的函数/符号总数,这是由上面的NumberOfFunctions给出。本域可以为0,表示模块可能仅仅通过序数引出。如果模块根本不引出任何函数/符号,那么数据目录中引出表的RVA为0。AddressOfFunctions模块中有一个指向所有函数/符号的RVAs数组,本域就是指向该RVAs数组的RVA。简言之,模块中所有函数的RVAs都保存在一个数组里,本域就指向这个数组的首地址。AddressOfNames类似上个域,模块中有一个指向所有函数名的RVAs数组,本域就是指向该RVAs数组的RVA。

12、AddressOfNameOrdinalsRVA,指向包含上述AddressOfNames数组中相关函数之序数的16位数组。两类输出方式:AddressOfFunctions和NumberOfFunctionsAddressOfNames和NumberOfNamesAddressOfNameOrdinals是用来统一上述两类输出方式的。这就相当于一个别名。它们的关联方式如下:AddressOfNamesAddressOfNameOrdinals|RVA of Name 1Index of Name 1RVA of Name 2Index of Name 2RVA of Name 3Index

13、of Name 3RVA of Name 4Index of Name 4.RVA of Name NIndex of Name N根据引出函数名,怎样来获取其地址呢?1.定位到PEheader。2.从数据目录读取引出表的虚拟地址。3.定位引出表获取名字数目(NumberOfNames)。4.并行遍历AddressOfNames和AddressOfNameOrdinals指向的数组匹配名字。如果在AddressOfNames指向的数组中找到匹配名字,从AddressOfNameOrdinals指向的数组中提取索引值。例如,若发现匹配名字的RVA存放在AddressOfNames数组的第77个元

14、素,那就提取AddressOfNameOrdinals数组的第77个元素作为索引值。如果遍历完NumberOfNames个元素,说明当前模块没有所要的名字。5.从AddressOfNameOrdinals数组提取的数值作为AddressOfFunctions数组的索引。也就是说,如果值是5,就必须读取AddressOfFunctions数组的第5个元素,此值就是所要函数的RVA。IMAGE_EXPORT_DIRECTORY结构的nBase成员nBase是一个基数。(引出序数nBase)就是函数地址数组的索引值了。如果程序员在def文件中设定起始序数号为200,这意味着AddressOfFunc

15、tions数组至少有200个元素。即使这前面200个元素并没使用,但它们必须存在。有了nBase,就节约了200个空元素。注意nBase并不影响AddressOfNameOrdinals数组的值。根据函数序数获取函数地址的步骤1.定位到PEheader。2.从数据目录读取引出表的虚拟地址。3.定位引出表获取nBase值。4.减掉nBase值得到指向AddressOfFunctions数组的索引。5.将该值与NumberOfFunctions作比较,大于等于后者则序数无效。6.通过上面的索引就可以获取AddressOfFunctions数组中的RVA了。通过名字和序号访问的比较从序数获取函数地址

16、比函数名快捷容易,因为这种方法不需要遍历AddressOfNames和AddressOfNameOrdinals这两个数组。虽然GetProcAddress支持两种调用方式,但是,用序号调用的时候比较复杂(要构造一个特殊的数值)。另外,在管理上,有名字会更好。WinPE察看器演示ExeDll源代码级PE察看器演示Win32文件型病毒编制技术文件型病毒编制技术Ring-3病毒的兼容性较好Ring-3病毒需要API的支持公开的未公开的技术包括:2.1病毒的重定技术病毒的重定技术为什么需要重定位?正常程序的变量和函数的相对地址都是预先计算好的。病毒是附加在宿主程序中的程序段,其问题在于:病毒变量和病

17、毒函数的相对地址很难计算。解决方法:动态找一个参照点,然后再根据参照点的地址确定病毒函数和病毒变量的地址。calldeltadelta:popebpleaeax,ebp+(offsetvar1-offsetdelta)参照量delta在内存中的地址+变量var1与参考量之间的距离=变量var1在内存中的真正地址举例介绍dwVardd?callF:popebxsubebx,offsetBmoveax,ebx+offsetdwVar编译文件(假设)0040100000000000BYTE4DUP(4)00401004E800000000call00401009004010095Bpopebx;eb

18、x=004010090040100A81EB09104000subebx,00401009;ebx=0004010108B8300104000moveax,dwordprtebx+00401000;moveax,00401000;moveax,dwVar如果被定位到00801000处0080100000000000BYTE4DUP(4)00801004E800000000call00801009008010095Bpopebx;ebx=008010090080100A81EB09104000subebx,00401009;ebx=00400000008010108B8300104000move

19、ax,dwordprtebx+00401000;moveax,00801000;moveax,dwVar2.2获取获取API函数函数为什么要获得API函数?正常程序用引入表获得病毒只是一个依附在正常程序中的代码段,没有自己的引入表思路:去动态连接库中寻找-找相应连接库(kernel32,user32等)在执行时的基地址。寻找基地址的方法包括(以kernel32为例):a)利用程序的返回地址,在其附近利用程序的返回地址,在其附近搜索搜索Kernel32的基地址的基地址Kernel32的push在应用程序中用esp在堆栈中获取。CallCreateProcessCreatePrcess入口Push

20、返回地址Jmp应用程序PusheaxCallExitThread程序入口retOSkernel32.dll应用程序为什么能够从4GB的内存中得到Kernel32.dll的基地址呢?其实是这样的,Dll有一个非常特殊的特性:当有别的程序调用它的时候,它的文件映象就会动态地映射到调用进程的内存地址空间。一般情况下,一个程序在运行的时候,Kernel32.dll这个Dll都会被映射到该程序的内存地址空间,成为它的一部分这样一来,我们就可以在宿主的内存地址空间中搜索到Kernel32.dll的基地址了.例子GetKBase:movedi,esp+04h;这里的esp+04h是不定的,主要看从程序第一条

21、指令执行到这里有多少push;操作,如果设为N个push,则这里的指令就是Movedi,esp+N*4handedi,0FFFF0000h.whileTRUE.ifDWORDptredi=IMAGE_DOS_SIGNATURE;判断是否MZmovesi,ediaddesi,DWORDptresi+03Ch;esi指向PE标志.ifDWORDptresi=IMAGE_NT_SIGNATURE;是否有PE标志.break;如果有跳出循环.endif.endifsubedi,010000h;分配粒度是10000h,dll必然加载在xxxx0000h处.ifediMIN_KERNEL_SEARCH_B

22、ASE;MIN_KERNEL_SEARCH_BASE等于70000000Hmovedi,0bff70000h;如果上面没有找到,则使用Win9x的KERNEL地址.break.endif.endwmovhKernel32,edi;把找到的KERNEL32.DLL的基地址保存起来b)对相应操作系统分别给出固定的)对相应操作系统分别给出固定的Kernel32模块的基地址模块的基地址对于不同的windows操作系统来说,Kernel32模块的地址是固定的,甚至一些API函数的大概位置都是固定的。Windows98为BFF70000Windows2000为77E80000WindowsXP为77E60

23、000缺点是兼容性差GetAPI在得到了Kernel32的模块地址以后,我们就可以在该模块中搜索我们所需要的API地址。对于给定的API,可以通过直接搜索Kernel32.dll导出表的方法来获得其地址.同样我们也可以先搜索出GetProcAddress和LoadLibrary两个API函数的地址,然后利用这两个API函数得到我们所需要的API函数地址。3.3文件搜索文件搜索FindFirstFile:该函数根据文件名查找文件;FindNextFile:该函数根据调用FindFirstFile函数时指定的一个文件名查找下一个文件;FindClose:该函数用来关闭由FindFirstFile函

24、数创建的一个搜索句柄;WIN32_FIND_DATA:该结构中存放着找到文件的详细信息。FindFileProca)指定找到的目录为当前工作目录b)开始搜索文件(*.*)c)该目录搜索完毕?是则返回,否则继续d)找到文件还是目录?是目录则调用自身函数FindFile,否则继续e)是文件,如符合感染条件,则调用感染模块,否则继续f)搜索下一个文件(FindNextFile),转到C继续FindFileEndp3.5内存映射文件内存映射文件内存映射文件提供了一组独立的函数,这些函数使应用程序能够像访问内存一样对磁盘上的文件进行访问。这组内存映射文件函数将磁盘上的文件的全部或者部分映射到进程虚拟地址

25、空间的某个位置,以后对文件内容的访问就如同在该地址区域内直接对内存访问一样简单。这样,对文件中数据的操作便是直接对内存进行操作,大大地提高了访问的速度,这对于计算机病毒来说,对减少资源占有是非常重要的。应用步骤a)调用CreateFile函数打开想要映射的HOST程序,返回文件句柄hFile。b)调用CreateFileMapping函数生成一个建立基于HOST文件句柄hFile的内存映射对象,返回内存映射对象句柄hMap。c)调用MapViewOfFile函数将整个文件(一般还要加上病毒体的大小)映射到内存中。得到指向映射到内存的第一个字节的指针(pMem)。d)用刚才得到的指针pMem对整

26、个HOST文件进行操作,对HOST程序进行病毒感染。e)调用UnmapViewFile函数解除文件映射,传入参数是pMem。f)调用CloseHandle来关闭内存映射文件,传入参数是hMap。g)调用CloseHandle来关闭HOST文件,传入参数是hFile。3.5病毒如何感染其他文件病毒如何感染其他文件PE病毒感染其他文件的常见方法是在文件中添加一个新节,然后,把病毒代码和病毒执行后返回宿主程序的代码写入新添加的节中,同时修改PE文件头中入口点(AddressOfEntryPoint),使其指向新添加的病毒代码入口。这样,当程序运行时,首先执行病毒代码,当病毒代码执行完成后才转向执行宿

27、主程序。病毒感染其他文件的步骤1判断目标文件开始的两个字节是否为“MZ”。2判断PE文件标记“PE”。3判断感染标记,如果已被感染过则跳出继续执行宿主程序,否则继续。4获得DataDirectory(数据目录)的个数,(每个数据目录信息占8个字节)。5得到节表起始位置。(数据目录的偏移地址+数据目录占用的字节数=节表起始位置)6得到节表的末尾偏移(紧接其后用于写入一个新的病毒节信息)节表起始位置+节的个数*(每个节表占用的字节数28H)=节表的末尾偏移。7开始写入节表a)写入节名(8字节)。b)写入节的实际字节数(4字节)。c)写入新节在内存中的开始偏移地址(4字节),同时可以计算出病毒入口位

28、置。上一个节在内存中的开始偏移地址+(上一个节的大小/节对齐+1)*节对齐=本节在内存中的开始偏移地址。d)写入本节(即病毒节)在文件中对齐后的大小。e)写入本节在文件中的开始位置。上节在文件中的开始位置+上节对齐后的大小=本节(即病毒)在文件中的开始位置。f)修改映像文件头中的节表数目。g)修改AddressOfEntryPoint(即程序入口点指向病毒入口位置),同时保存旧的AddressOfEntryPoint,以便返回宿主并继续执行。h)更新SizeOfImage(内存中整个PE映像尺寸=原SizeOfImage+病毒节经过内存节对齐后的大小)。i)写入感染标记(后面例子中是放在PE头

29、中)。j)在新添加的节中写入病毒代码。ECX=病毒长度ESI=病毒代码位置(并不一定等于病毒执行代码开始位置)EDI=病毒节写入位置k)将当前文件位置设为文件末尾。3.6如何返回到宿主程序如何返回到宿主程序jmpoldAddressOfEntryPoint病毒演示病毒示例代码文件型病毒功能说明:病毒引导说明:文件型病毒,没有引导部分演示病毒传染说明:传染范围:Virus.exe所在目录传染目标:可执行文件(.exe)传染过程:搜索目录内的可执行文件,逐个感染病毒触发说明:触发条件:运行Virus.exe程序或被Virus.exe感染的程序文件型病毒功能说明:病毒破坏说明:破坏能力:无害型传染时

30、减少磁盘的可用空间,在可执行文件上附加一个节(4K)破坏方式:攻击文件在可执行文件上附加一个节(4K),修改可执行文件的入口地址破坏范围:Virus.exe所在目录病毒查杀说明:病毒危害等级:低,属于无害型病毒病毒特征类型:Bloodhound.W32.1(NortonAntiVirus检测结果,这是Symantec软件来临时指代新病毒的文件)病毒查杀方法:删除所有被感染的文件步骤0(预备):当防病毒程序如NortonAntiVirus(注:此处的测试应以当前测试机器上安装杀毒软件为准,本示例运行时机器上安装的只有NortonAntiVirus,故以此为参照)自动防护功能打开时,鼠标光标位于病

31、毒程序上时,会看到如下的图例:图例0图解说明:注解0-1表示NortonAntiVirus的自动防护功能打开着;注解0-2就是防病毒软件在用户鼠标置于图例0中注解0-3处的Virus.exe程序上时的报警提示。演示说明:作为自己开发的病毒程序,为了能够更好的演示病毒的特征,在开发过程中我们没有采用病毒的保护机制,故而防病毒软件根据病毒程序的特征即可给出该程序为病毒程序的报警提示。步骤1(运行预备):关闭防病毒软件的自动防护功能,点击病毒程序Virus.exe,运行该程序,参见下图:图例1图解说明:注解1-1表示NortonAntiVirus的自动防护功能被关闭;注解1-2为病毒程序运行主界面,

32、本实验为了能够比较直观演示病毒程序,让用户知道正在运行某个程序,故而有此主界面;但实际的病毒在感染其他程序前不会让用户感觉到病毒程序正在运行的,往往都是隐藏运行,或者是寄生在宿主程序中,这方面可参照病毒的引导机制的介绍。演示说明:详见备注提示用户是否观看感染过程,如下图:图例2图解说明:注解2-1提示用户是否观看病毒的感染过程,选择“是”观看感染过程,选择“否”运行原程序,由于该病毒程序不具有其他功能,所以选“否”时就直接关闭程序。演示说明:该文件型病毒侧重于病毒感染过程的演示,所以在感染部分的提示比较详细。步骤2步骤3:开始感染提示,如下图:图例3图解说明:注解3-1提示用户病毒程序开始感染

33、其他程序。演示说明:无步骤4:提示病毒感染范围,如下图:图例4图解说明:注解4-1提示用户病毒程序感染目标是病毒程序所在目录里的程序。演示说明:为了减少病毒破坏的范围,在编写该病毒程序时,限定其感染范围为目录内感染,这也同时减少了病毒的破坏范围;但就病毒特征而言,它还是很好的体现了病毒程序自我复制的这一特征。步骤5:提示当前搜索到的合法的目标程序,如下图:图例5图解说明:注解5-1提示说明当前搜索的目标程序是ebookedit.exe可执行文件。演示说明:无步骤6:判断目标程序是否是合法的可感染的程序,如下图:图例6图解说明:注解6-1提示目标程序是否为合法的可感染程序。演示说明:Virus.

34、exe可以感染的目标程序为PE文件中的可执行文件(.exe),对于文件型病毒传染机理可参照病毒的传染机制。步骤7:感染情况说明提示,如下图:图例7图解说明:注解7-1提示对病毒的感染情况进行说明。演示说明:Virus.exe感染方式是在宿主文件附加一个节(4K),被感染的宿主程序运行时先跳转到该节处,运行感染代码;感染结束后再返回宿主程序的入口地址执行宿主程序。这也体现了本病毒程序的破坏方式,作为一个演示的病毒程序,破坏程度应该在可控范围内,一些恶性的破坏方式可参照病毒的破坏机制说明。感染结果情况可参照步骤12的图例,Virus.exe被防病毒软件查出为病毒也正是因为该操作,具体参照步骤18的

35、图例。步骤8:感染过程隐藏说明(小技巧),如下图:图例8图解说明:注解8-1提示说明病毒程序加入中sleep的代码的目的。演示说明:此处加入该说明是也是为了说明是否存在病毒运行的一种判断思路,在手工查毒时有时就是依照该手段来判断当前机器是否有异常程序在运行;如果机器没有明显的程序在运行,而硬盘的指示灯一直闪烁,在高速运转着,则可粗略判断机器有异常程序在运行。防病毒的相关技术可参照防病毒基础技术部分介绍。当然对于病毒程序本身而言,为了避免被发现,就需要通过sleep一段时间再进行感染来降低被发现的可能性。步骤9:提示是否观看其他程序感染过程,如下图:图例9图解说明:注解9-1提示是否观看其他程序

36、感染过程。演示说明:无步骤10:病毒感染结束或用户取消操作的提示,如下图:图例10图解说明:注解10-1是病毒感染结束或用户取消操作后的提示。演示说明:感染结束或用户取消后就会运行宿主程序。如果我们隐藏前面介绍的这些步骤的对话框和主界面,则给用户的感觉就是运行了一个正常的程序,只是程序启动运行的时间相对慢了一点,这也就体现了病毒程序的潜伏性这一特征。步骤11:该图例与步骤6的图例同步,该图例是目标程序不合法或已被感染后的提示,如下图:图例11图解说明:注解11-1是目标程序不合法或已被感染的提示。演示说明:Virus.exe可感染的目标为标准的可执行文件(绝大部分的.exe文件),在感染过程中

37、对已感染的程序会进行检查是否已被感染,若已经被感染则不再进行感染:一可以提高病毒感染的效率,二可以防止多次感染使文件增大而引起用户的察觉。步骤12:比较目标程序感染前后的变化(注要指程序大小),如下图(图例12;图例12A和图例12B;图例12C和图例12D):图例12图解说明:注解12-1是KeyMaker.exe程序感染前的大小298KB(305,664字节);注解12-2是KeyMaker.exe程序感染后的大小302KB(309,760)。步骤12:比较目标程序感染前后的变化(注要指程序大小),如下图(图例12;图例12A和图例12B;图例12C和图例12D):图例12A步骤12:比较

38、目标程序感染前后的变化(注要指程序大小),如下图(图例12;图例12A和图例12B;图例12C和图例12D):图例12B图解说明:图例12A、12B、12C、12D是通过PE Viewer程序打开目标程序的图示。对照图例12A和12B的注解:注解1表示KeyMaker.exe程序的节数由感染前的9个增加到10个;注解2程序大小的变化由00043000增加到00044000;注解3是程序入口地址的变化由00043DE8变为00054B93;注解4是程序占用空间的变化由00054000增加到00055000;注解5是程序校验和的变化由0004C1FB变为0004C543。步骤12:比较目标程序感染

39、前后的变化(注要指程序大小),如下图(图例12;图例12A和图例12B;图例12C和图例12D):图例12C步骤12:比较目标程序感染前后的变化(注要指程序大小),如下图(图例12;图例12A和图例12B;图例12C和图例12D):图例12D图解说明:对照图例12C和12D的注解:注解1表示增加的一个节的具体内容。演示说明:这就是程序被感染后的结果,目标程序被增加一个节(4KB=4096字节),程序入口地址被修改,程序大小和占有空间增加4K。步骤13:测试感染后程序是否为病毒携带程序的图示,如下图:图例13图解说明:注解13-1表示NortonAntiVirus的自动防护功能打开着;注解13-

40、2就是防病毒软件在用户鼠标置于图例13中注解13-3处的KeyMaker.exe程序上时的报警提示。演示说明:由此病毒报警提示可知KeyMaker.exe已被感染,成为病毒Virus.exe携带者,并已具有病毒程序Virus.exe的特征。此处为了防止Virus.exe影响测试结果,在测试时把Virus.exe放到临时目录temp中,主目录留下被Virus感染的程序。步骤14:病毒携带程序KeyMaker.exe的运行情况,如下图:图例14图解说明:注解14-1表示NortonAntiVirus的自动防护功能被关闭;注解14-2为病毒携带程序KeyMaker.exe运行初始界面;注解14-3表

41、示当前运行是KeyMaker.exe。演示说明:运行KeyMaker.exe来检查程序被感染的情况以及该程序是否具有感染功能,在演示时为了能够测试效果,应该将其他的可执行文件换成未被感染的程序,只需从原先的测试包中将除KeyMaker.exe外的可执行文件拷贝过来复制即可。步骤15:是否观看病毒携带程序KeyMaker.exe的感染过程提示,如下图:图例15图解说明:注解15-1是否观看病毒携带程序KeyMaker.exe的感染过程提示。选择“是”观看感染过程,参照步骤16图示;选择“否”运行原程序,参照步骤17图示。演示说明:无步骤16:病毒携带程序KeyMaker.exe的开始感染提示,如

42、下图:图例16图解说明:注解16-1提示病毒携带程序KeyMaker.exe的开始感染其他程序,后面的步骤与步骤4开始类似。演示说明:无步骤17:病毒携带程序KeyMaker.exe不进行感染运行主程序图示,如下图:图例17图解说明:注解17-1是病毒携带程序KeyMaker.exe的运行界面。演示说明:无步骤18:病毒携带程序ebookedit.exe的感染过程被防病毒程序检测到的图示,如下图:图例18图解说明:注解18-1表示NortonAntiVirus的自动防护功能打开着;注解18-2是目标感染程序(此处是刚复制过来的未感染的测试程序);注解18-3表示正在运行的是病毒携带程序eboo

43、kedit.exe;注解18-4提示当前感染过程结束,在宿主程序ebookcode.exe增加一个节,修改了文件头;注解18-5提示该过程被检测有病毒程序在运行,从而进行病毒预警提示。演示说明:详见备注从从ring3到到ring0概述Win9x时代由于Win9x未对IDT,GDT,LDT加以保护,我们可以利用这一点漏洞来进入ring0。用SHE,IDT,GDT,LDT等方法进入ring0的例子清参考CVC杂志、已公开的病毒源码和相关论坛等。在NT/2K/XP时代webcrazy写的Win2K下进入ring0的C教程,这篇文章非常值得研究ring0病毒的技术人员参考。由于Win2K已经有了比较多的安全审核机制,即使我们掌握了这种技术,如果想在Win2K下进入ring0还必须具有Administrator权限。我们必须同时具备病毒编制技术和黑客技术才能进入Win2k的ring0,由此可以看出当前的病毒编制技术越来越需要综合能力。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > pptx模板 > 企业培训

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁