google translator

jueves, 8 de marzo de 2012

Cargando tu dispositivo... y divirtiéndote


Al hilo de mi anterior post, Cargar tu dispositivo de forma segura, estuvimos comentando el otro día de rizar más el rizo.

En el post, yo explico cómo crearte un "prolongador" que anule las líneas de datos del conector, para evitar que te roben los contenidos de tu tarjeta flash del móvil. Pero ¿Y si me apetece fastidiar un poco a los listillos que quieren apoderarse de mis ficheros? ¿Y si me apetece que se lleven fotos, sí, pero las que yo quiero, para fastidiarles un poco? Fácil, fácil ;) Cogemos un pendrive de esos que tenemos tirados por ahí de 1Gb, lo desmontamos y le quitamos el conector USB, que nos quede sólo la placa con los chips. Ahora, soldamos al conector hembra de nuestro prolongador (el que va al conector macho del cargador) los 4 pines, para que tenga alimentación y datos.




De esta manera, la tensión sigue pasando hasta nuestro dispositivo para cargar la batería, pero cuando pida datos, va a ir al pendrive que hemos acoplado al conector. Así, cualquier script de copia, se llevará los datos del pendrive y podremos regodearnos pensando en la cara que pondrán al ver las burradas que hemos podido prepararles.

Pero, si tenemos ese típico día en que la filantropía invade nuestro cerebro y nuestra alma (vamos, que consigue ejecutarse en ring 0 en nuestra cabeza) y a nuestra maltrecha neurona le da por parafrasear a Kennedy con aquello de "No preguntes qué puede hacer la humanidad por tí. Pregunta qué puedes hacer tú por la humanidad", podemos llegar a pensar que sí, que hemos fastidiado a los chicos malos con nuestra colección de bizarradas varias, pero cualquier otra persona que pique les puede proporcionar material bueno con el que divertirse.

Dejando al margen troyanos, xploits, virus y demás que podemos meter en el pendrive para intentar inutilizar el sistema, que dependen del sistema operativo y de varios factores más, podemos intentar jugar más sucio y [Modo Chuck Norris ON] ¡¡¡dejarles sin espacio en el disco duro del equipo!!! [Modo Chuck Norris OFF]

Pongamos que han metido un disco de 500Gb en el equipo que rastrea los teléfonos y queremos llenarlo. Es cuando sacamos los 500 pendrives de un giga, los metemos en un hub USB gigante, dentro de una mochila, y los ponemos en el cargador. ¡¡Toma ya, copiad basura a vuestro disco y llenadlo!! Pero no, creo que no va a ser esa la solución. Mejor comprarnos un pendrive de 1Tb de los que se acaban de presentar en sociedad hace 2 meses (buscad por Google) y nos gastamos una pasta en un pendrive sólo para jugar y no aprovecharlo. No, todavía no soy millonario. Habrá que pensar en otra solución.

Entonces me acuerdo de los ficheros dispersos, que, como casi todo, suena mal en castellano y son mas conocidos como sparse files.

Este tipo de ficheros son muy utilizados en la virtualización, para indicar que tienen un tamaño de XXX gigas cuando en realidad sólo ocupan XXX megas. El típico caso de ficheros vmdk de VMWare al crear máquinas virtuales. Realmente el archivo ocupa 2 Gb en disco, pero a la máquina le hace creer que tiene 10 Gb disponibles.

Como explica la Wikipedia:

Esto se consigue escribiendo una breve información (metadatos) representando los bloques vacíos en el disco en vez del actual espacio "vacío" que constituye el bloque, utilizando así menos espacio en disco. El tamaño del bloque completo se escribe en el disco como el tamaño real sólo cuando el bloque contiene "datos reales" (no vacíos). Al leer los archivos dispersos, el sistema de archivos de forma transparente convierte los metadatos que representan los bloques vacíos en bloques llenos de bytes ceros en tiempo de ejecución, por lo que la aplicación no es consciente de esta conversión.

¿Y cómo creamos este tipo de ficheros? ¿Cómo modificamos el contador de espacio para que engañe a la hora de copiarlo? Usando la herramienta mkFile.exe, de la gente de Colinux, y que se puede descargar de aquí.

Partimos de un fichero creado con el notepad, prueba.txt, que contiene únicamente una línea de texto: "Esto es una prueba"



Mirando sus propiedades, vemos que ocupa 18 bytes, aunque su espacio en disco es de 4Kb, por el tamaño de la unidad de asignación del disco.



Entonces es cuando hacemos magia con el mkFile. Primero, vemos su menú de opciones:

Usage: mkFile.exe [-s] [-r] [-k] [-m] [-g] filename filesize
where filename is the name of the file to create
filesize if the size of the file.
-s means create a sparse file ( only supported on ntfs 5 or greater )
-r means resize an existing file
-k -m -g means the size is in KB, MB, or GB

Entonces, si queremos convertir nuestro fichero de texto en una mole de 1Gb, tendríamos que teclear el siguiente comando:

mkFile.exe -s -r -g prueba.txt 1

Así, le indicamos que queremos crear un fichero sparse (-s), que queremos redimensionar uno ya existente (-r), que queremos darle el tamaño final en Gb (-g), el nombre del fichero a redimensionar (prueba.txt) y el tamaño final en Gb (1).



De nuevo, miramos las propiedades del fichero, a ver cómo ha cambiado.



Vemos que ahora el fichero ocupa en disco 64Kb, pero el tamaño que dice que tiene es de 1Gb. Comprobemos si es verdad que va a darnos todo el giga de datos si intentamos copiarlo. Hacemos un copy de toda la vida y vemos que tarda bastante más de lo que debería si fuesen 64Kb.



Tenemos un nuevo fichero llamado pruebamodificada.txt Pedimos propiedades de ese fichero y ¡¡voilá!! tenemos que el tamaño es de 1Gb como antes pero que esta vez el fichero SÍ ocupa 1Gb en disco.



Hemos conseguido que, ocupando el fichero de origen 64Kb, el de destino ocupe 1Gb, es decir, 16384 veces el fichero de origen.

Ahora, en lugar de con un fichero, que queda muy bien pero no sirve para llenar un disco entero, lo hacemos con un grupo de ellos. Supongamos que tenemos unas fotos del Gran Chuck Norris. Todas son jpg, y ocupan 59K (Venga, me habéis pillado, es la misma renombrada...). Nos hacemos un script en un momento en batch (sí, con dos cojo...) para que coja todos los ficheros jpg del directorio y los pase por el mkfile.

@echo off
for %%G in (c:\nosecnofun\*.jpg) do (
mkfile -s -r -m %%G 60
)

Y lo ejecutamos. Aquí tenemos el antes:



y aquí el después.





Ahora, imaginad esto en un pendrive de 2Gb, metiendo 2000 ficheros de 64K y subiendo cada fichero a 1Gb o más... disco lleno.

Ah, y lo más divertido del tema, que el fichero, pese al tamaño, sigue siendo igual que el original, por lo que se puede abrir y ver el contenido, en esta ocasión, a nuestro querido Chuck.

Gracias a Apocalipsis por refrescarme la memoria con el mkfile, que la edad y el castigo a las neuronas no perdona :)

No hay comentarios:

Publicar un comentario