Mientras buscaba información interesante sobre esteganografía, me encontré con un entretenido artículo sobre
esteganografía en el sistema de archivos , y después de un tiempo, me llevó a la idea de crear esteganografía en el sistema de archivos de discos ópticos.
Probablemente en estos días, casi no quedan personas que usen discos en la vida cotidiana, porque una opción más valiosa frente a
las unidades flash vino a reemplazarlas.
Con un poco de reflexión, decidí que los discos aún pueden tener algún uso, por ejemplo, dentro de su sistema de archivos, puede ocultar cierta información secreta y luego transferirla a otra para que nadie sospeche nada.
Esto es lo que haremos, a saber: utilizaremos la biblioteca de Python, que nos ayudará a codificar la información de un archivo de texto y luego ocultarla en las entrañas de nuestro disco.

Pero antes de comenzar, echemos un vistazo a algunas de las pequeñas cosas, y también definamos el concepto de un disco óptico.
¿Qué es un disco óptico?
Disco óptico (Eng. Disco óptico): el nombre colectivo de los medios de almacenamiento hechos en forma de discos, cuya lectura se lleva a cabo mediante radiación óptica (láser).

Cada disco en una computadora se presenta en un formato específico en forma de una
imagen que contiene toda la información y estructura del disco, y se utiliza para trabajar con información sin un medio óptico, así como para archivar datos en medios sólidos
El formato estándar para discos ópticos es
iso9660 , pero
todavía hayTenga en cuenta que la imagen contiene menos información que el CD original. El disco contiene información de servicio que, en particular, se puede utilizar para
proteger contra la copia. Trabajaremos con ISO9660.
Mirada interior
Y ahora veamos la estructura de iso9660 desde adentro, puede encontrar información detallada
aquí ,
aquí y
aquí , y para aquellos que saben inglés también
aquí . Por mi parte, solo diré que consta principalmente de 2 descriptores:
Boot Record y
Primary Volume Descriptor (PVD) , puedes abrir cualquier iso en
010editor y verlo por ti mismo.

Boot Record puede ser utilizado por sistemas que necesitan inicializar muchos tipos de datos antes de hacer que un disco esté disponible, aunque ISO 9660 no indica qué información en Boot Record ni cómo usarla.
PVD es el punto de partida en la identificación de
iso9660, se ve así:


Para los amantes de los esquemas:

Encontrarás más información
aquí.Y estamos avanzando.
Inicialización en la estructura ISO.
Trabajaremos con el directorio raíz, en él crearemos nuestros propios directorios y agregaremos los archivos necesarios.
Para esto utilizaremos la biblioteca
pycdlib , puede familiarizarse con ella en el
siguiente enlace.
Pasemos a escribir el programa, pero quién no quiere ir paso a paso, encontrará el código fuente en el enlace a
mi repositorio en github:
Prepara archivos con texto
Ahora necesitamos preparar nuestros archivos, que colocaremos en la estructura de nuestra iso.
El curso de acción es el siguiente:
- Tomamos el texto de origen en ciertos archivos y lo leemos en variables; nada nos impide tomar mucho texto, pero para la demostración solo tomé un par de oraciones en cada archivo; continuaremos manipulando estas variables
- Después de considerar las oraciones, necesitamos codificar los contenidos. Codificaremos usando base64
- Escribimos el contenido codificado en nuevos archivos llamados ARRIBA y ABAJO . Los archivos se llaman así porque decidí reorganizar de tal manera que 1 parte del primer archivo y 1 parte del segundo archivo (es decir, las partes superiores) están escritas en ARRIBA , y en ABAJO 2 parte del primer archivo y 2 partes del segundo archivo ( es decir, partes inferiores)
with open('/home/ul/stegist1.txt','rb') as stegist1:
Ocultamiento
Es hora de pasar a la biblioteca pycdlib de la que hablé al principio. No es difícil trabajar con él: creamos un objeto a través del cual agregamos más archivos y directorios dentro.
iso=pycdlib.PyCdlib()
Como podemos ver, nuestro texto fue escrito con éxito

