计算机病毒简单结构,计算机病毒结构分析(2)

有了它,一旦程序在DOS下执行,DOS就可以识别出它是有效的执行主体. – DOS存根实际上是有效的EXE. 在不支持PE文件格式的操作系统中,它将仅显示一条错误消息,类似于字符串“此程序无法在DOS模式下运行”或程序员可以使用自己的意图来实现完整的DOS. 码. – PE标头是与PE相关的结构IMAGE_NT_HEADERS的缩写,其中包含PE加载程序使用的许多重要字段. –节表是节的索引. – PE文件的实际内容分为多个块,我们将其称为部分. •每个部分都是具有共同属性的数据,例如代码/数据,读/写等. 将PE文件视为逻辑磁盘,PE标头是磁盘的引导扇区,而部分则是各种文件,每个文件自然具有不同的属性,例如只读,系统,隐藏,文档等. section表就像一个目录. ?值得注意的是,各部分的划分是基于每组数据的公共属性,而不是逻辑概念. 因此文件型病毒传染的对象主要是 类文件,在本节中我们不需要关心逻辑概念,例如数据,代码或其他. 如果数据和代码具有相同的属性,则可以将它们分组到同一部分. 部分名称只是区分不同部分的符号. 数据和代码之类的节名称仅是为了易于识别. 只有部分属性设置才能确定部分的特征和功能.

1a5d0937003181aa08fabaa442e3e8d9.png

如果一条数据要成为只读属性,则可以将其放在属性为只读的节中. 加载PE文件的主要步骤?首先,当执行PE文件时,PE加载程序检查DOS MZ头中的PE头偏移. 如果找到,请跳至PE标头. ?其次,PE加载器检查PE标头的有效性. 如果有效,请跳至PE标头的末尾. ?第三,节表后跟PE标头. PE加载器读取其中的节索引信息,并使用文件映射方法将这些节映射到存储器,并附加在节表中指定的节属性. ?第四,将PE文件映射到内存后,PE加载程序将处理PE文件的逻辑部分,类似于导入表. (2)检查PE文件的有效性?哪种PE文件有效? –只要某些关键数据结构有效,我们认为它们是有效的PE文件. –这个重要的数据结构是PE标头. 从编程的角度来看,PE标头实际上是IMAGE_NT_HEADERS结构. – IMAGE_NT_HEADERS结构的定义如下: IMAGE_NT_HEADERS STRUCT –签名dd – FileHeader IMAGE_FILE_HEADER – OptionalHeader IMAGE_OPTIONAL_HEADER32? IMAGE_NT_HEADERS ENDS?签名: 此字段是一个PE标记,其值为50h,45h,00h,00h(PE \ 0 \ 0).

– – – – – IMAGE_DOS_SIGNATURE等于5A4Dh IMAGE_OS2_SIGNATURE等于454Eh IMAGE_OS2_SIGNATURE_LE等于454Ch IMAGE_VXD_SIGNATURE等于454Ch IMAGE_NT_SIGNATURE等于4550h? FileHeader: 此结构字段包含有关文件数量的信息,例如机器的执行情况,文件的物理分布等. OptionalHeader: 此结构字段包含有关PE文件的逻辑分发的信息. 找到PE标头? DOSMZ标头(IMAGE_DOS_HEADER)包含PE标头的文件偏移量,即e_lfanew. ?定位步骤是: -首先,检查文件头中第一个单词的值是否等于IMAGE_DOS_SIGNATURE,如果是,则DOS MZ头有效. –其次,一旦证明文件的DOS MZ头有效,则可以使用e_lfanew来定位PE头. –第三,比较PE标头的第一个字的值是否等于IMAGE_NT_ SIGNATURE.

如果两个值前后匹配,那么我们认为该文件是有效的PE文件. (3)FileHeader? FileHeader是IMAGE_NT_HEADERS的重要字段. 文件头的表示结构是: IMAGE_FILE_HEADER STRUCT –机器WORD NumberOfSections WORD TimeDateStamp dd PointerToSymbolTable dd NumberOfSymbols dd SizeOfOptionalHeader WORD特征WORD? IMAGE_FILE_HEADER ENDS域名TimeDateStamp PointOfSymbol的Machine NumberOfSections TimeDateStamp PointOfSymbol对于英特尔平台,该值为IMAGE_FILE_MACHINE_I386(14Ch). 文件中的节数. 如果要添加或删除文件中的部分,则需要修改此值.

