La compresión de datos es un componente vital en el desarrollo tecnológico actual, especialmente en dispositivos embebidos donde la optimización del espacio y la eficiencia son cruciales. Entre las tecnologías de compresión más enigmáticas se encuentra RELC (Rapid Embedded Lossless data Compression), una solución patentada de Fujitsu integrada en sus SoCs basados en ARM. La ingeniería inversa de esta técnica, aplicada en los firmware de cámaras como la Samsung NX mini y la Galaxy K Zoom, ha permitido desvelar su funcionamiento y abrir puertas para la comprensión y manipulación del firmware involucrado. El punto de partida para entender RELC fue el análisis de archivos binarios extraídos del firmware, particularmente se trabajó con archivos denominados chunk-05.bin, entre otros, que formaban parte integral del sistema operativo embebido en estas cámaras.
Estos archivos muestran características de compresión que dificultan la extracción y lectura directa de su contenido. El proceso de ingeniería inversa comenzó con la identificación del formato de contenedores que alojan dichos archivos, seguido de la creación de herramientas para su extracción. Al aplicar técnicas de inspección de cadenas y patrones de bytes, se descubrió que cada uno de estos fragmentos estaba comprimido individualmente. Esto es fundamental, ya que sugiere que la compresión no se aplica de manera global sino por secciones, lo que complica la reutilización directa de datos sin comprender el mecanismo de compresión. Uno de los avances más significativos fue el reconocimiento de que la compresión utilizada era una variante de LZSS (Lempel-Ziv-Storer-Szymanski), un conocido algoritmo basado en ventanas deslizantes que reemplaza secuencias repetidas con referencias a posiciones anteriores.
Sin embargo, esta variante específica no era completamente típica, pues los tokens y los bitmasks mostraban una codificación particular que difería de implementaciones comunes. Los bloques de datos comprimidos comienzan con una máscara de bits que define qué bytes son literales y cuáles son tokens que referencian datos previamente descomprimidos. Se estableció que la máscara ocupaba 16 bits, procesada de forma big-endian, donde un bit en cero indicaba un literal y un bit en uno marcaba un token. Los tokens, con un tamaño de dos bytes, presentaban una estructura compuesta por un campo de desplazamiento y un parámetro de longitud variable. El desplazamiento permitía identificar la posición en la ventana de datos previamente descomprimidos desde donde copiar la secuencia de bytes.
La longitud de la copia empezaba en un mínimo estándar de tres bytes y podía extenderse mediante un sistema de valores variables posteriormente determinados mediante byte(s) adicionales, lo que permitió manejar secuencias de hasta decenas de miles de bytes con solo unos pocos tokens. Este sistema de codificación permitió alcanzar una alta eficiencia de compresión para bloques de código y datos estáticos, como las cadenas de texto presentes en los firmwares, incluidos los mensajes de licencia y cadenas de depuración. Por ejemplo, se identificaron fragmentos relacionados con la licencia de wpa_supplicant, un componente de software conocido, lo que sirvió como referencia para validar la precisión de la decodificación. Un aspecto fascinante del análisis fue el descubrimiento de la existencia de subsecciones dentro de cada archivo comprimido. Cada subsección empezaba con un campo que contenía una bandera que indicaba si la sección estaba comprimida o no, junto con su longitud.
Esta información permitió delimitar correctamente los bloques y facilitar el proceso de extracción. Además, se identificó que cuando un subsección está marcada como no comprimida, el contenido debe ser leído directamente y también debe alimentar la ventana utilizada para futuras referencias, asegurando la coherencia del proceso de descompresión completa. El mecanismo de manejo de longitudes variables dentro de los tokens fue un desafío adicional. Inicialmente, el modelo asumía un incremento simple basado en un byte, pero con el examen más profundo se confirmó un sistema de codificación por acumulación, donde se sumaban múltiples bytes hasta encontrar un valor menor de 255, lo que permitía representar longitudes extremadamente largas ocmo 24,576 bytes o más, un logro impresionante para un hardware embebido. La implementación de la herramienta para la extracción y descompresión se convirtió en una pieza esencial para la comunidad interesada en el firmware de cámaras Samsung.
Permite no solo una lectura más clara del código ARM encargado del (des)comprimido, sino también facilita la modificación, análisis de seguridad y mejora de características en dispositivos que emplean este sistema. Por último, se confirmó la presencia del hardware RELC dentro de los SoC de Fujitsu, un bloque dedicado que ejecuta esta compresión de manera acelerada y eficiente. Históricos documentos y herramientas proporcionadas por Arcmanager, una empresa relacionada con Fujitsu, confirmaron la existencia y evolución de la tecnología RELC, también conocida como ESLC en algunas versiones. Este bloque de hardware se comunica a través de buses AHB y puede operar en distintos modos, incluyendo normal y descriptor, tanto síncrono como asíncrono. La comprensión profunda de RELC tiene implicaciones significativas para desarrolladores, ingenieros renovadores y entusiastas de la electrónica embebida.
Al permitir la descompresión completa y fiable del firmware, se abren puertas para la auditoría de seguridad, el desarrollo de alternativas de software y la preservación digital de estos dispositivos. En resumen, la ingeniería inversa de la compresión RELC en los dispositivos Fujitsu M7MU representa una hazaña técnica destacada. Desde la observación de archivos comprimidos aparentemente indescifrables hasta la extracción exitosa de datos y código funcional, el trabajo realizado pone de manifiesto la importancia del análisis exhaustivo y la perseverancia. Más aún, demuestra cómo incluso tecnologías propietarias y poco documentadas pueden ser analizadas y comprendidas mediante métodos meticulosos y colaborativos. El futuro de esta línea de investigación está orientado a ampliar la compatibilidad de herramientas con otros dispositivos que usen esta tecnología, así como a mejorar el rendimiento y la comprensión del hardware dedicado.
La colaboración comunitaria y la documentación continuada serán clave para mantener viva la innovación y garantizar que estas tecnologías sigan siendo accesibles y entendibles por la comunidad técnica global. Así, el viaje de investigación no solo ha revelado cómo funciona RELC, sino que ha iluminado un camino para la ingeniería inversa de tecnologías embebidas complejas, demostrando que con paciencia y análisis riguroso, cualquier sistema puede ser desentrañado y aprovechado para el beneficio colectivo.