مرحباً هبر!
في
الجزء الأول ، تم النظر في بروتوكول مراسلة POCSAG. تم النظر في الرسائل الرقمية ، والآن سننتقل إلى المزيد من الرسائل "الكاملة" بتنسيق ASCII. وعلاوة على ذلك ، هو أكثر إثارة للاهتمام فك شفرة لهم ، ل سوف يكون الإخراج نص مقروء.
بالنسبة لأولئك الذين يرغبون في كيفية عمل هذا ، واصلت تحت الخفض.
استقبال إشارة
أولاً ، يجب استلام الإشارة ، التي نستخدم لها نفس مستقبل rtl-sdr وبرنامج HDSDR. نحن نعلم بالفعل من الجزء الأول أن رسائل الترحيل يمكن أن تكون رقمية (المحتويات فقط أرقام من 0 إلى 9 ، والحرف U هو "قبيح" ، ومسافة وزوج من الأقواس) والحروف الأبجدية الرقمية ، والمحتويات عبارة عن أحرف ASCII كاملة. بطبيعة الحال ، لا نعرف مقدمًا نوع الرسالة (لا يزال من غير الممكن فك تشفيرها "عن طريق الأذن") ، لذلك عند التسجيل نختار ببساطة رسالة أكثر أصالة.

لقد تم بالفعل النظر في برنامج تحويل ملف wav إلى دفق بت ، لذلك عرض النتيجة على الفور - تبدو رسالة الترحيل ككل كما يلي:

تكون بعض الميزات مرئية للعين المجردة على الفور - على سبيل المثال ، يمكن ملاحظة أن تسلسل البداية 01010101010101 يتكرر مرتين. أي لم تعد هذه الرسالة أطول ، بل تتكون أساسًا من رسالتين "ملتصقتين" معًا ، ولكن المعيار لا يحظرها.
فك التشفير
للبدء ، استرجع المحتويات الموجزة
للجزء السابق . تبدأ رسالة الترحيل برأس طويل 0101010101 ، متبوعًا بتسلسل من "الحزم" الموضحة في الصورة كـ Batch1..N:

