
الكود المصدري لكتاب "Black Hat Python" من تأليف Justin Seitz. تم تحويل الكود بالكامل إلى Python 3، وإعادة تنسيقه ليتوافق مع معايير PEP8، وإعادة هيكلته لإزالة مشاكل الاعتماديات المتعلقة بتطبيق المكتبات المهجورة.
الكود المصدري للكتاب "Black Hat Python" بقلم جاستن سايتز. تم تحويل الكود بالكامل إلى Python 3، وإعادة تنسيقه للامتثال لمعايير PEP8، وإعادة هيكلته لإزالة مشكلات الاعتماد المتعلقة باستخدام مكتبات قديمة.
على الرغم من أنه كان يمكن تنفيذ العديد من التحسينات في الكود المصدري المعروض في جميع أنحاء الكتاب، إلا أن الكود تُرك دون تغيير قدر الإمكان بحيث يمكن للقارئ تطبيق هذه التعديلات كما يراه مناسباً. الكود كما هو يحتاج إلى جهود إعادة هيكلة جادة تتراوح من docstrings إلى type hinting ومعالجة الاستثناءات، ناهيك عن تحسينات مثل context managers، ولكن هذه المشكلات بحد ذاتها قد تعود بالفائدة على القارئ إذا كان ينوي تنفيذها. كما أنه يقدّم العديد من الأخطاء الناتجة عن المسافات البادئة (indentation) والتي تم تصحيحها لتجنب الأخطاء الفادحة أثناء التشغيل.
لقد قمت بنفسي بتوفير تحويل مماثل لهذا التحويل للكود المصدري للكتاب "Violent Python" بقلم TJ O'Connor. ألقِ نظرة هنا إذا لم تكن قد فعلت ذلك بعد.
ببساطة اختر دليلاً (DIR) لاستنساخ المشروع فيه باستخدام git clone، وأنشئ بيئة افتراضية جديدة أو venv له (موصى به) وقم بتثبيت المتطلبات باستخدام pip install.
user@host:~/DIR$ git clone https://github.com/EONRaider/blackhat-python3
user@host:~/DIR$ python3 -m venv venv
user@host:~/DIR$ source venv/bin/activate
(venv) user@host:~/DIR$ pip install -r requirements.txt
إصلاحات أخطاء حرجة كان لا بد من إجرائها لتنفيذ الكود المصدري بشكل صحيح وتجنب الأخطاء الفادحة:
chapter02/bh_sshserver.py مفتاح RSA الموجود في ملف test_rsa.key، وهو الآن مدرج في الدليل المقابل.chapter03/sniffer_ip_header_decode.py وsniffer_with_icmp.py وscanner.py جميعها كانت بها مشكلات خطيرة في تعريف أحجام حزم IP وقابلية النقل بين معماريات 32/64-بت بسبب مشاكل في تنفيذ struct. مزيد من المعلومات حول هذه المشكلات في هذا الموضوع على Stack Overflow.chapter03/scanner.py مكتبة netaddr، التي لم تعد تُصان وتقدّم الكثير من عدم التوافق مع Python 3. لهذا السبب تمت إعادة هيكلة الكود وأصبح يستخدم وحدة ipaddress من stdlib الخاصة بـ Python.chapter04/arper.py وmail_sniffer.py مكتبة ، وهي غير متوافقة مع Python 3. لهذا السبب تمت إعادة هيكلة الكود وأصبح يستخدم مكتبة .يمكن الاطلاع على المساهمات بلغات أخرى هنا:
من منطلق المنطق السليم، حاول أولاً مناقشة التغيير الذي ترغب في إجرائه على هذا المستودع عبر issue.
scapykamenechapter04/pic_carver.py يستخدم مكتبة opencv-python بدلاً من cv2. كانت وحدة "cv2.cv" مهجورة وتم استبدالها. تم استبدال المعامل "cv2.cv.CV_HAAR_SCALE_IMAGE" من الكود الأصلي بـ "cv2.CASCADE_SCALE_IMAGE" بسبب هذا الالتزام.chapter05/content_bruter.py قائمة كلمات ليعمل. تمت إضافتها إلى الفصل تحت all.txtchapter05/joomla_killer.py قائمة كلمات ليعمل. تمت إضافتها إلى الفصل تحت cain.txtchapter06/bhp_bing.py وbhp_fuzzer.py وbhp_wordlist.py للامتثال لمعايير PEP8، على الرغم من استمرار ظهور بعض التحذيرات بسبب ضرورة مطابقة أسماء الفئات لنمط camel-casing في هذا التطبيق المحدد على Burp Suite.chapter06/jython-standalone-2.7.2.jar كنسخة محدّثة أكثر من الملف المعروض في الكتاب.chapter07/git_trojan.py لاستبدال مكتبة imp (المهجورة الآن) بـ types. تم تنفيذ بنية دليل فرعي تحتوي على ملفات الإعداد اللازمة كما هو موضح في الكتاب. كانت متغير "trojan_config" تفتقد إلى المسار النسبي للدليل الفرعي config. تمت إضافة استدعاء لطريقة "to_tree" في السطر 60 لتجنب استثناء AttributeError الذي يولّده الكود الأصلي. تم تضمين تعليمات حول كيفية إنشاء رمز وصول (access token) بدلاً من استخدام كلمة المرور في حال استخدام المصادقة الثنائية (2FA) كتعليقات.chapter08/keylogger.py مكتبة PyHook ليعمل. تم تضمين ملف wheel بنسخة 1.6.2. إذا لزم الأمر، يمكن تنزيل إصدارات أخرى من هنا.chapter09/ie_exfil.py أخطاءً بسبب التعامل مع متغير plaintext (الذي يمكن أن يظهر كسلسلة نصية أو كسلسلة ثنائية) عند تمريره إلى دالة "encrypt_string". بالإضافة إلى ذلك، تم تصحيح استخدام مكتبة base64. مساهمة من Enraged في هذا الالتزام.