
UDPack هو مُعقِّد حزم UDP عام قابل للتوسيع.
UDPack هو أداة إخفاء شاملة وقابلة للتوسعة لحزم UDP. الغرض من هذا التطبيق هو الجلوس في مسار تدفق بيانات UDP، وإخفاء أو إزالة الإخفاء أو تعديل الحزم.
مطلوب Python 3.4 أو أحدث، لأن هذا السكربت يستخدم مكتبة asyncio. يوصى بشدة دائمًا باستخدام أحدث إصدار من Python. الميزات الأساسية لا تتطلب تبعيات خارجية، ولكن XChaCha20Poly1305Packer تتطلب PyNaCl.
تحذير: يجب التأكيد على أن الغرض من هذا التطبيق هو الإخفاء، وليس التشفير. لقد تم اتخاذ العديد من قرارات التصميم (وسيتم) عمدًا ضد أفضل الممارسات في التشفير، لذا فمن المحتمل جدًا أن طرق الإخفاء لن تقاوم التحليل التشفيري. لا تعتمد على الإخفاء لضمان سرية بياناتك!!!
الإصدار الحالي يفصل الجزء الشبكي إلى فئة Manager منفصلة ويبقي الإخفاء في الpackers، ويستخدم دوال مصنع الفئات بدلاً من mixins لإنتاج packers مشتقة. هذا يسهل ربط الpackers معًا، كما هو موضح في PipelineManager الجديد.
الpackers التالية متاحة:
NoOpPacker, CallSoonPacker: لا تقوم بإخفاء أي شيء فعليًا.
ConstDelayPacker, DelayPacker: تؤخر كل مخطط بيانات (datagram) لمدة زمنية ثابتة / متغيرة.
RandomDropPacker: تسقط الحزم عشوائيًا.
ShufflePacker: تعيد ترتيب بايتات البيانات بطريقة حتمية، باستخدام البذرة العشوائية (random seed) كمفتاح.
XorMaskPacker, ReverseOnePlusPacker, XorPtrPosPacker: مستوحاة من "XOR Patch" لـ OpenVPN، هذه الـ 3 packers عند دمجها يمكنها محاكاة أي طريقة إخفاء في ذلك التصحيح.
جديد: XChaCha20Poly1305Packer: تشفر كل مخطط بيانات باستخدام XChaCha20Poly1305، مما يجعل المحتوى غير قابل للتمييز عن البايتات العشوائية. 40 بايت زيادة لكل مخطط بيانات. متاح إذا تم تثبيت PyNaCl.
"packer" هو تنفيذ معين لطريقة الإخفاء، يقوم بإخفاء الحزم المسافرة في اتجاه المنبع (upstream) وإزالة الإخفاء عن الحزم المسافرة في اتجاه المصب (downstream). "unpacker" هو نفس الشيء، مطبق في الاتجاه المعاكس.
عادةً، يتم إعداد unpacker بالقرب من الخادم، مع توجيه remote_addr الخاص به إلى address:port الخاص بالاستماع للخادم. يتم إعداد واحد أو أكثر من packer بالقرب من العملاء، موجهة إلى addr:port الخاص بالاستماع للـ unpacker. يجب أن تحتوي جميع الـ packers والـ unpackers على تكوينات متطابقة. أخيرًا، يتصل العملاء بـ addr:port الخاص بالاستماع للـ packer. يقوم الـ packer بإخفاء أي حركة مرور يتلقاها ويرسلها إلى الـ unpacker، الذي يقوم بإزالة الإخفاء وإعادة توجيهها إلى الخادم.
raw data obfuscated data raw data
UDP Client ---------- Packer =============== Unpacker ---------- UDP server
upstream ==> <== downstream
لهذا: اكتب كودًا، وليس تكوينًا. ببساطة قم ببناء خط الأنابيب (pipeline) المطلوب من الـ packers المتاحة وقم بإنشاء packer الخاص بك. انظر إلى script.py للحصول على مثال.