Quiero notar que podemos crear en una ruta determinada, por ejemplo
/ A , ya sea un archivo o una carpeta.
Si primero especificamos la creación de un directorio en
/ A , y luego especificamos la creación de un archivo en
/ A, se muestra un mensaje de error, no es lo mismo que colocar el archivo en una carpeta.
Extensiones para el sistema de archivos ISO9660
Hay 2
extensiones principales para el sistema de archivos iso:
RockRidge y Joilet .
Rockidge
Esta es una extensión del sistema de archivos ISO 9660 diseñada para almacenar atributos de archivos utilizados en los sistemas operativos POSIX (es decir, compatibles con Unix).
Las extensiones de Rock Ridge se escriben sobre el sistema de archivos ISO 9660 para que el disco óptico de Rock Ridge pueda leerse mediante un software diseñado para funcionar con ISO 9660.
Más detallesRock Ridge puede almacenar la siguiente información adicional sobre el contenido del disco:
- nombres largos de archivo (hasta 255 caracteres);
- menos restricciones en el uso de caracteres en los nombres de archivo;
- estructura de directorios de anidamiento arbitrario.
- para cada archivo se escriben los atributos:
- permisos de archivo, incluidos los campos uid y gid;
- cantidad de enlaces duros al archivo;
- tiempos de creación, modificación, acceso, cambio de atributos, etc.
- archivos especiales compatibles:
- archivos dispersos;
- enlaces simbólicos;
- archivos de dispositivo
- archivos de socket
- Archivos FIFO.
Estos datos se registran en directorios especiales, cuyos nombres generalmente están ocultos.
Joilet
Esta es una extensión del sistema de archivos ISO 9660 diseñada para aliviar las restricciones de nombre de archivo impuestas por ISO 9660. La especificación fue desarrollada por Microsoft y ha sido compatible con todas las versiones de Microsoft Windows desde Windows 95 y Windows NT 4.0.
Por defecto, se utiliza en todos los medios de CD-ROM con datos publicados después de 1995.
Más detallesJoliet presenta un conjunto adicional de nombres de archivo. Los nombres tienen hasta 64 caracteres Unicode y se almacenan en codificación UCS-2. Para su almacenamiento, se utiliza un encabezado adicional especial (Descriptor de volumen suplementario, SVD), que los programas compatibles con ISO 9660 ignoran incondicionalmente, lo que garantiza la compatibilidad con versiones anteriores.
La mayoría de las plataformas de software existentes, incluidas Microsoft Windows, Linux, Mac OS X y FreeBSD, son capaces de leer medios de almacenamiento con la extensión del sistema de archivos Joliet, que permite el intercambio de archivos entre estos sistemas operativos incluso cuando se usan alfabetos no latinos (como árabe, japonés, cirílico) lo que no era posible con la norma ISO 9660 habitual.
De hecho, también hay una extensión 3 para el sistema de archivos iso, se llama
Romeo .
Esta es una extensión de ISO 9660 para MS Windows 95, no hay suficiente información en Internet, y lo más probable es que esta extensión no se use en ningún otro lugar.
Puede encontrar
aún más información sobre extensiones y sistemas de archivos para CD / DVD
aquí , y ahora volvamos a nuestro programa.
El código resultante para codificar información de un archivo y colocar archivos con información codificada en iso se ve así:
Y les recuerdo que el código completo también está disponible en el enlace al
githubAhora pasemos a la parte final: escriba nuestra iso resultante en el disco
Puedes grabar lo que quieras, usaré
Nero 7Usaremos
CD-RCD-ROM, CD-R y CD-RWSe diferencian en que el CD-ROM es un disco de solo lectura, no se puede escribir nada allí. CD-R y CD-RW son discos grabables. CD-R le permite escribir una vez en un disco, CD-RW, repetidamente.
¿Pero qué hay del DVD?La principal diferencia con el CD-R / RW es la cantidad de datos que se pueden escribir en un DVD-ROM de 4.7 GB en comparación con 650,700 MB. Algunos formatos de DVD admiten hasta 13 e incluso 17 GB
Más información del disco Como podemos ver, el programa se escribió correctamente en el disco.

Ahora podemos transferirlo en disco a las personas que queramos.
Decodificación
¿Por qué haríamos todo esto si la información no se puede decodificar, verdad?
Si está interesado en el método, puede escribir un programa que extraiga y decodifique los archivos adjuntos, será exactamente lo que usará su gente.
Y eso es todo. Mi tarea consistía en demostrar una de las formas posibles de ocultar información, utilizando discos que, al parecer, se habían hundido en el olvido.

Estaré encantado de ver sus sugerencias, adiciones, correcciones y otros comentarios.
PD: Quiero expresar un agradecimiento especial a
@PavelMSTU por las consultas y patadas motivacionales.