72969eaa4a32faafac428b1033f96248.png

文件创建日期和时间. 保持原样,不要将其用于调试. 用于调试. 指示紧随该结构之后的OptionalHeader结构的大小,该大小必须为有效值. 特征标记文件信息,例如文件是exe还是dll. 注意: ?节,节表和NumberOfSections之间的关系?截面表数组边界确定所有NumberOfSections的数量0(4)可选标头?可选头是PE头中的最后,最大和最重要的成员,包括PE文件信息的逻辑分发. 此结构中有31个域. ?虚拟地址(VA ----虚拟地址)? RVA(相对虚拟地址,相对虚拟地址)域名AddressOfEntryPoint表示PE加载程序将要运行的PE文件的第一条指令的RVA. 如果要更改整个执行流程,则可以将此值分配给新的RVA,以便首先执行新RVA处的指令. PE文件的首选加载地址. 例如,如果值为400,000H,则PE加载程序将尝试在虚拟地址空间中将文件加载到400,000H. 如果该地址区域已被其他模块占用,则PE加载器将选择另一个空闲地址.

内存中节对齐的粒度. 例如,如果值为4096(1000H),则每个节的起始地址必须是4096的倍数. 如果第一节以401000H开始且大小为10个字节,则下一个节也必须以402000H开始在401000H和402000H之间仍然有很多未使用的空间. 文件中各节的对齐粒度. 含义类似于SectionAlignment. Win32系统版本. 整个PE映像在内存中的大小. 它是节对齐处理后所有标题和节的大小. 所有标题+节表的大小等于文件大小减去文件中所有节的大小. 您可以将该值用作PE文件第一部分的文件偏移量. NT用于标识PE文件属于哪个子系统. 对于大多数Win32程序,只有两种类型的值: Windows GUI和Windows CUI(控制台). IMAGE_DATA_DIRECTORY结构的数组. 每个结构都提供了重要数据结构的RVA,例如地址表的引入. ImageBaseSectionAlignmentFileAlignment MajorSubsystemVersion MinorSubsystemVersion SizeOfImage SizeOfHeaders子系统DataDirectory(5)节表(节表)?节表是用于索引节的数组结构,详细表示为: – IMAGE_SIZEOF_SHORT_NAME等于8 – IMAGE_SECTION_HEADER STRUCT?命名IMAGE_SIZEOF_SHORT_NAME?工会结束VirtualAddress dd SizeOfRawData dd PointerToRawData dd PointerToRelocations dd PointerToLinenumbers dd NumberOfRelocations dw NumberOfLinenumbers dw特性dd– IMAGE_SECTION_HEADER ENDS域名名称段名称长度不超过8个字节.

节名称只是一个标记. 您可以选择任何名称,甚至将其留空. 段名称不是ASCII字符串,因此它不能以null结尾. RVA在本节中. 当将段映射到内存时,PE加载程序将读取该值. 如果字段值是1000H,并且PE文件已加载到地址400,000H,则此部分将加载到401000H. 文件对齐处理后的节大小. 该字段的值表示要映射到内存中的字节数. (假定文件的文件对齐大小为0x200. 如果VirtualSize字段指示此部分的长度为0x388字节,则此字段的值为0x400,指示此部分的长度为0x400字节). VirtualAddressSizeOfRawDataPointerToRawData部分基于文件偏移量. PE加载器使用此值来查找节数据在文件中的位置. 特征包含指示节属性的标签. 该部分是否包含可执行代码,初始化数据,未初始化数据,是否可写,可读等. PE loader的工作步骤: 首先,阅读IMAGE_FILE_HEADER的NumberOfSections字段以获取文件的节数;其次,将SizeOfHeaders字段的值用作节表的文件偏移量,然后找到节表;三,遍历整个结构数组以检查每个成员的值;第四,对于每种结构,读取PointerToRawData字段值并找到文件偏移量. 然后读取SizeOfRawData字段的值,以确定映射内存的字节数. 将VirtualAddress字段值和ImageBase字段值添加到本节开头的虚拟地址. 然后,您可以将部分映射到内存中,并根据“特征”字段的值设置属性. ?第五,遍历整个数组,直到处理完所有部分为止.

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-273514-2.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值