¿Es posible falsificar un sistema de archivos microSD FAT32?

Tengo algunos datos de salida de hardware a una MicroSD. No puedo controlar este proceso y, en lugar de enviar datos a una MicroSD, quiero algún tipo de falsificador que pueda insertar en la ranura de la MicroSD que permita que los datos enviados a la microSD sean interceptados por, digamos, un microcontrolador, que en a su vez lo guarda en su propia microSD.

Encontré esta pieza de hardware, que creo que va un poco en la dirección de la solución que estoy buscando. El problema ahora es falsificar el sistema de archivos de MicroSD para que el hardware crea que tiene insertada una microSD normal.

¿Hasta qué punto es esto posible? Me parece bastante sencillo, pero estoy seguro de que no he previsto muchos problemas. Mi idea es simplemente conectar el desbloqueo a pines en una frambuesa y terminar de una vez. Estoy bastante seguro de que el hardware comprueba primero si hay un almacenamiento formateado válido, pero para eso está la ranura para tarjeta adicional. Efectivamente, estoy duplicando los datos de esta manera.

No he encontrado mucha información en internet sobre este tema.

Pregunta similar: https://stackoverflow.com/questions/13699203/sd-card-emulator

Puede encontrar más resultados buscando "emulador SD".
Huelo un gran problema XY aquí. Es posible que desee explicar por qué quiere hacer eso, qué problema está tratando de resolver. El hecho de que no haya mucho disponible hasta ahora debería dar una pista de que puede que no sea la solución adecuada para muchos problemas.
Incluso si es un problema XY, creo que es una pregunta/problema interesante, me gustaría ver si alguien puede darme alguna idea. El único problema que puedo prever es si hay problemas críticos de tiempo.
Estoy tratando de extraer datos de un dispositivo de hardware sobre el que no tengo control, ni ninguna otra solución de interfaz, es por eso que mis opciones para obtener datos son tan limitadas.
Estás sobreestimando las capacidades de una tarjeta SD. No comprende ni implementa el sistema de archivo FAT más que una unidad de disco duro, ese es el trabajo del dispositivo al que está conectado. Simplemente proporciona una matriz de bloques de almacenamiento con los que el host hace lo que quiere. Por lo tanto, depende de usted mirar el flujo de datos que va a la tarjeta y averiguar qué se está escribiendo. ¿Estás seguro de que es incluso FAT? El dispositivo estaría perfectamente autorizado para formatear la tarjeta como quisiera.
Si el dispositivo almacena en caché en gran medida, es posible que tenga dificultades para adivinar en qué orden las escrituras del dispositivo deben serializarse. Más particularmente si las tablas FAT no se vuelven a escribir hasta más tarde. ¿Es el tipo de máquina que es probable que haga eso, o simplemente escribiría bloques sin almacenarlos en caché?

Respuestas (3)

Intentar emular completamente el comportamiento de una tarjeta microSD de una manera que funcione con todos los dispositivos que puedan intentar usarla puede ser difícil sin algunos circuitos especializados y sin mucho trabajo. Por otro lado, muchos dispositivos que utilizan tarjetas microSD no utilizan todas sus funciones y se comunican a una velocidad significativamente inferior a la velocidad máxima permitida para las tarjetas SD. En consecuencia, es posible utilizar un analizador de datos para ver qué comandos y funciones de la tarjeta SD utiliza realmente la aplicación de interés y concentrarse en emularlos.

Hay dos enfoques que uno podría tomar para la tarea de capturar la salida:

  • Tenga un dispositivo que se comporte como una tarjeta microSD y permita que se almacenen archivos arbitrarios, y luego tenga algún proceso paralelo que examine el contenido de la tarjeta.

  • Tenga un dispositivo que se comporte como una tarjeta microSD que tenga un patrón fijo de datos almacenados en lugares fijos y confíe en el hecho de que un dispositivo en particular que intente escribir datos lo hará de manera predecible. No he visto este enfoque utilizado para microSD, pero openSDA lo usa para dispositivos de almacenamiento masivo USB, y creo que el mismo principio podría funcionar con microSD. Por ejemplo, si un dispositivo siempre escribe un archivo escribiendo una entrada de directorio con tamaño cero, luego escribe en los clústeres disponibles en orden numérico y finalmente escribe la entrada de directorio con un tamaño actualizado, un dispositivo que ve una escritura en una entrada de directorio seguida mediante una escritura de algunos grupos de datos seguida de otra escritura en el directorio podría interpretar esa secuencia de eventos como la creación de un archivo del tamaño especificado que contiene los datos especificados.

