1、硬盘结构简介
硬盘的三个基本参数(CHS):
柱面数(Cylinders:表示硬盘每一面盘片上有几条磁道,最大为1023(用10个二进制数存储)
磁头数(Header):表示磁盘总共有几个磁头,也就是有几面盘片,硬盘是由多个盘片组成的,而每个盘片上都有一个读写磁头负责该磁片的读写操作,磁头数最大为255
扇区数(Sectors):表示每一条磁道上有几个扇区,最大为63(用6个二进制位存储)。每个扇区一般是512字节。
在CHS寻址方式中,磁头、柱面、扇区的取值范围是:0-255,0-1023、1-63(注意是从1开始)
磁盘最大容量
255 * 1023 * 63 * 512 / 1048576 = 8024 MB (1M =1048576 Bytes )
硬盘厂商常用的单位:
255 * 1023 * 63 * 512 / 1000000 = 8414 MB ( 1M =1000000 Bytes )
2、从CHS到LBA
假设用C表示当前柱面号,H表示当前磁头号,Cs表示起始柱面号,Hs表示起始磁头号,Ss表示起始扇区号,PS表示每磁道有多少个扇区,PH表示每柱面有多少个磁道,则有以下对应关系:
LBA=(C-Cs)*PH*PS+(H-Hs)*PS+(S-Ss)
一般情况下,CS=0,HS=0,SS=1;PS=63、PH=255
那么可以根据公式计算如下:
C/H/S=0/0/1,带入公式中得到LBA=0
C/H/S=0/0/63,带入公式中得到LBA=62
从LBA到CHS
C=LBA/(PH*PS)+Cs
H=(LBA/PS)MOD PH +Hs
S=LBA MOD PS +Ss
3、主引导扇区结构简介
主引导扇区也就是硬盘的第一个扇区(0面0道1扇区),它由主引导记录(MBR)、硬盘分区表(DPT)、引导扇区标记(Boot Record ID)三部分组成。
主引导记录(MBR):占用引导扇区(boot sector)的前446个字节(0到0x1BDH),它里面存放着系统主引导程序(它负责从活动分区中装载并运行系统引导程序)
硬盘主分区表(DPT):占用64个字节(0x1BEH——0x1FDH),里面记录了磁盘的基本分区信息,它分为四个分区项,每项16字节,分别记录 每个主分区的信息(因此最多可以有四个分区)
引导区标记(BootRecord ID):占用两个字节(0x1FEH——0x1FFH),对于合法引导区,它等于0xAA55,这也是判别引导区是否合法的标志。
分区表项内容及其含义:
由于主分区表中只能分为四个分区,无法满足需求,因此设计了一种扩展分区格式。基本上说,扩展分区的信息是以链表的形式存放的,但也有一些特别的地方:
4、系统引导过程
系统启动过程代码分析(部分代码)
定位到0000:7C00
CLI :关中断
XOR AX,AX ;设置堆栈端地址为0000
MOV SS,AX
MOV SP,7C00 ;设置堆栈指针为7c00
MOV SI,SP ;SI=7c00
PUSH AX
POP ES ;ES=0000
PUSH AX
POP DS ;DS=0000
STI ;开中断
把MBR重定位到0600
MOV DI , 0600
MOV CX , 0100 ;移动256个Word(512byte)
REPNZ ;把MBR从0000:7c00移动到0000:0600
MOVSW
在新位置继续执行MBR,查找活动分区
JMP 0000:061D ;跳转至0000:061D,即程序的下一条指令
MOV SI,07BE ;指向第一分区表的首地址
MOV BL,04 ;分区个数为4
SEARCH_LOOP1:
CMP BYTE PTR [SI],80 ;是不是活动分区
JZ FOUND_ACTIVE ;是,转FOUND_ACTIVE,继续查看其他分区
CMP BYTE PTR [SI],00 ;是不是非活动分区
JNZ NOT_ACTIVE ;不是,跳转至NOT_ACTIVE,分区表出现异常
继续查找,直到找到活动分区
ADD SI,10 ;增量表指针加16
DEC BL ;减少计数
JNZ SEARCH_LOOP1 ;继续检查四个分区中的其他分区
INT 18 ;没有找到活动分区,跳转至ROM BASIC
FOUND_ACTIVE: ;找到了活动分区
MOV DX, [SI] ;保存磁头号、驱动号到DH、DL
MOV CX,[SI+02] ;保存磁道号、扇区号到CH、CL
MOV BP,SI ;保存当前分区首地址到BP
将活动分区第一个扇区读入内存地址0000:7C00
MOV BX,7C00 ;设置读盘缓冲区
MOV AX,0201 ;读入一个扇区’
PUSH DI ;恢复DI
INT 13 ;把扇区读入0000:7c00
5、INT 13H——实现磁盘的读写操作
6、什么是引导性病毒
引导性病毒指专门感染磁盘引导扇区和硬盘主引导扇区的计算机病毒程序。如果被感染的磁盘被作为系统启动盘使用,则在启动系统时,病毒程序即被自动装入内存,从而使现行系统感染上病毒。这样在系统带毒的情况下,如果进行了磁盘I/O操作,则病毒程序就会主动地进行传染,从而使其他磁盘感染上病毒。
7、引导性病毒的工作环境:
引导型病毒是一种在ROMBIOS之后,系统引导时出现的病毒,它先于操作系统,依托的环境是BIOS中断服务程序。
系统的引导过程,只是简单地检查了结束标记0xAA55,但没有对引导扇区的内容进行检查,所以引导型病毒就利用了这一点,在引导区结构不变的情况下替换掉相应代码。
8、引导型病毒的工作原理
引导型病毒是利用操作系统的引导模块放在某个固定的位置,并且控制权的转交方式是以物理位置为依据,而不是以操作系统引导区的内容为依据,因而病毒占据该物理位置即可获得控制权,而将真正的引导区内容搬家转移或替换,待病毒程序执行后,将控制权交给真正的引导区内容,使得这个带病毒的系统看似正常运转,而病毒已隐藏在系统中并伺机传染、发作。
9、引导性病毒主要技术手段
常驻内存高端:
基本要求:
想办法把病毒程序载入到内存中,载入后保证这一段代码不被其他代码覆盖。
利用点:
内存0000:0413处两字节描述了基本内存的大小,它的值是KB的倍数。
实现:
病毒程序首先将自身复制到内存的高端,修改内存容量标志单元,在原有值的基础上减去病毒长度,使得病毒代码能够常驻内存;
修改中断向量表,截获系统中断:
然后将原int 13h磁盘中断服务程序的中断向量保存,并修改此中断向量,将其指向病毒代码,病毒代码因此获得系统控制权,进而执行感染、破坏等工作。
10、引导性病毒的主要特点
(1)引导型病毒式在操作系统之前进入内存,寄生对象又相对固定,因此该类型病毒基本上不得不采用减少操作系统所掌管的内存容量方法来驻留内存高端。而正常的系统引导过程一般是不减少系统内存的。
(2)引导型病毒需要把病毒传染给软盘,一般是通过修改INT 13H的中断向量,而新的INT 13H中断向量地址必定指向内存高端的病毒程序。
(3)引导型病毒感染硬盘时,必定驻留硬盘的主引导扇区或引导扇区,并且只驻留一次,因此引导型病毒一般都是在软盘启动过程中把病毒传染给硬盘的。而正常的引导过程一般是不对硬盘主引导扇区进行写盘操作的。
(4)引导型病毒的寄生对象相对固定,把当前的系统主引导扇区和引导扇区与干净的主引导扇区和引导扇区进行比较,如果内容不一致,可认定系统引导区异常。
11、磁盘带毒引导过程
12、如何清除病毒
著名的石头病毒会将系统的主引导扇区搬家备份到硬盘0面0道7扇区,请问如果系统已中石头病毒后,如何清除掉该病毒?