8.1.2c2 El Sector de carga
§1 Antecedentes
En secciones anteriores ( 8.1.2c1) se ha señalado que, excepto los disquetes, cada unidad física (disco) del sistema puede estar dividida en hasta 4 particiones primarias (volúmenes), y que una de ellas puede ser una partición DOS extendida, que puede contener a su vez distintas particiones secundarias (volúmenes lógicos).
En cualquier caso, sean particiones primarias o secundarias, estos "volúmenes" se presentan al SO como unidades independientes. En el contexto de este capítulo, volumen puede tomarse en un sentido amplio. Puede ser una partición primaria; un disquete; volumen lógico en una partición extendida DOS, o en ciertos sistemas. Por ejemplo NTFS, un compuesto de dos particiones.
Lo mismo que ocurre con la unidad física, en la que el sector de arranque MBR ( 8.1.2c) es el comienzo de su descripción lógica, los volúmenes lógicos tienen un primer sector con el comienzo de la descripción de su contenido.
§2 Sector de carga de volumen
Cada volumen tiene su propio sector de arranque VBS ("Volume Boot Sector") o simplemente sector de carga BS ("Boot Sector") que es análogo en concepto y funcionalidad al MBS (Master Boot Sector), aunque distinto en su contenido. El VBS es creado en el primer sector del volumen (512 bytes) en el momento de realizar el formateo de bajo nivel. Observe que el VBS es el primer sector lógico de la partición. Mientras que el MBR es el primer sector físico del disco.
Nota: Los disquetes tienen una estructura ligeramente distinta que los discos duros. Debido a que no pueden contener particiones, no contienen MBR o EBR. Solo sector de carga VBS, datos y metadatos (tablas FAT).
El formato del VBS difiere ligeramente según el formato lógico de la unidad. Así, es distinto en una unidad FAT12, FAT16, FAT32 o NTFS, aunque la estructura básica se mantiene. El contenido de los campos es idéntico, a excepción de pequeñas variaciones en el bloque de parámetros BIOS extendidos . La tabla muestra un esquema de la distribución en los tres formatos más utilizados.
Fat-16
|
Fat-32
|
NTFS
|
El detalle de los campos es el siguiente [2]:
- Código de salto. Los 3 primeros bytes son una mera instrucción de salto (JMP + NOP) para alcanzar el código de carga del volumen (VBC) que está situado algo más adelante . En estas posiciones suele haber tres hexadecimales del siguiente aspecto: EBh XXh 90h.
- Identificador del formato. Los 8 bytes siguientes constituyen una cadena de caracteres conocida como OEM ID, que identifican la utilidad que realizó el formato lógico del volumen. En los formatos Microsoft puede esperar los indicativos "MSDOS5.0"; "NTFS."; "MSWIN4.0" y "MSWIN4.1"; "IBM 3.3", etc.
-
Bloque de parámetros BIOS BPB ("BIOS Parameter Block").
A continuación sigue un bloque de parámetros que proporcionan al código
de carga del volumen (VBC) información sobre la geometría de la partición.
Esta disposición permite que el referido código pueda ser muy genérico
(parametrizado) en función del contenido de la BPB,
ya que los factores asociados a los distintos tamaños y geometrías de
disco quedan encapsulados en estos parámetros.
En las tablas que siguen se muestra el contenido del BPB para los formatos lógicos FAT12, FAT16 y FAT32. Algunos otros formatos, por ejemplo NTFS, son muy similares. Los números iniciales indican el desplazamiento ("offset") y el tamaño T en bytes del campo correspondiente.
BPB de FAT12 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Offset | T | Descripción | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0Bh | 2 | Bytes por sector (generalmente 512 8.1.2) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0Dh | 1 | Sectores por cluster. Alguno de los valores siguientes: 1, 2, 4, 8, 16, 32, 64. El tamaño máximo para el cluster es 32 KB (32.768 bytes) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0Eh | 2 | Sectores reservados. Representa el número de sectores que preceden el comienzo de las tablas FAT, incluyendo el propio VBS. Este valor es 1. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10h | 1 |
Número de copias de la tabla FAT del volumen. Siempre 2.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11h | 2 | Entradas en el directorio raíz. Número máximo de entradas (campos de 32 bits) que pueden existir en el directorio raíz del volumen. 224. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13h | 2 | Número de sectores en el volumen. Este parámetro limita la capacidad de FAT-12 a volúmenes de menos de 65.536 sectores (menores de 32 MB). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
15h | 1 | Byte
descriptor ("Media descriptor byte").
Contiene información sobre la unidad. Algunos de los valores
posibles se muestran en la tabla adjunta [1]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16h | 2 |
Sectores ocupados por cada FAT del volumen. 9 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
18h | 2 | Sectores por pista. 12. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1Ah | 2 | Número de cabezas. En un disquete HD 3.5" este valor es 2. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1Ch | 4 | Número de sectores ocultos en el volumen. Se refiere al número de sectores de la unidad (disco) que preceden el inicio del volumen. |
|
|||
Offset | T | Descripción | |
0Bh | 2 | Bytes por sector (generalmente 512 8.1.2) | |
0Dh | 1 | Sectores por cluster. Alguno de los valores siguientes: 1, 2, 4, 8, 16, 32, 64. Los valores que conducen a tamaños mayores de 32 KB producen errores. | |
0Eh | 2 | Sectores reservados. Representa el número de sectores que preceden el comienzo de las tablas FAT, incluyendo el propio VBS. Este valor es 1. | |
10h | 1 | Número de copias de la tabla FAT del volumen. Siempre 2. | |
11h | 2 | Entradas en el directorio raíz. Se refiere al número máximo de entradas (campos de 32 bits) que pueden existir en el directorio raíz del volumen. Un valor típico es 512 ( 8.1.2d). Pero debe recordarse que el sistema de nombres largos de los sistemas FAT de Microsoft utilizan mas de una de estas entradas y que el nombre del volumen ocupa otra de estas entradas. | |
13h | 2 | Número de sectores en el volumen (valor pequeño). Este parámetro solo se utiliza si el número es suficientemente pequeño para caber en el espacio asignado (16 bits), lo que corresponde a particiones de menos de 65.536 sectores (menores de 32 MB). En caso contrario, contiene un cero y el número de sectores del volumen se recoge en el campo de 4 Bytes previsto más adelante . | |
15h | 1 | Byte descriptor ("Media descriptor byte"). Contiene información sobre la unidad . Ver tabla en FAT-12 | |
16h | 2 | Sectores ocupados por cada FAT del volumen. Este valor, junto con el número de FATs y el de sectores reservados, proporcionan información sobre el sector donde comienza el directorio raíz (colocado inmediatamente después de las FAT). A su vez, conocido el número de entradas en este directorio, puede calcularse donde comienzan los datos de usuario. | |
18h | 2 | Contiene el parámetro "Sectores por pista" para unidades que utilizan INT 13h. | |
1Ah | 2 | Número de cabezas. Este dato y el anterior se refieren a los valores lógicos (geometría aparente) utilizados durante el formateo de alto nivel del volumen. Por ejemplo, en un disquete HD 3.5" este valor es 2. | |
1Ch | 4 | Número de sectores ocultos en el volumen. Se refiere al número de sectores de la unidad (disco) que preceden el inicio del volumen. Este dato es utilizado por el proceso de carga para calcular el desplazamiento absoluto ("offset") del directorio raíz y del área de datos del volumen. | |
20h | 4 | Número de sectores en el volumen (valor grande). Si el espacio de 2 bytes antes comentado para este valor contiene cero , se reseñan aquí el total de sectores del volumen. En caso contrario, este valor es cero. |
|
|||
Offset | T | Descripción | |
0Bh | 2 | Bytes por sector. Generalmente 512 en la arquitectura ix86. Aunque existen unidades de 1024, 2048 y 4096 bytes por sector. | |
0Dh | 1 | Sectores por cluster. Alguno de los valores siguientes: 1, 2, 4, 8, 16, 32, 64 o 128. | |
0Eh | 2 | Sectores reservados. Representa el número de sectores que preceden el comienzo de las tablas FAT, incluyendo el propio VBS, de forma que como mínimo este valor es 1. Generalmente es 32. | |
10h | 1 | Número de copias de la tabla FAT del volumen. Este valor es siempre 2. | |
11h | 2 | Máximo de entradas por directorio. En FAT12/16 se refiere al número máximo de entradas que pueden existir en el directorio raíz del volumen. Esta limitación no existe en FAT32, cuyo valor en este campo es cero. | |
13h | 2 | Número de sectores en el volumen (valor pequeño). Este parámetro se incluye por compatibilidad con FAT12/16 aunque FAT32 no lo utiliza. Su valor es siempre cero. | |
15h | 1 | Byte descriptor ("Media descriptor byte"). El campo se mantiene por compatibilidad con FAT12/16, pero FAT32 no lo utiliza. | |
16h | 2 | Sectores ocupados por cada FAT del volumen. Se mantiene por compatibilidad con FAT12/16. En FAT32 este valor es cero. | |
18h | 2 | Contiene el parámetro "Sectores por pista" para unidades que utilizan INT 13h. | |
1Ah | 2 | Número de cabezas. Este dato y el anterior se refieren a los valores lógicos utilizados durante el formateo de alto nivel del volumen. Por ejemplo, en un disquete HD 3.5" este valor es 2. | |
1Ch | 4 | Número de sectores ocultos en el volumen. Se refiere al número de sectores de la unidad (disco) que preceden el inicio del volumen. Es decir los sectores existentes desde el MBR y el VBS del volumen. Este dato es utilizado en los dispositivos que utilizan la interrupción 13h, por la secuencia de carga para calcular el desplazamiento absoluto ("offset") de la información contenida en el volumen. En dispositivos no particionados este volumen es cero. | |
20h | 4 | Número de sectores en el volumen. | |
24h | 4 | Número de sectores en FAT. Indica el número de sectores ocupado por cada FAT del volumen. Este valor, junto con el número de FATs y los sectores ocultos, permiten determinar la posición del directorio raíz (que está inmediatamente después). También puede determinar donde empieza el área de datos sabiendo el tamaño del referido directorio raíz (el número de entradas que tiene). | |
28h | 2 | Semáforos adicionales ("Extended flag"). Señala determinados aspectos de cómo se realiza la copia de seguridad (duplicado) de la FAT. | |
2Ah | 2 | Versión del sistema de ficheros ("Filesystem version"). Un valor previsto para futuras ampliaciones del sistema FAT. | |
2Ch | 4 | Número del cluster raíz ("Root cluster number"). Número del primer cluster del directorio raíz. Generalmente (aunque no siempre) este valor es 2. Veremos en el próximo capítulo ( 8.1.2d) que esta información es vital para el mecanismo de localización de ficheros en el volumen, ya que se utiliza una organización en cadena cuyo comienzo es justamente el directorio raíz. | |
30h | 2 | Número de sector del FSINFO ("File System Information Sector Number") en el área reservada del volumen. El valor típico es 1. Se guarda una copia de la estructura FSINFO en el backup del sector de carga, aunque no es actualizado. | |
34h | 2 | Backup del sector de carga. Un valor distinto de cero señala el número de sector en el área reservada del volumen en la que se ha guardado una copia del sector de carga. El valor típico es 6, no se recomienda ningún otro. | |
36h | 12 | Reservado para futuras expansiones. |
BPB de NTFS | ||
Offset | T | Descripción |
0Bh | 2 | Bytes por sector. |
0Dh | 1 | Sectores por cluster. |
0Eh | 2 | Sectores reservados. |
10h | 3 | Número de copias de la tabla FAT del volumen. Este valor es siempre cero. |
13h | 2 | Máximo de entradas por directorio. No utilizado por NTFS. |
15h | 1 | Byte descriptor (" Media descriptor byte"). |
16h | 2 | Sectores ocupados por cada FAT del volumen. Siempre cero. |
18h | 2 | Sectores por pista. |
1Ah | 2 | Número de cabezas. |
1Ch | 4 | Número de sectores ocultos en el volumen. |
20h | 4 | Número de sectores en el volumen. No utilizado por NTFS. |
24h | 4 | Número de sectores en FAT. No utilizado por NTFS. |
28h | 24 | Total de sectores en el volumen. |
30h | 24 | Número lógico del primer cluster del fichero $MFT. |
38h | 24 | Número lógico del primer cluster del fichero $MFTMirr. |
40h | 4 | Número de clusters por segmento ("Clusters Per File Record Segment"). |
44h | 4 | Número de clusters por bloque de índice ("Clusters per Index Block"). |
48h | 24 | Número de serie del volumen ("Volume seriel number"). |
50h | 4 | Suma de control "Checksum". |
Nota: Los parámetros con desplazamientos en negrita coinciden con los correspondientes campo del bloque de parámetros BIOS de los formatos FAT16 y FAT32.
-
Bloque de parámetros extendidos xBPB. A continuación del bloque de parámetros BIOS sigue un segundo bloque de parámetros extendidos con el siguiente contenido:
xBPB de FAT16 | ||
Offset | T | Descripción |
24h | 1 | Número
del dispositivo físico ("Drive"). Se refiere al
número asignado en la BIOS, donde los dispositivos están numerados
empezando por 00h para el disquete A: y los discos duros a partir de
80h. Generalmente este valor es determinado antes de utilizar
una INT 13h de la BIOS que contiene los servicios de disco y
necesita de dicho valor.
Con independencia de cuantas unidades haya, este parámetro suele ser 00h para los disquetes y 80h en los discos duros, ya que solo es relevante si la unidad es un disco maestro "bootable" 8.1.2c1. |
25h | 1 | Reservado. Siempre cero en FAT16. |
26h | 1 | Firma extendida ("Extended boot signature"). Este valor debe ser reconocido por el Sistema Operativo. En los de Microsoft puede ser 28h o 29h.. |
27h | 4 | Número de serie del volumen (ID), este número es asignado de forma aleatoria durante el formateo para distinguir el volumen de cualquier otro que pudiera existir en la unidad.. |
2Bh | 11 | Nombre del volumen. Inicialmente este campo se destinó a almacenar la etiqueta ("Label") del volumen. Posteriormente, con la aparición de FAT-32, esta información se trasladó al directorio raíz ocupando una de sus entradas. Aquí puede encontrarse la cadena "NO NAME". |
36h | 8 | Identificación del sistema de ficheros utilizado. Según el programa de formateo utilizado, puede encontrarse la cadena "FAT "; "FAT12 ", o "FAT16 ". |
xBPB de FAT32 | ||
Offset | Bytes | Descripción |
40h | 1 | Número
del dispositivo físico ("Drive"): Se refiere al
número asignado en la BIOS, donde los dispositivos están numerados
empezando por 00h para el disquete A: y los discos duros a partir de
80h. Generalmente este valor es determinado antes de utilizar
una INT 13h de la BIOS que contiene los servicios de disco y necesita de dicho valor.
Con independencia de cuantas unidades haya, este valor suele ser 00h para los disquetes y 80h en los discos duros, ya que solo es relevante si la unidad es un disco maestro "bootable" 8.1.2c1. |
41h | 1 | Reservado. Siempre cero en FAT32. |
42h | 1 | Firma extendida ("Extended boot signature"). En los sistemas Microsoft puede ser 28h o 29h. Su presencia señala la existencia de los tres campos que siguen |
43h | 4 | Número de serie del volumen (ID), este número es asignado de forma aleatoria durante el formateo para distinguir el volumen de cualquier otro que pudiera existir en la unidad.. |
47h | 11 | Nombre del volumen. Inicialmente este campo se destinó a almacenar la etiqueta ("Label") del volumen. Posteriormente, con la aparición de FAT-32, esta información se trasladó al directorio raíz ocupando una de sus entradas. Aquí puede encontrarse la cadena "NO NAME". |
52h | 8 | Identificación del sistema de ficheros utilizado. Aquí aparece la cadena "FAT132 ". |
-
Código de carga del volumen VBC ("Volume Boot Code") o "Bootstrap
code". A continuación del xBPB sigue un bloque de
código de tamaño variable según el sistema, utilizado para iniciar la carga del Sistema Operativo.
Por ejemplo, si la partición tiene instalado Windows NT, este código es
responsable de localizar un ejecutable de nombre Ntldr; cargarlo y transferirle el control.
Este código es alcanzado mediante la instrucción de salto colocada en los 3 primeros bytes del sector, la cual es llamada a su vez por el MBC ("Master Boot Code") del sector de arranque. Pero solo en el caso de que el volumen corresponda a una partición primaria activa. En otros casos este código no se utiliza. Sin embargo, siempre contiene algo. Incluso en un disquete no cargable ("no bootable") formateado sin la opción "Sistema", contiene el código responsable de mostrar el conocido mensaje "Non-system disk or disk error".
Al igual que el resto de la estructura lógica del volumen, el VBC es instalado durante el formateo de la unidad (al menos un contenido básico). Posteriormente la instalación del Sistema Operativo puede alterar su contenido instalando la rutina adecuada para llamar al Sistema. Pero también puede ser instalado con herramientas específicas. Por ejemplo, con la utilidad sys.com en MS-DOS (ver nota ). - Firma del sector de carga ("Boot record signature"). Como en el MBR, los dos últimos bytes del VBS contienen los caracteres 55h, AAh.
El código maestro de carga MBC y el de carga del volumen VBC, suelen ser
favoritos de los creadores de virus para instalar allí sus versiones
modificadas. Aparte de la utilización de herramientas comerciales
específicas (antivirus) que siempre son preferibles, puede inspeccionarse su
contenido en busca de síntomas sospechosos. Por ejemplo el código de
los Sistemas Operativos microsoft suele contener las cadenas "Invalid system
disk.
"; "Disk I/O error.
"; "Replace the disk, and then press any
key
"; "Non-System disk or disk error
"; "Replace and press any key when
ready.
" y "Disk Boot failure
". En el caso de sistemas formateados con
Windows NT/2000, las cadenas pueden incluir: "BOOT: Couldn't find
NTLDR.
"; "I/O error reading disk.
" y "Please insert another
disk
". En consecuencia, su ausencia o modificación
sustancial puede ser síntoma de infección o corrupción.
Nota: La utilidad sys.com del DOS, instala el código adecuado para seguir la carga del Sistema en el VBC del volumen (típicamente un disquete o una partición primaria de un disco). Pero dado que el VBC es un mero bootstrap, necesita que haya algo que cargar. Es decir, los ejecutables correspondientes. A tal efecto, copia a la partición dos ficheros ocultos o "de sistema": IO.SYS y MSDOS.SYS, así como el intérprete de comandos COMMAND.COM (shell del Sistema), que es el que finalmente recibe el control. A partir de MS-DOS 6.x, se instala también el fichero DRVSPACE.BIN, una utilidad que maneja unidades comprimidas de disco.
Por ejemplo, un disquete HD de 3.5" recién formateado aparece con un espacio libre de 1.457.664 bytes. Después del comando sys A:, el comando dir A: muestra la siguiente salida:
El volumen de la unidad A no tiene etiqueta
El número de serie del volumen es 183A-1058
Directorio de A:\
COMMAND COM 96.306 05/05/99 22:22 COMMAND.COM
1 archivos 96.306 bytes
0 directorios 1.068.032 bytes libres
En este caso los 293.326 bytes perdidos (1.457.664 - 96.306 - 1.068.032), corresponden a tres ficheros ocultos:
DRVSPACE.BIN 69.632 bytes usados (69.143 bytes)
IO.SYS 222.720 bytes usados (222.390 bytes)
MSDOS.SYS 512 bytes usados (6 bytes)
más 462 bytes adicionales, ya que el comando DOS muestra el tamaño real del fichero, no el espacio ocupado, y en este caso, COMMAND.COM ocupa realmente 96.768 bytes.
§3 Ejemplo
A continuación se muestran dos ejemplo del volcado ASCII del sector de arranque VBS de un volumen, utilizando la utilidad debug del DOS ( DEBUG).
Nota: recuerde que los parámetros de más de un byte están almacenados en forma de palabras invertidas ("Back-words") o "Little endian".
El primero corresponde a un disquete de 3.5" HD con formato FAT16 del MS-DOS 3.30, que no contiene ninguna otra información o estructura que la proporcionada por la utilidad format.com.
1779:0100 EB 34 90
49 42 4D 20 20-33 2E 33 00 02 01 01 00
.4.IBM
3.3..... |
El segundo es análogo al anterior, aunque después del formateo de bajo nivel, al VBS del volumen se le ha añadido la información necesaria para cargar el Sistema mediante la utilidad sys.com ya comentada .
1779:0100 EB 3C 90
2C 26 43 6F 33-49 48 43 00 02 01 01 00
.<.,&Co3IHC..... |
El extraño identificador (OEM ID) ",&Co3IHC" corresponde a la versión de DOS incluida con Windows 98 SE. Esta versión de MS-DOS se identifica a sí misma como Windows 98 [version 4.10.2222].
[1] Como puede verse, un mismo descriptor está asociado a distintas capacidades. En cualquier caso esta entrada es una herencia del viejo sistema FAT-16 de MS-DOS y no es utilizada en los nuevos sistemas. Por ejemplo Windows 2000.
[2] Recuerde que los parámetros de más de un byte están almacenados en forma de palabras invertidas ("Back-words") o "Little endian" ( E2.2.6a), y como es usual, los desplazamientos empiezan por cero desde el comienzo del sector. El primer byte tiene desplazamiento cero. El último 511 (1FFh).