文档介绍:该【病毒与手机病毒简介 】是由【niuwk】上传分享,文档一共【42】页,该文档可以免费在线阅读,需要了解更多关于【病毒与手机病毒简介 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。主要内容
Linux系统的启动过程
ELF文件格式
Linux病毒的感染机制
手机病毒的基本原理及其防范
第10章Unix/Linux病毒与手机病毒简介
第1页/共42页
文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体现在对文件和目录的组织上
目录提供了管理文件的一个方便而有效的途径
Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型
Linux树型
目录结构示意图
第2页/共42页
文件系统指文件存在的物理空间,Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构
Linux将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构
Linux文件系统使用索引节点来记录文件信息,其作用类似Windows的文件分配表
索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息
一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应
系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号
Linux文件系统将文件索引节点号和文件名同时保存在目录中
第3页/共42页
Linux系统启动过程
第4页/共42页
简介
ELF(ExecutableandLinkingFormat,可执行链接格式)是Unix系统实验室(USL)作为应用程序二进制接口(ApplicationBinaryInterface,ABI)而开发和发布的
工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位Intel体系上不同操作系统之间可移植的二进制文件格式
ELF标准定义了一个二进制接口集合,用以支持流线型的软件开发,从而减少不同执行接口的数量,因此可以减少重新编程、重新编译的代码
有关ELF的主要内容:
目标文件(ObjectFiles),描述ELF目标文件格式三种主要的类型
程序转载和动态连接,描述目标文件的信息和系统在创建运行时程序的行为
第5页/共42页
iABI的目标文件的格式,被称作ELF
在目标文件中有三种主要的类型:
可重定位文件(RelocatableFile),保存着代码和适当的数据,用来和其他的目标文件一起创建一个可执行文件或者是一个共享文件
可执行文件(ExecutableFile),保存着一个用来执行的程序;该文件指出了exec(BA_OS)如何来创建程序进程映像
共享目标文件(SharedObjectFile),保存着代码和合适的数据,用来被下面的两个链接器链接
链接编辑器
可以和其他的可重定位与共享目标文件来创建其他的目标
动态链接器
联合可执行文件和其他的共享目标文件来创建一个进程映像
第6页/共42页
目标文件参与程序的链接(创建一个程序)和程序的执行(运行一个程序)
从便利性和有效性来看,目标文件格式提供了文件内容的并行视图,以反映出不同的需要
Linking视图
Execution视图
第7页/共42页
#defineEI_NIDENT16
typedefstruct{
unsignedchare_ident[EI_NIDENT];/*目标文件标识*/
Elf32_Halfe_type;/*目标文件类型*/
Elf32_Halfe_machine;/*给出文件的目标体系结构类型*/
Elf32_Worde_version;/*目标文件版本*/
Elf32_Addre_entry;/*程序入口的虚拟地址,如果目标文件没有程序入口,可以为0*/
Elf32_Offe_phoff;/*程序头表的偏移量(按字节计算)*/
Elf32_Offe_shoff;/*节头表的偏移量(按字节计算)*/
Elf32_Worde_flags;/*保存与文件相关的,特定于处理器的标志*/
Elf32_Halfe_ehsize;/*ELF头部的长度(以字节计算)*/
Elf32_Halfe_phentsize;/*程序头表的表项大小(按字节计算)*/
Elf32_Halfe_phnum;/*程序头表的表项数目,可以为0*/
Elf32_Halfe_shentsize;/*节头表的表项大小(按字节计算)*/
Elf32_Halfe_shnum;/*节头表的表项数目,可以为0*/
Elf32_Halfe_shstrndx;/*节头表中与节名称字符串表相关的表项的索引*/
}Elf32_Ehdr;
第8页/共42页
一个目标文件的节头表可以定位所有的节
节头表是一个Elf32_Shdr结构的数组
一个节头表的索引是这个数组的下标
节头表的e_shoff成员给出了节头表的偏移量(从文件开始计数)。e_shnum说明节头表中包含了多少个表项;e_shentsize给出了每个表项的长度
节头表索中某些引是保留的,这些专用索引在目标文件中将没有与之对的应节
节头的结构所示:
第9页/共42页
typedefstruct{
Elf32_Wordsh_name;/*节名称。是节头字符串表节的索引。名字是NULL结尾的字符串*/
Elf32_Wordsh_type;/*为节的内容和语义进行分类*/
Elf32_Wordsh_flags;/*节支持1位形式的标志志,这些标志描述了多种属性*/
Elf32_Addrsh_addr;/*如果节出现在进程的内存映像中,此成员给出节的第一个字节的地址,
否则,此字段为0*/
Elf32_Offsh_offset;/*此成员的取值给出节的第一个字节与文件头之间的偏移。
不过,SHT_NOBITS类型的节不占用文件的空间,因此其
sh_offset成员给出的是其概念性的偏移*/
Elf32_Wordsh_size;/*此成员给出节的长度(字节数)。除非节的类型是SHT_NOBITS,
否则节占用文件中的sh_size字节。类型为SHT_NOBITS的节长度
可能非零,但不占用文件中的空间。*/
Elf32_Wordsh_link;/*此成员给出节头部表索引链接。其具体的解释依赖于节类型*/
Elf32_Wordsh_info;/*此成员给出附加信息,其解释依赖于节类型*/
Elf32_Wordsh_addralign;/*某些节带有地址对齐约束。例如,若一个节保存一个doubleword,
那么系统必须保证整个节能够按双字对齐。sh_addr对
sh_addralign取模,结果必须为0。目前仅允许取值为0和2的幂次数。
数值0和1表示节没有对齐约束*/
Elf32_Wordsh_entsize;/*某些节中包含固定大小的项目,如符号表。对于这类节,
此成员给出每个表项的长度字节数。如果节中并不包含固定长度表项的
表,此成员取值为0*/
}Elf32_Shdr;
第10页/共42页