Moving Grave nº4:(MG#_4.X01):22/06/1996 << Back To Moving Grave nº 4
**** Ocultando VIRUSES en los DISCOS **** ───────────────────────────────────────── Muchas veces, cuando se escribe virus para boot sector o para TP se tienen que guardar datos indeflectiblemente, estos datos pueden ser: A) El antiguo BOOT SECTOR, para luego poder bootar sin problemas. B) La Tabla de Particiones, sin esto el HD es DIFUNTO. C) Si el largo del virus supera los 512 bytes ocupara mas de 1 sector en el disco. A partir de estas razones uno se pregunta, donde puedo guardar los datos o el codigo sobrante del virus????, existen varias soluciones posibles. Una de estas soluciones es hacer un buen Stealth de DISCO, para poder ocul- tar el sector donde se aloja el "codigo" de los tipicos fisgones...:-). Otra forma es guardarlos en lugares donde es raro acceder, o al menos es raro pensar que ahi se pueda encontrar un virus, estos lugares se pueden encon- trar en el ROOT o los dichosos CLUSTERS, a continuacion se describe como hacer para poder marcar un cluster, para que el virus use ese espacio reservado. Reservando Espacio En El Disco (MARCANDO BADs CLUSTERS) ─────────────────────────────────────────────────────── Para recordar un poco de que se trata la FAT desimos que basicamente se trata de un "mapa" de disco, considerado dividido en cluster. La FAT es una array de tantas celdas como cluster integran el disco; en cada celda se alma- cena un puntero que indica que cluster sigue a correspondiente a la celda en la secuencia. Nótese que de ninguna manera se indica en la FAT a que archivo pertence un cluster, simplemente se codifican cadenas. Supongamos que el primer cluster de un archivo es el 2033 (surge de la en- trada de directorio que define al archivo). La posicion 2033 de la FAT, a su vez, contiene el valor 3854; esto indica que el archivo incluye los clusters 2033-3854 en ese orden. Un valor de -1 (FFF o FFFF en Hexadecimal) indica el fin de la cadena, es decir, el ultimo cluster del archivos. El almacenamiento del archivo en el disco se deduce, entonces, partiendo de la entrada de directorio y recorriendo la secuencia en la FAT. Naturalmente, no todos los clusters pertenecen a algun archivo. Los clus- ters libres son marcaados en la FAT con CERO; cluster no ocupados, pero cuyo uso esta prohibido (en general por corresponder a sectores malos) se indenti- fican con los numeros de -2 a -7 (FF8 a FFE o FFF8 a FFFE). Como todos saben existen 2 tipos de FAT, las de 12 bytes y las de 16 bytes, para el marcado las de 12 bytes usan un formato muy incomodo, que es el de usar un byte y medio, esto es suficiente para codificar el contenido de cada celda de la FAT, ahora las de 16 bytes usan dos bytes. Manos a la obra... ~~~~~~~~~~~~~~~~~~ En el marcado de los BAD CLUSTERS, en los Floppies, pueden ocurrir 2 casos (Recuerden que las FAT de los FD son de 12 bytes) : Caso 1: ─────── El Cluster defectuoso es impar, en cuyo caso tendremos un codigo FF7 en primer lugar combinado con cualquier otro codigo XXX asociado al correspon- diente cluster par, lo que codificado, aparecera en la FAT: ──────────────────────────────────────────────────────────── F7 xF XX ──────────────────────────────────────────────────────────── Caso 2: ─────── El Cluster defectuoso es par, en cuyo caso tendremos un codigo cualquiera XXX en primer lugar, combinado con un codigo FF7 en segundo lugar, lo que apa- recera codificado en la FAT como: ──────────────────────────────────────────────────────────── XX 7x FF ──────────────────────────────────────────────────────────── Seguramente estaran viendo esto con cara rara, por eso e aqui una imagen de como se veria un sector malo dentro de la FAT (esto fue sacado de un disco de alta de 3 ½): ┌───────────────────┐ │ Relative Sector 1 │ ┌─────────┬──┬──┬──┬──┬──┼──┬──┬──┬─┬──┬──┬──┼──┬──┬──┬──┬──┬────────────────┐ │Direccion│01│02│03│04│05│06│07│08│-│09│10│11│12│13│14│15│16│En codigos ASCII│ ├─────────┼──┴──┴──┴──┴──┴──┴──┴──┴─┴──┴──┴──┴──┴──┴──┴──┴──┼────────────────┤ │00000000:│F0 FF FF 03 40 00 05 60 - 00 07 80 00 FF AF 00 0B│....@..`........│ │00000010:│C0 00 0D E0 00 0F 00 01 - FF 2F 01 13 40 01 15 60│........./..@..`│ │00000020:│01 17 80 01 19 A0 01 1B - C0 01 1D E0 01 1F 00 02│...............│ │00000030:│21 20 02 23 40 02 25 60 - 02 27 80 02 29 A0 02 2B│! .#@.%`.'..)..+│ │00000040:│C0 02 2D E0 02 2F 00 03 - 31 20 03 FF 0F 00 00 00│..-../..1 ......│ │00000050:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000060:│00 70 FF F7 0F 00 00 00 - 00 00 00 00 00 00 00 00│.p..............│ │00000070:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000080:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000090:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │000000A0:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │000000B0:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │000000C0:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │000000D0:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │000000E0:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │000000F0:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000100:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000110:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000120:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000130:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000140:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000150:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000160:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000170:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000180:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │00000190:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │000001A0:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │000001B0:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │000001C0:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │000001D0:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │000001E0:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ │000001F0:│00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00│................│ └─────────┴─────────────────────────────────────────────────┴────────────────┘ Pero esto no es suficiente como para poder entender la tabla hexadecimal anterior, asi que la siguiente tabla, la muestra en formato FAT (segun el DISK EDITOR v8.0 de NORTON) ┌──────────────────────────────────────┐ │ Relative Sector 1 / Clusters 2 - 340 │ ╔═══════════════════════════════════════════════════════════════╗ ║ Lista de clusters asignados a los archivos ( 2 BAD SECTORS ) ║ ╠═══════╤═══════╤═══════╤═══════╤═══════╤═══════╤═══════╤═══════╣ ║ │ │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 ║ ║ <EOF> │ 10 │ 11 │ 12 │ 13 │ 14 │ 15 │ 16 ║ ║ <EOF> │ 18 │ 19 │ 20 │ 21 │ 22 │ 23 │ 24 ║ ║ 25 │ 26 │ 27 │ 28 │ 29 │ 30 │ 31 │ 32 ║ ║ 33 │ 34 │ 35 │ 36 │ 37 │ 38 │ 39 │ 40 ║ ║ 41 │ 42 │ 43 │ 44 │ 45 │ 46 │ 47 │ 48 ║ ║ 49 │ 50 │ <EOF> │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ <BAD> │ <BAD> │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 ║ ║ 0 │ 0 │ 0 │ 0 │ 0 │ │ │ ║ ╚═══════╧═══════╧═══════╧═══════╧═══════╧═══════╧═══════╧═══════╝ Unas de las cosas apreciables en esta ultima tabla es que supuestamente faltarian los cluster 1 y 2, pero acuerdense que esos 3 bytes estan ocupados por la identificacion de la FAT, para este caso tendran los bytes "F0 FF FF". Ahora bien, sigamos con nuestro trabajo, como podran observar, en esta y la tabla anterior aparecen dos sectores malos, los cuales, pertenecen a los clusters 66 y 67 del disco. OK!, estos supuestos sectores malos son lo que reserve para el virus que he de colocar en el disco, la cuestion ahora es como encontrar a que sectores reales del disco pertenece esas ubicaciones en la FAT. A los cluster ya los nombramos, ahora falta saber su ubicacion real en el disco, pero antes tenemos que pasar por otro lado antes de poder leerlo con la INT 13h. Obteniendo un Sector Absoluto o Relativo. ───────────────────────────────────────── Para poder saber a que sector relativo pertenece un cierto número de clus- ter solo tendremos que hacer lo siguiente: 1) leer el boot sector 2) leer el numero de cluster a buscar en la FAT 3) Hacer un pequeño calculo. 1) Suponiendo ahora que nuestro BOOT SECTOR nos mostrara lo siguiente : OEM ID: IBM_OS/2 Bytes per sector: 512 Sectors per cluster: 1 <── Necesario Reserved sectors at beginning: 1 FAT Copies: 2 <── Necesario Root directory entries: 224 <── Necesario Total sectors on disk: 2880 Media descriptor byte: F0 Hex Sectors per FAT: 9 <── Necesario Sectors per track: 18 <── Necesario Sides: 2 <── Necesario Special hidden sectors: 0 <── Necesario ( si es Rigido ) Big total number of sectors: (Unused) Physical drive number: 0 Extended Boot Record Signature: 29 Hex Volume Serial Number: 0E4E1ECC Hex Volume Label: COEAC GROUP File System ID: FAT12 2) Vamos a averiguar la ubicacion del cluster 3 3) Comenzamos los calculos: a) obtenemos la cantidad de sectore que hay antes del 1º cluster: B = 1 Lf = Sf * Fc Lr = (Re * 32) / Bs Cts = B + Lf + Lr Siendo B : Boot Sector. Sf : Cantidad de sectores por copia de FAT ( 9 en este caso ). Fc : Cantidad de Copias de la FAT. Lf : Longitud de las 2 copias de la FAT. Re : Cantidad de entradas del ROOT ( 224 en este caso ). Bs : Cantidad de Bytes por Sector. Lr : Longitud del ROOT Cts : Cantidad Total de Sectores. b) Calculamos el sector relativo al fin: 1) Restarle 2 al numero de cluster a buscar. 2) Multiplicamos el Resultado por la cantidad sectores por cluster que son indicados en el BOOT SECTOR (1 en este caso) 3) A este valor hay que sumarle la cantidad de areas logicas de datos, o sea Cts. c) Calculemos ahora si!, con numeritos...jejeje..: B = 1 sectores Lf = 18 sectores Lr = 14 sectores CTS = B + Lf + Lr => CTS = 1 + 18 + 14 = 23 Sectores SRelativo = ((3 - 2) * 1) + CTS = 23 en resumen el cluster 3 se encuentra en el sector relativo Nº3. En el camino, de pasada, cuando lo probe esto en el HD (Hard Disk) me en- contre con el problema de que el sector relativo que yo sacaba mediante este calculo no me correspondia a lo que verdaderamente me marcaba el viejo NORTON, asi que obsserve que le faltaba agregar algo a CTS para que me diera el maldi- to sector, esto que me faltaba era lo que se conoce como "Special hidden sec- tors", que es variable para las diferentes capacidades de discos rigidos, al final CTS me quedo como esto: CTS = CTSOld + Shs Shs = Special hidden sectors. Otras de las cosas que puede observar y que uds. por ahi les surge la mis- ma duda, es que si en el calculo del sector relativo del disco la TP no entraba en juego, en cierta forma pareciera que no, pero eso que aparece como Shs es la misma TP, bah!, en realidad diriamos que es la cantidad de sectores por CARA que tiene el disco. Obteniendo la ubicacion de ese "sector" en el disco ─────────────────────────────────────────────────── Hasta el momento todo fue calculos para poder encontrar el sectore relati- vo, ahora el asunto es hacer el calculo para poder leer ese sector en el forma- to PISTA, CARA, SECTOR. Bien, esto se hace por medio de una sencilla deduccion matematica: CTS/(Cc * Spt) = Pista (cts - (pista * (Cc * Spt))) = Resto SI (Resto) < Spt ENTONCES ────┐ (Resto/Spt)+1 = Caras │ (Resto-(Caras*Spt)) + 1 = Sector <─────────┘ Siendo Cc : Cantidad de caras que tiene el disco. Spt : Sectores por cara del disco. Well, y ahi tienen el calculito de donde encontrar el sector MALO, jejeje!, espero que esta parte de la nota les halla sido de su agrado... NOTA: ───── En el camino de la investigacion hice cagar varios disco (SHIT!), para poder llegar a esto, pero bue', lo que les queria comentar era que esto tipo de ocul- tacion puede llegar a ser buena hasta un cierto punto, ya que si en cualquier caso donde a uno le aparezca un sector malo en el disco, la primera reaccion sera pasarle el fuckin NDD, pero OOOHHH!, sorpresa este pasara sobre el sector MALO reconociendolo como lo mismo. Ahora con los que tengo dudas es con el CALIBRATE de NORTON o el maldito del SCANDISK (wwwwwwwwwaaaaaauuuuuuuu, QUE MIEDO!) del DOS/NORTON, je, asi que cualquier novedad cuando lo esten probando solo tienen que llamar al TELEFONO que aparece abajo y decirme lo que les sucedio....ok?. Otro lugar NO TAN misterioso del DOS ( EL ROOT ) ──────────────────────────────────────────────── Como uds. sabran (eso creo) el DOS tiene recervados unos cuantos sectores para el ROOT (directorio RAIZ), donde apareceran solo los files o los subdirec- torios que este posea, ya que los directorio que estan dentro de otros o los files que estan dentro de otro directorio, son escritos en los cluster directa- mente; esta cantidad de sectores asignados no aparece en ningun lado, sino que tambien se tiene que hacer un calculo que es el siguiente: LARGO DEL ROOT = (Ce * 32) / 512 Ce = Cantidad de entradas del ROOT (esto se saca del ROOT) Para mas informacion con respecto al ROOT consigance la MG#1 y listo. Con esto sera suficiente para encontrar el TOTAL de sectores, ahora bien, lo que se conoce como cantidad de entradas es en si la CANTIDAD DE FILES que el ROOT puede almacenar, PERO (no se vallan que ahora biene lo mejor) esto se cumple con una condicion!, que los file tienen que tener 1 byte de longitud para poder llenar TODOS esos sectores, eso es practicamente imposible de cum- plir!, o sea que me sobra 1 o mas sectores en esa parte del disco. Una de las ventajas que tiene de hacer esta cuenta es la siguiente, que todos los sectores que estan para el ROOT, tienen la misma cantidad de entradas por sector, p/ej: EN UN DISCO DE ALTA DENSIDAD DE 3 ½ FORMATEADO A 1.44 Mb LA CANTIDAD DE EN- TRADAS POR DIRECTORIO SON DE 224, en cuyo disco tenemos solamente 10 files que me ocupen casi todo el espacio, hagamos la cuenta : Entradas por SECTOR = 512 / 32 = 16 entradas (Esto es fijo siempre) Solo tenia 10 files o sea que esto ocupa solo 1 SECTOR Ce = 224 - 10 ( 10 es la cantidad de files) Sectores que sobran = (Ce * 32) / 512 Asi se podria hacer!, pero realmente es medio al pedo, porque suponganse que el user borre los files y coloque en vez de 10, ponga 40, chau VIRUSES, y eso si realemente seria una lastima. Por es recomendable usar el ultimo sector asignado para el ROOT, ya que ahi nunca llega a llenarse de información (acuerdense que para que esto suceda sencillamente tendria que haber 224 files, para este caso). BUENO CHICOS! SE ACABO EL DULCE, asi que esperen que en la proxima edicion volveremos con mas... Realmente espero que este texto les sea de utilidad, y.. no quisiera encon- trar en mi disco rigido un "BAD CLUSTER", jejejeje... bye VIRUCKERS!. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -/ Creatures Of Electronic Anti Christ /- Written by DESTROYER for MOVING GRAVE MAGAZINE Nº 4 in HALLS OF THE DAMNED BBS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=