
Embed a payload inside a PNG file
قم بتضمين حمولة داخل ملف PNG عن طريق تقسيم الحمولة عبر أقسام IDAT متعددة. يتم تشفير كل قسم بشكل فردي باستخدام مفتاح خاص به بطول 16 بايت مع خوارزمية تشفير RC4.
الصفحة الرئيسية لـ Maldev Academy
المنهج الدراسي لـ Maldev Academy
يتكون هذا المستودع من تطبيقين:
EmbedPayloadInPng.py - نص برمجي بلغة Python لتضمين حمولة إدخال في ملف PNG محدد.FetchPayloadFromPng - استخراج الحمولة من ملف PNG الناتج عن EmbedPayloadInPng.py، وفك تشفيرها باستخدام دالة ExtractDecryptedPayload.EmbedPayloadInPng.py لإنشاء ملف PNG بالحمولة المضمّنة:
ملف PNG المضمّن بالحمولة Output.png هو نفسه ملف PNG الأصلي.
https://github.com/user-attachments/assets/bec6f597-9955-4552-80f7-f484bd5754c3
MARKED_IDAT_HASH الناتج عن EmbedPayloadInPng.py واستبدله بالتعريف الموجود في مشروع FetchPayloadFromPng هنا.كما ذُكر سابقًا، فإن EmbedPayloadInPng.py مسؤول عن تضمين ملف الحمولة داخل ملف PNG. فيما يلي بنية ملف PNG مضمّن بالحمولة.

نظرًا لأن الحد الأقصى لحجم قسم IDAT هو 8192 بايت، يتم تقسيم حمولتنا إلى أقسام IDAT متعددة. يبلغ حجم كل قسم ما يعادل (8192 - 16 [طول مفتاح RC4]). علاوة على ذلك، سيحتوي قسم IDAT الأخير على البايتات المتبقية من الحمولة.
توضح الصور التالية مخرجات EmbedPayloadInPng.py وتقارنها ببنية ملف PNG المُنشأ:


IDAT الأول للحمولة، الذي يلي القسم العشوائي (بالأزرق). توضح هذه الصورة أيضًا موضع تجزئة CRC وحجم قسم IDAT العشوائي مسبقًا (بالأصفر).

