SECCION MANUALES 10 PAGINAS A4 TIMES NEW ROMAN 14 FORMATO DOC,RTF, TXT,WD1,ACI * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *MATERIAL INFORMATIVO * * * * * * Escrito por Flavio Stroppi * * para el LUGCOS * * el 03/03/01 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *LA INFORMACION DEBE SER LIBRE * FORMATEO DE MEDIOS DE ALMACENAJE DE DATOS El formateo es el proceso necesario de preparacion del medio antes de empezar a guardar datos en forma l¢gica en el mismo. En efecto,los datos se deben ordenar en una forma l¢gica para que,llegado el momento de recuperarlos ,se lo pueda hacer sin perder informaci¢n. En la operaci¢n de formateo se deben tener en cuenta una serie de factores tanto de organizaci¢n de la informaci¢n como inherentes al hardware utilizado. La densidad de la informaci¢n almacenada depende de este £ltimo factor porque cuanto mas preciso sea el instrumento de lectura / escritura tanto mas informaci¢n podr‚ colocar en el mismo espacio f¡sico. En el ordenamiento de la informaci¢n para su almacenaje se colocan datos extras generalmente al principio del paquete ,datos llamados ùde cabeceraù donde se indica la posici¢n de la informaci¢n en si en el medio y tambien las t‚cnicas de lectura/escritura a utilizar junto los par metros f¡sicos del medio(longitud de dato ,sectores ,separaci¢n,sincronismo,etc) La forma en que se escriben estos datos,como as¡ tambien la cantidad de bytes que los componen ,estan determinas en forma totalmente arbitraria y agrupadas en un conjunto de normas denominadas standard para escritura/lectura de disco que son ,la mayor¡a,adaptaciones mas o menos elaboradas de las normas desarrolladas por los creadores de los primeros sistemas operativos y dispositivos de almacenaje. Luego los fabricantes de hardware fueron puliendo y adaptando estos principios a sus productos,surgiendo normas estandard ùde compromisoù ya que la tecnolog¡a existente actualmente permite almacenar mucha mas informaci¢n en el dispositivo que la que almacena usando las normas existentes. Si bien cuando uno modifica la forma en que graba y recupera la informacion esta ïsacando de normaù al sistema y aislandolo de el resto en cuanto a lo que respecta compartir informaci¢n tambie est  optimizando lo existente para un funcionamiento mas eficiente,y a veces sobretodo en sistemas grandes y susceptibles de ser invadidos,consiguiendo un factor de seguridad extra ya que un controlador de floppy modificado para que lea solo los discos escritos en ese sistema no podr  ni leer ni escribir un disco en la forma standard por lo que se cerrar¡a una via de entrada de virus y de salida de informaci¢n no autorizada. En efecto todo disco escrito que se saque de la empresa no podr¡a ser leido por m quinas comunes que no dispongan de la rutina especial de descifrado,arrojando un error de tipo ùmedio no v lidoù que har¡a creer en un da¤o en el disco usado para hurtar la informaci¢n. Como a los efectos operativos la disquetera no difiere en absoluto de las usadas en las normas standard(es la misma y los discos tambien) ,manteniendo la modificaci¢n en secreto e instalando a la salida de la empresa marcos de puerta con carteles del tipo ùDestruye disketesù por donde saldr n los empleados se consigue una protecci¢n muy efectiva contra robos de informaci¢n y ataques al soft interno por parte de empleados poco escrupulosos. El formateo se realiza preparando el disco dividiendolo en una determinada cantidad de sectores accesibles individualmente y que contendran un n£mero determinado de bytes de datos que se escribir n y leer n en bloque. Cuanto mas peque¤os sean estos bloques,mas f cil ser  el acceso a un determinado byte de datos,pero como es necesario almacenar los datos para identificar a cada uno de estos bloques y estos datos ocupan espacio ,cuanto mas chicos sean los bloques menos podremos poner en el disco. Esto hace que se deba elegir entre facilidad de acceso o cantidad de datos(cuanto mas r pido el acceso menos datos tendr‚ ). Para formatear un disco se puede usar una funci¢n de la BIOS que permite formatear una pista entera por vez:se encuentra en la interrupci¢n 13H y es la n£mero 5,debiendose aportar los siguientes datos: AH = 5 (funci¢n ) AL = N£mero de sectores por pista CH =N£mero de pistas DH = N£mero de cabeza DL = N£mero de drive ES:BX = Direcci¢n de bufer donde se encuentran los datos de los identificadores de cada sector. Son 4 bites por sector a saber: C = Nro de pista o cilindro H = Nro de cara o cabeza R = Nro de registro o sector N= numero de bytes por sector ( 0 = 128 bytes ,1 = 256 bites, 2 = 512 bytes, 3 = 1024 bytes ,4 = 2048 bytes y asi sucesivamente) Se deben colocar en el bufer tantos grupos de 4 bytes como grupos de sectores se hayan especificado en AL Los sectores se graban uno a continuaci¢n del otro asociandoseles los bytes identificadores segun se van encontrando en el bufer . Aparte el controlador de disco necesita saber una serie de datos localizados en la tabla de par metros base. Estos son valores f¡sicos del dispositivo como el tiempo de carga y descarga,tiempo de arranque del motor ,de estabilizacion de las rpm y de parada,longitud del espacio entre sectores (GAP),la longitud de los datos (espacio ocupado por los bytes). Todos estos datos son modificables con lo que tendremos una gran cantidad de valores a elecci¢n para realizar el proceso de formateo pudiendo poner mas o menos datos en el disco. Sin olvidar que todo valor que se aparte de la norma estandard har  al medio de almacenaje solo legible por nuestro sistema y no por los dem s. Si el fin que se persigue,ademas de guardar mas datos es salvanguardarlos de miradas extra¤as esta es una buena medida(el medio formateado con valores de sectores cambiados provocar  un error de lectura del tipo ùsector no se encontr¢ ;medio no v lidoù) El formato t¡pico de un disco de 5 1/4 doble densidad es (a modo de ejemplo;mayores y completos datos pueden encontrarse en los manuales de los dispositivos de almacenaje y en las WEB de los fabricantes) en DOS : Sectores por pista : 9 bytes por sector : 512 RUTINA EN TURBO C Se puede usar una funci¢n llamada biosdisk con los argumentos que deberian tomar los registros cuando se llame a INT 13H. biosdisk ( int /DL/ int /DH/ int /CH/ int /CL/ int /AL/ char *(zona de memoria apuntada por ES:BX) ) define leer_sector(nd,nh,nt,ns,nss,buf) biosdisk(2,nd,nh,nt,ns,nss,buf ) define write_sector(nd,nh,nt,ns,nss,buf) biosdisk(3,nd,nh,nt,ns,nss,buf) define format_track(nd,nh,nt,nss,buf) biosdisk(5,nd,nh,nt,1,nss,buf) etcetera..... -.- (mas informaci¢n en el manual de Turbo C;esto no es un curso de programaci¢n ; es tan solo un poco de informaci¢n, para ùsaber païnde rumbear....ù ) -.- Para ocultar sectores de modo que el DOS no los reconozca se pueden usar diversas t‚cnicas. La mas utilizada consiste en asignar a uno de los sectores un n£mero superior al n£mero m ximo de sectores de la pista:en este caso se rellena la tabla de datos de los sectores con valores estandar y se modifica el valor de R del identificador de uno de los sectores. Otra forma es introducir uno o varios sectores con el tama¤o cambiado lo que har  que el dos devuelva errores en la lectura . En este caso se modifica la tabla de datos del sector,teniendo en cuenta que el n£mero de bytes no debe sobrepasar la capacidad total de la pista,por lo que el valor debe estar por debajo del valor estandard (4608 bytes en FD de 5 1/4). Tambien se debe tener presente que el tama¤o del sector es un n£mero m£ltiplo de 128. Una tercer variante es agregar sectores :El n£mero m ximo de bytes a grabar en una pista es fijo y este espacio es compartido por la informaci¢n en s¡ y los datos utilitarios(,forma del formateo ,sincronismo,espacio de separaci¢n entre sectores (GAP),etc). Para agregar un sector mas hay que disminuir el espacio ocupado por el resto de la informaci¢n (reduciendo el n£mero de bytes) o bien reduciendo el espacio entre sectores(GAP). El espacio de separaci¢n entre sectores (GAP) se deja como margen de seguridad para evitar que estos se solapen entre si y ocupan un espacio importante en la capacidad total del medio de almacenaje. Ademas de este espacio tambien se agrega otro entre la cabecera y los datos reales . Estos espacios de seguridad ocupan aproximadamente un 25% del espacio total disponible . La longitud del GAP est  especificada en la tabla de par metros con dos valores uno el GTL (maxima longitud posible del GAP) y DTL(longitud de los datos). Estos valores son 40H y 0FFH ;En lectura y escritura se usa un valor menor para poder comenzar a leer antes de comience la informaci¢n del sector;este valor es 2AH. Como el espacio ocupado por cada sector es la suma de GTL y DTL tendremos un espacio total de 13FH(319) lo que en total para los nueve sectores hace un valor de 2871. Si queremos introducir un sector mas deberemos repartir este £ltimo valor entre todos ;lo que dar¡a un valor de de 11FH(287) para cada sector con lo que podremos reducir el GAP hasta 20H.En lectura se puede reducir un poco mas hasta 16H. Al reducir el GAP el sistema se hace mas sensible a las variaciones de velocidad de los discos por lo que se aumenta el riesgo de solapar datos. (En las m quinas modernas el factor de impresici¢n ha sido muy mejorado por lo que no deberemos preocuparnos mayormente por este problema). Una tabla de parametros de disco standard es como la que sigue (V lida para floppys de 5 1/4 y DD ,ya obsoletos,pero la t‚cnica es la misma para los otros dispositivos tanto flexibles como r¡gidos) La tabla de par metros del disco es : BYTE USO 0 tiempo de paso entre pistas y tiempo de descarga de la cabeza 1 Tiempo de carga de la cabeza y modo DMA 2 Tiempo de espera para el motor 3 Tama¤o de los sectores (1=128 2=256,etc) 4 N£mero del £ltimo sector 5 Largo GAP lectura/escritura 6 Longitud de datos 7 Longitud del GAP para operaciones de formateo 8 Valor del dato a almacenar 9 Tiempo de asentamiento de la cabeza 10 Tiempo de arranque del motor Como se desprende de observar la tabla anterior ,los £nicos bytes a modificar son los n£mero 5 y 7 Con lo que quedar¡a as¡: tabla_discodb OCFH db 2 db 25H db 2 db 10 (el valor en DOS es 9 para 5 1/4 y DD) db 16H(el valor DOS es 2AH) db 0FFH db 20H(el valor DOS es 40H) db 15 db 4 Los valores modificados de la tabla original son los mostrados en negrita Si tenemos en cuenta todos los c lculos anteriores nos resulta una longitud de datos de 0CFH(con un GAP de 40H) (207) si 0FFH =255 y equivale a 512 bytes entonces CFH equivaldr  a 414 bytes . Se puede especificar este tama¤o pero solo si accedemos directamente al controlador FDH(en la operaci¢n de formateo habr  que especificar un valor de N = = y DTL = 414) Pero para poder usar las interrupciones de la bios deberemos buscar un valor mas estandard;el valor mas pr¢ximo es de 256 bytes por sector. Si escribieramos la totalidad de la pista podr¡amos poner 6250 bytes,si en DOS usamos 9 sectores tendremos 694 bytes para GAP,cabecera y datos. Si restamos los 512 bytes que usaremos de datos nos queda una diferencia de 182 bytes usados por el GAP y la cabecera. Por cada sector que agreguemos deberemos sumar estos 182 bytes al n£mero de bytes de datos . Si a¤adimos un solo sector de 512 bytes podremos repartir los 694 bytes en 4 sectores descontandole a cada uno 173 con lo que nos quedar n 339 bytes . Para que quede un valor standard deberemos descontar 256 de cada uno,haciendo un total de 1024 bytes .Ahora si quitamos los 694 del nuevo sector nos quedan 330 bytes que podremos aprovechar para otro sector de 128 bytes. Con lo que nos quedar¡an 11 sectores de los siguientes tama¤os: 1 de 128 bytes 4 de 256 bytes 6 de 512 bytes. En Turbo C se podr¡a escribir: format_ldatos mov ax,11 mov dx,512 call format_prep mov cx,4 mov dx,256 formatld_lpmov ax,cx mul 4 mov di,ax mov byte ptr es:(bx + di + 3 ),dx loop formatld_lp mov dx,128 mov byte ptr es :(bx+3),dx call format_track .... Como por medio del dos no podemos leer sectores individuales del disco deberemos proveernos de otro medio para hacerlo como por ejemplo algunas rutinas que proporciona el propio DOS . En efecto se puede utilizar la funci¢n 2 de la interrupci¢n 13H del BIOS o la interrupci¢n 25H del DOS . En Turbo C tenemos absread que usa la interrupci¢n del DOS y biosdisk que reproduce las funciones de la interrupci¢n 13H int absread(int drive,int numsects,int sectnum,void * buf) int biosdisk(2,int drive,int head ,int track,int sector,int nsects,void *buf) Cuando querramos leer un sector formateado en forma no standard obtendremos la informaci¢n de la forma de formateo de la tabla de par metros del disco. Esta tabla no ser  la misma para todas las pistas y deberemos conservarla en el propio programa. Cuando recuperamos la tabla deberemos hacer: 1)Modificar el valor del vector 1 EH (direcci¢n de la tabla de parametros originales)para que apunte a la nueva tabla.Posteriormente se deber  redireccionar nuevamente a la tabla original para poder leer el resto de los sectores de disco. 2)Ejecutar una rutina de leer sectores .(Deberemos dar los n£meros de sector correcto contenidos en la cabecera de sector ....si no nunca los encontraremos) Como dije anteriormente la cabecera es un conjunto de bytes situado delante del bloque de datos del sector y contiene fundamentalmente 4 bytes que son los n£meros de pista ,cara ,sector y longitud de sector;estos 4 bytes forman el ID del sector (una vez formateada una pista,el sistema busca los sectores guiandose por el ID contenido en la cabecera). Si se le da a la rutina una ID diferente a la existente no se encontrar  el sector. Como se ha visto es relativamente f cil modificar los par metros para poder agregar informaci¢n oculta o poder transportar mucha mas informaci¢n que la nominal ,recuperable solo por quien conozca la rutina correcta. .......Como tambien para posicionar programas, ocultos o no ,que una vez cargados realicen diversas acciones en el sistema con fines solo limitados por el ingenio del creador. Esta informaci¢n es forzosamente incompleta,como dije antes no es un manual de Turbo C,es solo informaci¢n que permitir  escribir programas para utilizar eficientemente la tecnolog¡a disponible obteniendo mas de lo mismo. Por favor no la utilice para difundir virus,troyanos y otras boludeces propias de estos tiempos plagados por frustrados cybern‚ticos......Gracias. ***************************************************NOTA MUY IMPORTANTE Se permite la libre copia,distribuci¢n,etc en todo o parte por cualquier medio y forma mencionando al grupo y al autor. ******************************************LA INFORMACION DEBE SER LIBRE