
اختراق تشفير zip القديم باستخدام هجوم النص العادي المعروف لـ Biham و Kocher.
اختراق تشفير zip القديم باستخدام هجوم النص الواضح المعروف لـ Biham وKocher.
قد يحتوي أرشيف ZIP على العديد من الإدخالات التي يمكن ضغط محتواها و/أو تشفيره. على وجه الخصوص، يمكن تشفير الإدخالات باستخدام خوارزمية تشفير متناظرة تعتمد على كلمة مرور تُعرف باسم تشفير PKWARE التقليدي، أو التشفير القديم، أو ZipCrypto. تولد هذه الخوارزمية تيارًا عشوائيًا زائفًا من البايتات (تيار المفاتيح) يتم XOR مع محتوى الإدخال (نص واضح) لإنتاج بيانات مشفرة (نص مشفر). يتم تهيئة حالة المولد، المكونة من ثلاثة أعداد صحيحة 32 بت، باستخدام كلمة المرور ويتم تحديثها باستمرار مع النص الواضح أثناء التشفير. خوارزمية التشفير هذه عرضة لهجمات النص الواضح المعروف كما أظهر Eli Biham و Paul C. Kocher في الورقة البحثية A known plaintext attack on the PKZIP stream cipher. باستخدام النص المشفر و 12 بايت أو أكثر من النص الواضح المقابل، يمكن استعادة الحالة الداخلية لمولد تيار المفاتيح. هذه الحالة الداخلية كافية لفك تشفير النص المشفر بالكامل وكذلك الإدخالات الأخرى التي تم تشفيرها بنفس كلمة المرور. يمكن استخدامها أيضًا لاختراق كلمة المرور بقوة عنيفة بتعقيد nl-6 حيث n هو حجم مجموعة الأحرف و l هو طول كلمة المرور.
bkcrack هي أداة سطر أوامر تنفذ هجوم النص الواضح المعروف هذا. الميزات الرئيسية هي:
يمكنك الحصول على أحدث إصدار رسمي على GitHub.
حزم مُجمَّعة مسبقًا لأنظمة Ubuntu و MacOS و Windows متوفرة للتحميل. قم باستخراج الأرشيف المُحمَّل في أي مكان تريده.
في Windows، مكتبات تشغيل Microsoft ضرورية لتشغيل bkcrack. إذا لم تكن مثبتة بالفعل على نظامك، قم بتحميل وتثبيت أحدث حزمة Microsoft Visual C++ Redistributable.
بدلاً من ذلك، يمكنك تجميع المشروع باستخدام CMake.
أولاً، قم بتنزيل ملفات المصدر أو استنساخ مستودع git.
ثم، تشغيل الأوامر التالية في شجرة المصدر سينشئ تثبيتًا في مجلد install.
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=install
cmake --build build --config Release
cmake --build build --config Release --target install
bkcrack متوفرة في مستودعات الحزم المدرجة أدناه. هذه الحزم مقدمة من قبل مشرفين خارجيين.
يمكنك رؤية قائمة بأسماء الإدخالات والبيانات الوصفية في أرشيف باسم archive.zip بهذه الطريقة:
bkcrack -L archive.zip
الإدخالات التي تستخدم تشفير ZipCrypto عرضة لهجوم النص الواضح المعروف.
يتطلب الهجوم 12 بايت على الأقل من النص الواضح المعروف. يجب أن يكون 8 منها على الأقل متجاورة. كلما زاد النص الواضح المتجاوز المعروف، زادت سرعة الهجوم.
إذا كان لديك أرشيف zip encrypted.zip مع الإدخال cipher كنص مشفر و plain.zip مع الإدخال plain كنص واضح معروف، يمكن تشغيل bkcrack على النحو التالي:
bkcrack -C encrypted.zip -c cipher -P plain.zip -p plain
إذا كان لديك ملف cipherfile يحتوي على النص المشفر (بدءًا من 12 بايت المقابلة لرأس التشفير) و plainfile مع النص الواضح المعروف، يمكن تشغيل bkcrack على النحو التالي:
bkcrack -c cipherfile -p plainfile
إذا كان النص الواضح يتوافق مع جزء آخر غير بداية النص المشفر، يمكنك تحديد إزاحة. يمكن أن تكون سالبة إذا كان النص الواضح يتضمن جزءًا من رأس التشفير.
bkcrack -c cipherfile -p plainfile -o offset
إذا كنت تعرف القليل من النص الواضح المتجاوز (بين 8 و 11 بايت)، ولكنك تعرف بعض البايتات في مواقع أخرى معروفة، يمكنك تقديم هذه المعلومات للوصول إلى شرط إجمالي 12 بايت معروفة.
للقيام بذلك، استخدم العلم -x متبوعًا بالإزاحة والبايتات بالست عشري.
bkcrack -c cipherfile -p plainfile -x 25 4b4f -x 30 21
إذا نجح الهجوم، يمكن حفظ البيانات المفكوكة المرتبطة بالنص المشفر المستخدم في الهجوم:
bkcrack -c cipherfile -p plainfile -d decipheredfile
إذا كانت المفاتيح معروفة من هجوم سابق، فمن الممكن استخدام bkcrack لفك تشفير البيانات:
bkcrack -c cipherfile -k 12345678 23456789 34567890 -d decipheredfile
قد تكون البيانات المفكوكة مضغوطة اعتمادًا على ما إذا كان الضغط قد استخدم أم لا عند إنشاء ملف zip.
إذا تم استخدام ضغط deflate، يمكن استخدام سكربت Python 3 المقدم في مجلد tools لفك ضغط البيانات.
python3 tools/inflate.py < decipheredfile > decompressedfile
للوصول إلى جميع إدخالات الأرشيف المشفر في خطوة واحدة، يمكنك إنشاء أرشيف جديد بنفس المحتوى ولكن بدون تشفير. يفترض أن كل إدخال تم تشفيره في الأصل بنفس كلمة المرور.
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -D decrypted.zip
من الممكن أيضًا إنشاء أرشيف مشفر جديد بكلمة مرور من اختيارك:
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -U unlocked.zip new_password
يمكنك أيضًا تعريف كلمة المرور الجديدة من خلال تمثيلها الداخلي المقابل.
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 --change-keys unlocked.zip 581da44e 8e40167f 50c009a0
يمكن استخدام هذين الأمرين معًا لتغيير محتويات أرشيف مشفر دون معرفة كلمة المرور ولكن بمعرفة المفاتيح الداخلية فقط: يمكنك عمل نسخة مشفرة بكلمة المرور التي تختارها، ثم تحرير النسخة باستخدام مدير أرشيف وإدخال كلمة المرور المختارة عند الطلب، وأخيرًا عمل نسخة من الأرشيف المعدل مرة أخرى باستخدام مفاتيح التشفير الأصلية.
بالنظر إلى المفاتيح الداخلية، يمكن لـ bkcrack محاولة إيجاد كلمة المرور الأصلية.
يمكنك البحث عن كلمة مرور باستخدام أحرف من مجموعة أحرف معينة:
bkcrack -k 1ded830c 24454157 7213b8c5 -b ?p
يمكنك تقييد البحث على كلمات مرور بطول معين أو نطاق من الأطوال:
bkcrack -k 1ded830c 24454157 7213b8c5 -b ?p -l 9
bkcrack -k 1ded830c 24454157 7213b8c5 -b ?p -l 8..10
الخيار -r <length> <charset> هو اختصار لـ -l 0..<length> -b <charset>:
bkcrack -k 1ded830c 24454157 7213b8c5 -r 10 ?p
إذا كان لديك بعض المعرفة حول كيفية تشكيل كلمة المرور، يمكنك تحديد قناع لتقييد مساحة البحث وجعل الاستعادة أسرع بكثير. هذا مناسب لكلمات المرور الطويلة (مثل تلك التي تحتوي على 12 حرفًا أو أكثر) حيث تصبح القوة الغاشمة مستهلكة للوقت.
على سبيل المثال، بافتراض أنك تتذكر بشكل غامض أن كلمة المرور الخاصة بك تتكون من 8 أحرف صغيرة، وواصلة، و 6 أرقام عشرية، يمكنك استخدام هذا الأمر:
bkcrack -k 1940e266 d3fd3d89 71ce9871 -m ?l?l?l?l?l?l?l?l-?d?d?d?d?d?d
يتم تنفيذ هذا في ميلي ثانية، بينما يستغرق بديل القوة الغاشمة ساعات.
يتم تعريف مساحة البحث لكل من استعادة كلمة المرور بالقوة الغاشمة وباستخدام القناع بمجموعات أحرف. مجموعة الأحرف هي سلسلة من الأحرف أو اختصارات لمجموعات أحرف موجودة. يتم سرد مجموعات الأحرف المحددة مسبقًا أدناه.
بالإضافة إلى مجموعات الأحرف المحددة مسبقًا، يمكنك تعريف مجموعات أحرف مخصصة باستخدام الخيار -s.
يمكن لمجموعات الأحرف المخصصة أن تشير إلى مجموعات أحرف محددة مسبقًا أو مجموعات أحرف مخصصة أخرى.
تكون مجموعات الأحرف المخصصة مفيدة بشكل خاص للتحديد الدقيق لمساحة البحث لاستعادة القناع.
على سبيل المثال، إذا كنت تعلم أن كلمة المرور الخاصة بك تتكون من 10 أحرف (كبيرة أو صغيرة) و 5 أرقام ثنائية، يمكنك استخدام هذا الأمر:
bkcrack -k b8c377a6 f603160f 1832a78b -m ?x?x?x?x?x?x?x?x?x?x?y?y?y?y?y -s x ?u?l -s y 01
يتم توفير برنامج تعليمي في مجلد example.
لمزيد من المعلومات، ألق نظرة على التوثيق واقرأ المصدر.
لا تتردد في اقتراح تحسينات أو تقديم طلبات سحب على GitHub.
إذا كنت ترغب في إظهار دعمك للمشروع، فنحن نرحب بك لتقديم تبرع أو رعاية المشروع عبر Github Sponsors.
يتم توفير هذا المشروع بموجب شروط ترخيص zlib/png.
| الاختصار | الوصف | القيمة |
|---|
?l | أحرف صغيرة | abcdefghijklmnopqrstuvwxyz |
?u | أحرف كبيرة | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
?d | أرقام عشرية | 0123456789 |
?s | أحرف خاصة | !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ |
?a | أحرف أبجدية رقمية | نفس ?l?u?d |
?p | أحرف ASCII قابلة للطباعة | نفس ?l?u?d?s |
?b | جميع البايتات | 0x00 .. 0xff |