Si uno no puede permitirse mucho almacenamiento flash, el segundo enfoque podría permitirle arreglárselas con menos que el primero, especialmente si desea extraer solo parte de la información que se ha escrito en los archivos. El primer enfoque requeriría más almacenamiento masivo, pero la ubicación de los nuevos datos en el disco variaría según la ubicación de los datos escritos previamente. Por el contrario, es posible que el software que escribe en el disco se comporte de manera absolutamente consistente y predecible si los resultados de intentar leer el disco nunca cambian. Si la primera entrada del directorio siempre se lee en blanco y los primeros 20 clústeres siempre se leen como disponibles, un intento de escribir un archivo siempre puede leer la primera entrada del directorio, ver si está disponible y usarla, luego verifique la disponibilidad de la primera. 20 clústeres, mira que estén disponibles, y usarlos. Si no es probable que cambie el firmware del dispositivo con el que está interactuando, tal comportamiento podría simplificar la tarea de capturar datos de él.

Excelente respuesta con muchas consideraciones dadas. ¡Gracias! Tu primera opción; ¿podrías explicarlo un poco más? ¿A qué te refieres con un dispositivo que se comporta como una tarjeta microSD, podría ser un microcontrolador emulando un fat32? ¿Para qué necesitaría el proceso paralelo?
@Zimano: Si todo lo que quiere hacer es emular una tarjeta SD, también puede usar una tarjeta SD. La razón normal para querer emular uno es poder tener acciones en la tarjeta SD que también afecten algo más, por lo que el "proceso paralelo" sería el "algo más".

Estoy tratando de extraer datos de un dispositivo de hardware sobre el que no tengo control, ni ninguna otra solución de interfaz, es por eso que mis opciones para obtener datos son tan limitadas.

Al construir este dispositivo interceptor (que puede resultar un esfuerzo significativo), es posible que esté molesto con los resultados que ve.

  • es una gran pregunta si encontrará más datos de los que se escriben en la tarjeta. El dispositivo puede realizar algún intercambio o registro de datos intermedios. ¿Le ayudará en su tarea principal?
  • La tarjeta SD es en realidad un dispositivo extraíble, ¿por qué no realizar acciones específicas (requeridas) en el dispositivo principal y luego analizar los resultados de sus acciones tomando una imagen de la tarjeta (por ejemplo, usando Disk Imager) y analizándola?
  • el dispositivo de emulación de tarjeta SD que piensa crear será un dispositivo esclavo, no podrá dar comandos al dispositivo principal, por lo que no le dará más control sobre el dispositivo principal.

Por lo tanto, si bien parece ser un buen desafío, la facilidad de uso es cuestionable, a menos que esté buscando algo específico; si es el caso, comparta y es posible que podamos ayudarlo / asesorarlo más.

Propondré dos soluciones tontas, con el objetivo de hacerte la vida mucho más sencilla, al no tener que implementar un emulador FAT.

Solución 1: Deje que escriba en una tarjeta micro-SD.

Inserte un MUX en las líneas de señal que permita conectar la tarjeta SD a otro micro. De vez en cuando, haga que el micro apague su dispositivo (o de lo contrario simule una extracción de la tarjeta SD), luego cambie el MUX, tome posesión de las líneas de señal, lea los datos y devuelva el control de la tarjeta SD al registrador .

Si su registrador tiene un patrón de escritura predecible (como una vez por minuto), entonces probablemente pueda leer a escondidas entre las escrituras.

Solución 2: .... Deje que escriba en una tarjeta micro-SD.

Bueno, está bien, uno virtual.

Tome un SBC de Linux con un puerto externo que pueda emular una tarjeta micro SD, como un SPI cuádruple o algo así.

Programe esto para responder a los comandos SD básicos como leer, escribir, etc. Ahora tiene un emulador de tarjeta SD.

Redirigir lecturas y escrituras a un archivo en el sistema de archivos de Linux SBC, que será una imagen de su tarjeta SD virtual.

Y luego... ¡tada! Móntalo. Contiene una imagen FAT. Tienes linux. Móntelo de solo lectura y lea los archivos.