
الكشف والاستعادة للقطات PNG الخاصة بأداة Windows Snipping Tool المعرضة لـ CVE-2023-28303
اكتشاف واستعادة صور Windows Snipping Tool بصيغة PNG المعرضة لثغرة CVE-2023-28303
SnipRecover CLI هو أداة سطر أوامر بسيطة وخالية من التبعيات، صُممت من أجل:
اكتشاف ملفات PNG التي عدّلتها ثغرة Windows Snipping Tool (CVE-2023-28303).
استعادة الصورة الأصلية عبر استرداد البيانات المضغوطة المُلحقة بعد كتلة IEND.
افتراضيًا، تستخدم الصور المستعادة RGBA ودقة 1920×1080، وإذا لم يتم تحديد مسار إخراج، تكتب الأداة إلى restored-<original_name>.png.
وفقًا لمواصفة PNG (ISO/IEC 15948)، يجب أن تظهر جميع بيانات الصورة (كتل IDAT) قبل كتلة IEND النهائية. تضيف Windows Snipping Tool عن طريق الخطأ بيانات IDAT إضافية بعد IEND، مما يخالف المواصفة ويعرض محتوى الصورة الكامل الذي تم "اقتصاصه".
البنية القياسية لـ PNG:
التوقيع (8 بايت): 89 50 4E 47 0D 0A 1A 0A
الكتل:
IHDR: ترويسة الصورة (العرض، الارتفاع، نوع الألوان، إلخ.)
IDAT: بيانات البكسل المضغوطة
IEND: علامة نهاية الملف
تحتوي صورة PNG مقصوصة بواسطة Snipping Tool على بايتات إضافية بعد IEND. يكتشف SnipRecover CLI هذا الشذوذ ويعيد بناء تدفق الضغط لاستعادة الصورة الأصلية.
المتطلبات الأساسية:
الخطوات:
git clone https://github.com/m31r0n/SnipRecover-CLI.git
cd SnipRecover-CLI
chmod +x sniprecover
لا حاجة إلى مكتبات خارجية—فقط Python القياسية _struct_, _zlib_, و_ _io_ الوحدات.
# Display help
python3 sniprecover --help
# 1. Detect vulnerable PNG(s)
python3 sniprecover detect /path/to/images/
# 2. Restore a cropped capture
python3 sniprecover restore capture.png --output restored-capture.png
ملاحظة: إذا حذفت
--widthأو--heightأو--alpha، فسيتم تطبيق القيم الافتراضية 1920×1080 وRGBA. وإذا حذفت--output، فسيتم حفظ الصور المستعادة باسمrestored-<original_name>.png.
SnipRecover-CLI/
├── sniprecover # Main CLI executable (make sure it's executable)
└── README.md # Documentation and theory
CVE-2023-28303: ثغرة Windows Snipping Tool – مركز استجابة أمان Microsoft
مواصفة PNG (ISO/IEC 15948) – W3C
MIT © 2025 – من تطوير m31r0n
| الخيار | الوصف | الافتراضي |
|---|
--width <int> | عرض الصورة الأصلية | 1920 |
--height <int> | ارتفاع الصورة الأصلية | 1080 |
--alpha | تضمين قناة ألفا (RGBA) | مفعّل |
--output <file> | مسار حفظ PNG المستعادة | restored-<original_name>.png |