تبدأ كل حزمة بتسلسل بدء تشغيل "رمز مزامنة الإطارات" (01111100 ...) متبوعًا بكتل 32 بت. يمكن لكل كتلة تخزين عنوان أو نص رسالة.
آخر مرة نظرنا فيها في الرسائل الرقمية فقط ، نحن مهتمون الآن برسائل ASCII. بادئ ذي بدء ، تحتاج إلى معرفة كيفية التمييز بينهما. للقيام بذلك ، نحتاج إلى حقل "بتات الوظيفة" - إذا كانت هاتان البتاتتان 00 ، فستكون الرسالة رقمية ، إذا كانت 11 ، ثم نصية.
كما يتضح من الشكل ، يتم تخصيص 20 بت لحقل الرسالة ، والذي يناسب تمامًا شفرة BCD ذات 5-بت ، إذا كانت الرسالة رقمية. ولكن إذا كانت الرسالة نصية ، فلا يمكن احتواء الكثير من النص على 20 بت ، ولا يمكن تقسيم 20 على 7 أو 8. ويمكن افتراض أن الإصدار الأول من البروتوكول (وتم إنشاؤه بالفعل في عام 1982) يدعم الرسائل الرقمية فقط (
نعم ومن غير المرجح أن تظهر أجهزة الاستدعاء الأولى لتلك السنوات على أنابيب nixie أكثر ) ، وعندها فقط ، في الإصدار التالي ، تمت إضافة دعم ASCII. لكن منذ ذلك الحين لم يعد من الممكن انتهاك معيار التنسيق ، فقد كان أسهل - يتم دمج تيار البتات كما هو (يتم استخراج 20 بت من كل رسالة وإضافتها إلى نهاية المخزن المؤقت) ، وعندها فقط ، في النهاية ، يتم فك تشفير كل هذا إلى أحرف.
ضع في اعتبارك مجموعة واحدة من الرسائل المستلمة (تتم إضافة مسافات للوضوح):
0 0001010011100010111111110010010 1 00010100000110110011 11100111001 1 01011010011001110100 01111011100 1 11010001110110100100 11011000100 1 11000001101000110100 10011110111 1 11100000010100011011 11101110000 1 00110010111011001101 10011011010 1 00011001011100010110 10011000010 1 10101100000010010101 10110000101 1 00010110111011001101 00000011011 1 10100101000000101000 11001010100 1 00111101010101101100 11011111010
في السطر الأول ، تشير "0" في البتة الأولى إلى أن هذا حقل عنوان ، بينما تشير "11" في البتات 20-21 إلى أن هذه الرسالة رمزية. بعد ذلك ، خذ فقط 20 بت من كل سطر وأضفها معًا.
نحصل على تسلسل البت التالي:
00010100000110110011010110100110011101001101000111011010010011000001101000 11010011100000010100011011001100101110110011010001100101110001011010101100 000010010101000101101110110011011010010100000010100000111101010101101
يستخدم بروتوكول POCSAG ASCII ذي 7 بتات ، لذا قسّم الخط إلى كتل من 7 بتات:
0001010 0000110 1100110 1011010 0110011 1010011 ...
نحن نحاول فك رموز رموز الأحرف (يتم بسهولة غوغل جدول ASCII على الإنترنت) ، و ... نحصل على القمامة في الإخراج. مرة أخرى ، افتح الوثائق وابحث عن العبارة الدقيقة "يتم وضع أحرف ASCII من اليسار إلى اليمين (من MSB إلى LSB). يرسل LSB أولاً. ". أي أولاً ، يتم إرسال البتة ذات الترتيب المنخفض ، ثم البتة ذات الترتيب العالي - من أجل فك التشفير الصحيح لرموز ASCII ، يجب قلب خطوط 7 بت.
لتجنب القيام بذلك يدويًا ، نكتب شفرة Python:
def parse_msg(block): msgs = "" for cw in range(16): cws = block[32 * cw:32 * (cw + 1)]
نتيجة لذلك ، نحصل على التسلسل التالي (البتات ، رموز الأحرف ، والأحرف نفسها):
0101000 40 ( 0110000 48 0 0110011 51 3 0101101 45 - 1100110 102 f 1100101 101 e 1100010 98 b 0101101 45 - 0110010 50 2 0110000 48 0 0110001 49 1 0111001 57 9 0100000 32 0110001 49 1 0110011 51 3 0111010 58 : 0110011 51 3 0110001 49 1 0111010 58 : 0110100 52 4 0110101 53 5 0100000 32 0101010 42 * 0110100 52 4 0110111 55 7 0110110 54 6 0101001 41 ) 0100000 32 1000001 65 A 1010111 87 W 1011010 90 Z
ادمج الأحرف معًا واحصل على السطر: "(03-feb-2019 13:31:45 * 476) AWZ". كما وعدت في بداية المقال ، فإن النص قابل للقراءة تمامًا.
بالمناسبة ، هناك نقطة أخرى مثيرة للاهتمام وهي أنه ، كما ترون ، يستخدم البروتوكول ASCII 7 بت. لا تتوافق الشخصيات السيريلية مع هذا النطاق ، لذلك يبقى السؤال الخاص بكيفية وميض أجهزة الاستدعاء للغة الروسية مفتوحًا. إذا كان أي شخص يعرف ، اكتب التعليقات.
الاستنتاجات
بالطبع ، لم يتم فهم البروتوكول بشكل كامل ، ولكن الجزء الأكثر إثارة قد تم القيام به ، ثم يبقى الروتين ، والذي لم يعد مثيرًا للاهتمام. كحد أدنى ، لا يوجد تشفير لعناوين المستلمين (رموز الشفرة) ، ولم يتم تنفيذ دعم لرمز تصحيح الأخطاء (BCH Check Bits) - وهذا سيسمح بتصحيح ما يصل إلى 2 بت "مدلل" أثناء الإرسال. ومع ذلك ، لم يكن الهدف هو إنشاء وحدة فك ترميز كاملة - فهناك بالفعل أجهزة فك التشفير هذه ، وهناك حاجة إلى وحدة أخرى.
يمكن لأولئك الذين يريدون تجربة فك تشفير الرسائل باستخدام rtl-sdr القيام بذلك بأنفسهم باستخدام برنامج
PDW المجاني. لا يتطلب التثبيت ، بعد بدء التشغيل ، من الضروري إعادة توجيه إخراج HDSDR إلى إدخال PDW باستخدام برنامج Virtual Audio Cable وتحديد الجهاز المناسب في إعدادات صوت PDW.
تبدو نتيجة البرنامج كما يلي:

في هذا الموضوع ، يمكن اعتبار رسائل الترحيل مغلقة. يمكن لأولئك الذين يرغبون في دراسة الموضوع بمزيد من التفصيل دراسة الرموز المصدر لبرنامج
multimon-ng ، والذي يمكنه فك تشفير العديد من البروتوكولات ، بما في ذلك POCSAG و FLEX.