
🔍 Herramienta Go para esteganografía LSB, capaz de ocultar cualquier archivo dentro de una imagen.
stegify es una herramienta de línea de comandos simple capaz de ocultar de forma totalmente transparente cualquier archivo dentro de una imagen o conjunto de imágenes.
Esta técnica se conoce como LSB (Least Significant Bit) esteganografía.
| Portador | Datos | Resultado |
|---|---|---|
![]() | ![]() | ![]() |
El archivo Result contiene el archivo Data oculto en él. Y como se puede ver, es totalmente transparente.
Si se proporcionan múltiples archivos Carrier, el archivo Data se dividirá en partes y cada parte se codificará en el portador respectivo.
| Portador1 | Portador2 | Datos | Resultado1 | Resultado2 |
|---|---|---|---|---|
![]() |
El archivo Result1 contiene la mitad del archivo Data oculta en él y Result2 la otra. Como siempre, totalmente transparente.
go install github.com/DimitarPetrov/stegify@latest
brew tap DimitarPetrov/stegify
brew install stegify
O puedes descargar un binario para tu sistema aquí.
stegify encode --carrier <file-name> --data <file-name> --result <file-name>
stegify decode --carrier <file-name> --result <file-name>
Al codificar, el archivo con el nombre dado a la bandera --data se oculta dentro del archivo con el nombre dado a la bandera --carrier y el archivo resultante se guarda en un nuevo archivo en el directorio de trabajo actual con el nombre dado a la bandera --result.
NOTA: El archivo de resultado no tendrá ninguna extensión de archivo, por lo tanto, debe especificarse explícitamente en la bandera
--result.
Al decodificar, dado un nombre de archivo de un archivo portador con datos previamente codificados, los datos se extraen y guardan en un nuevo archivo en el directorio de trabajo actual con el nombre dado a la bandera --result.
NOTA: El archivo de resultado no tendrá ninguna extensión de archivo, por lo tanto, debe especificarse explícitamente en la bandera
--result.
En ambos casos, la bandera --result puede omitirse y se usarán valores predeterminados.
stegify encode --carriers "<file-names...>" --data <file-name> --results "<file-names...>"
O
stegify encode --carrier <file-name> --carrier <file-name> ... --data <file-name> --result <file-name> --result <file-name> ...
stegify decode --carriers "<file-names...>" --result <file-name>
O
stegify decode --carrier <file-name> --carrier <file-name> ... --result <file-name>
Al codificar un archivo de datos en más de un portador, el archivo de datos se divide en N fragmentos, donde N es el número de portadores proporcionados. Cada uno de los fragmentos se codifica entonces en el portador respectivo.
NOTA: Al decodificar, los portadores deben proporcionarse en el mismo orden exacto para que el resultado se extraiga correctamente.
Este tipo de codificación proporciona una capa adicional de seguridad y más flexibilidad en cuanto a las limitaciones de tamaño.
En ambos casos, la bandera --result/--results puede omitirse y se usarán valores predeterminados.
NOTA: Al codificar, el número de archivos de resultado (si se proporcionan) debe ser igual al número de archivos portadores. Al decodificar, se espera exactamente un resultado.
Cuando se proporcionan múltiples portadores con tipos mixtos de banderas, los nombres proporcionados a través de la bandera carrier se toman primero y los de las banderas carriers/c después. Lo mismo ocurre con la bandera result/results.
stegify también se puede usar de forma programática y proporciona funciones fáciles de usar que trabajan con nombres de archivos o Readers y Writers sin procesar. Puedes visitar godoc en el paquete steg para más detalles.
Si el archivo portador está en formato jpeg o jpg, después de la codificación, la imagen del archivo resultante estará codificada en png (por lo tanto, puede ser de mayor tamaño) a pesar de la extensión de archivo especificada en la bandera de resultado.
stegify se utilizó para uno de los desafíos Capture The Flag en Codefest’19.
A los participantes se les dio una foto de un montón de gatos "inocentes". Nada sospechoso, ¿verdad? ¡Piénsalo de nuevo!
![]() |
![]() |
![]() |
![]() |