كيف تم إنشاء الواجهة الخلفية للعبة قرصنة حول تدمير الخادم

كيف تم إنشاء الواجهة الخلفية للعبة قرصنة حول تدمير الخادم
نستمر في إخبارك كيف تم ترتيب مهمة الليزر الخاصة بنا مع تدمير الخادم. ابدأ في السابق مقالة عن حل المهمة.

في المجمل، كانت الواجهة الخلفية للعبة تحتوي على 6 وحدات معمارية، والتي سنقوم بتحليلها في هذا المقال:

  1. الواجهة الخلفية لكيانات اللعبة التي كانت مسؤولة عن آليات اللعبة
  2. ناقل تبادل بيانات الواجهة الخلفية والموقع على VPS
  3. مترجم من طلبات الواجهة الخلفية (عناصر اللعبة) إلى Arduino والأجهزة في الموقع
  4. اردوينو، الذي كان مسؤولاً عن التحكم في المرحلات، تلقى الأوامر من المترجم وقام بالعمل الفعلي
  5. الأجهزة الفعلية: المروحة، والأكاليل، ومصابيح الأرضية، وما إلى ذلك.
  6. Frontend - موقع Falcon نفسه، والذي يتحكم اللاعبون من خلاله في الأجهزة

دعونا نذهب من خلال كل واحد منهم.

الخلفية لكيانات اللعبة

تم تنفيذ الواجهة الخلفية كتطبيق تمهيد زنبركي: كان يحتوي على العديد من وحدات التحكم في الراحة ونقطة نهاية مقبس الويب والخدمات مع منطق اللعبة.

لم يكن هناك سوى ثلاثة وحدات تحكم:

  • ميجاترون. تم إرسال صفحة ميجاترون الحالية من خلال طلبات GET: قبل وبعد تشغيل الطاقة. تم إطلاق الليزر من خلال طلب POST.
  • تعيين صفحات التلدة بحيث يتم عرضها حسب اسم الصفحة. تنتج Tilde صفحات للتصدير ليس بأسماء أصلية، ولكن بمعرف داخلي ومعلومات الامتثال.
  • وحدة تحكم Captcha لخدمة رموز التحقق ذات التحميل العالي للخادم.

تم استخدام نقطة نهاية Websocket للتحكم في الأدوات الذكية: المصابيح والأكاليل والرسائل. تم اختياره ليعرض بشكل متزامن لجميع اللاعبين الحالة الحالية للجهاز: سواء كان قيد التشغيل أم لا، نشطًا أم لا، ما هو لون الحرف المضاء حاليًا على الحائط. من أجل جعل مهمة تشغيل الليزر أكثر صعوبة، أضفنا ترخيصًا إلى الطوق والليزر باستخدام نفس معلومات تسجيل الدخول وكلمة المرور admin/admin.

يمكن للاعبين اختباره عن طريق تشغيل الطوق وتكرار الأمر نفسه باستخدام الليزر.

لقد اخترنا هذا الزوج التافه من تسجيل الدخول وكلمة المرور حتى لا نعذب اللاعبين بالاختيار غير الضروري.

ولجعل المهمة أكثر إثارة للاهتمام، تم استخدام معرفات الكائنات من mongodb كمعرفات للأجهزة في الغرفة.

يحتوي ObjectId على طابع زمني: قيمتان عشوائيتان، يتم أخذ إحداهما بناءً على معرف الجهاز، والثانية بناءً على معرف العملية التي تولدها وقيمة العداد. كنت أرغب في إنشاء المعرفات على فترات منتظمة وبعمليات pid مختلفة، ولكن باستخدام عداد مشترك، بحيث يكون اختيار معرف جهاز الليزر أكثر إثارة للاهتمام. ومع ذلك، في النهاية، بدأ الجميع بمعرفات تختلف فقط في قيمة العداد. قد يكون هذا قد جعل الخطوة بسيطة للغاية ولا تتطلب تحليل بنية معرف الكائن.

مترجم من طلبات الخلفية

نص بايثون، الذي عمل على أجهزة ضبط الوقت وترجمها من تجريدات الألعاب إلى نموذج مادي. على سبيل المثال، "قم بتشغيل المصباح الأرضي" ← "قم بتشغيل المرحل N2".

يتصل البرنامج النصي بقائمة انتظار RabbitMQ وينقل الطلبات من قائمة الانتظار إلى Arduino. كما نفذت منطق تبديل الضوء الموازي: جنبا إلى جنب مع بعض الأجهزة، تم تشغيل الضوء عليها، على سبيل المثال، عندما تم توفير الطاقة في البداية لميجاترون، تم إضاءتها بضوء المسرح. تصميم الإضاءة للتصوير السينمائي للمشهد بأكمله هو قصة منفصلة عن العمل الرائع الذي قام به المنتج المشارك ومصمم الإنتاج في مشروعنا إيليا سيروف، وسنتحدث عنه في منشور منفصل.

كان المترجم أيضًا مسؤولاً عن منطق تشغيل آلة التقطيع باستخدام مؤقت ونقل الصورة إلى التلفزيون: مؤقت إطلاق آلة التقطيع، وصراخ كابيبارا، وإعلان تجاري في نهاية اللعبة.

كيف تم تنظيم منطق إنشاء رمز ميجاترون

لقطة اختبارية

كل 25 ثانية يتم إنشاء رمز مميز جديد ويمكن استخدامه لتشغيل الليزر لمدة 10 ثوانٍ بقوة 10/255. رابط ل جيثب مع رمز ميجاترون.

ثم تم تبريد الليزر لمدة دقيقة واحدة - خلال هذا الوقت لم يكن متاحًا ولم يقبل طلبات التصوير الجديدة.

لم تكن هذه القوة كافية لحرق الحبل، ولكن يمكن لأي لاعب إطلاق ميجاترون ورؤية شعاع الليزر أثناء العمل.

تم استخدام خوارزمية التجزئة MD5 لإنشاء الرمز المميز. وقد نجح المخطط MD5 من MD5 + عداد + سر للحصول على رمز قتالي وبدون سر لرمز اختبار.

MD5 هو إشارة إلى مشروع تجاري قام به Pavel، الداعم لنا. منذ عامين فقط، استخدم هذا المشروع MD5، وعندما أخبر مهندس المشروع أنها خوارزمية تشفير قديمة، بدأوا في استخدام MD5 من MD5. نظرًا لأننا قررنا إنشاء أكبر مشروع ممكن، فقد تذكر كل شيء وقرر تقديم مرجع صغير.

طلقة قتالية

وضع القتال في ميجاترون هو قوة ليزر 100٪ بقوة 3 واط. هذا يكفي لمدة دقيقتين لحرق الحبل الذي يحمل الوزن، لكسر الحوض وإغراق الخادم بالماء.

لقد تركنا عدة تلميحات على Github الخاص بالمشروع: وهي رمز إنشاء الرمز المميز، والذي يمكن للمرء أن يفهم من خلاله أن رموز الاختبار والقتال يتم إنشاؤها بناءً على نفس مؤشر العداد. في حالة الرمز القتالي، بالإضافة إلى قيمة العداد، يتم أيضًا استخدام الملح، والذي يتم تركه بالكامل تقريبًا في سجل التغيير لهذا الجوهر، باستثناء الحرفين الأخيرين.

بمعرفة هذه البيانات، كان من الممكن فرز آخر رمزين للملح ومعرفة أن الأرقام من Lost، المحولة إلى النظام السداسي العشري، قد تم استخدامها لذلك.

بعد ذلك ، كان على اللاعبين التقاط قيمة العداد (عن طريق تحليل رمز الاختبار) وإنشاء رمز قتالي باستخدام القيمة التالية للعداد والملح المحدد في الخطوة الأخيرة.

يتزايد العداد ببساطة مع كل لقطة اختبار وكل 25 ثانية. لم نكتب عن هذا في أي مكان، كان من المفترض أن تكون مفاجأة صغيرة في اللعبة.

خدمة تفاعل الكابتشا

في عالم الألعاب، كان هذا هو نفس رمز التحقق الذي يجب تحميله لتشغيل المروحة وفتح الرسم البياني بتلميح. بجانب الكاميرا كان هناك جهاز كمبيوتر محمول مع مراقبة الحمل.

كيف تم إنشاء الواجهة الخلفية للعبة قرصنة حول تدمير الخادم

خدمة لقد حسبت ما سيتم عرضه في المراقبة كالحمل الحالي: درجة الحرارة ومروحة وحدة المعالجة المركزية. تم نقل المقاييس إلى قاعدة بيانات القاعدة الزمنية وتم رسمها بواسطة جرافانا.

إذا كان هناك أكثر من 5 طلبًا لعرض رمز التحقق في آخر 50 ثوانٍ، فسيتم زيادة التحميل بعدد ثابت + عشوائي من الخطوات. كان الحساب هو أنه يمكن تحقيق التحميل بنسبة 100٪ في دقيقتين.

في الواقع، كان هناك منطق في الخدمة أكثر مما تم عرضه في اللعبة النهائية: لقد وضعنا الشاشة بطريقة لا يظهر بها سوى دوران مروحة وحدة المعالجة المركزية.

في بداية المهمة، أرادوا ترك Grafan يمكن الوصول إليه من موقع Falcon الإلكتروني. ولكنه يحتوي أيضًا على مقاييس Springboot من تقرير تطبيق الواجهة الخلفية، والتي لم يكن لدينا الوقت لمسحها، لذلك قررنا منع الوصول إليها. وهذا صحيح - حتى في بداية المهمة، خمن بعض اللاعبين أن التطبيق مكتوب في إطار عمل Springboot وحتى حفروا أسماء بعض الخدمات.

استضافة وحافلة البيانات

أداة لنقل المعلومات من الواجهة الخلفية للموقع، خادم VPS الذي كان يعمل عليه RabbitMQ.

تم الاحتفاظ بالواجهة الخلفية وحافلة البيانات الخادم الافتراضي الخاص بنا. كانت قوته مماثلة للكمبيوتر الذي رأيته على الشاشة: خادم VPS ثنائي النواة مع 2 غيغابايت من ذاكرة الوصول العشوائي. تم فرض التعريفة على الموارد، حيث تم التخطيط للتحميل الأقصى لبضعة أيام فقط - وهذا ما يفعله عملاؤنا الذين يخططون لتحميل VPS لفترة قصيرة من الزمن. ثم اتضح أن الحمل كان أعلى مما توقعنا، وأن التعريفة الثابتة ستكون أكثر ربحية. إذا قمت بمهمة، فاختر تعريفات الخط توربو.

لحماية الخادم من DDoSa، استخدمنا Cloudflare.

تجدر الإشارة إلى أن VPS صمد أمام كل شيء بشرف.

اردوينو، الذي كان مسؤولاً عن التحكم في المرحلات، تلقى الأوامر من المترجم وقام بالعمل الفعلي

هذا هو موضوع المقالة التالية حول جزء الأجهزة من المشروع: أرسلت الواجهة الخلفية ببساطة طلبات لتشغيل مرحل معين. لقد حدث أن الواجهة الخلفية عرفت جميع الكيانات تقريبًا وبدت الطلبات الواردة منها وكأنها "قم بتشغيل هذا الكيان". لقد فعلنا ذلك للاختبار المبكر للموقع (لم نقم بعد بتجميع كل أجهزة Arduino والمرحلات)، وفي النهاية تركنا كل شيء على هذا النحو.

نهاية المقدمة

قمنا بإنشاء الموقع بسرعة، واستغرق الأمر يوم عمل واحد ووفر لنا 30 ألفًا من ميزانيتنا.

في البداية، فكرنا في مجرد تصدير الموقع وإضافة المنطق الذي كنا نفتقده، لكننا واجهنا شروط الاستخدام التي منعتنا من القيام بذلك.

لم نكن مستعدين لانتهاك الترخيص، لذلك كان هناك خياران: تنفيذ كل شيء بأنفسنا أو الاتصال بتيلدا مباشرة والتحدث عن المشروع وطلب الإذن بتغيير الكود.

لقد اخترنا الخيار الثاني ولم يقابلونا في منتصف الطريق فحسب، بل قدموا لنا حسابًا تجاريًا مجانيًا لمدة عام، ونحن ممتنون لهم جدًا لذلك. لقد كان من المحرج للغاية أن نعرض لهم تصميم موقع سوكول الإلكتروني.

ونتيجة لذلك، قمنا بإرفاق منطق js بالواجهة الأمامية لإرسال الطلبات إلى الأجهزة الأساسية، وقمنا بتغيير طفيف في أنماط الأزرار لتشغيل وإيقاف عناصر اللعبة.

تصميم الموقع

تاريخ عمليات البحث، والذي يستحق فصلاً منفصلاً.

لم نرغب في إنشاء موقع قديم فحسب، بل أيضًا موقعًا مثيرًا للاشمئزاز تمامًا ينتهك جميع قواعد التصميم الأساسية. في الوقت نفسه، كان من المهم الحفاظ على المصداقية: كان من الضروري عدم كسر قصة ENT، وإظهار ادعاء المؤلف، ويجب على اللاعبين الاعتقاد بأن مثل هذا الموقع يمكن أن يكون موجودًا وحتى جلب العملاء. وقد أحضره! أثناء سير اللعبة، تم الاتصال بنا مرتين لإنشاء مواقع ويب.

في البداية قمت بالتصميم بنفسي، محاولًا تضمين المزيد من الصور المتحركة والعناصر اللامعة. لكن زوجي المصمم منذ 10 سنوات نظر إلى كتفه ورفضه باعتباره "جيدًا جدًا". لكسر قواعد التصميم، عليك أن تعرفها.

كيف تم إنشاء الواجهة الخلفية للعبة قرصنة حول تدمير الخادم

هناك العديد من مجموعات الألوان التي تثير شعورًا دائمًا بالاشمئزاز: الأخضر والأحمر بنفس الثراء، والرمادي والوردي، والأزرق بالإضافة إلى البني. في النهاية، استقرينا على مزيج من اللونين الأحمر والأخضر كلونين أساسيين، وأضفنا صورًا متحركة مع قطة واخترنا 3-4 صور لسوكولوف نفسه من صورة مخزنة. لم يكن لدي سوى عدد قليل من المتطلبات: رجل في منتصف العمر، يرتدي بدلة غير مناسبة بمقاسين كبيرين جدًا وفي وضعية "جلسة تصوير احترافية في الاستوديو". للاختبار، عرضوه على الأصدقاء وسألوا "كيف تحبه؟"

أثناء عملية تطوير التصميم، كان على زوجي أن يستلقي كل نصف ساعة؛ وبدأت المروحية في الطيران. حاول باشا فتح وحدة تحكم المطور على معظم الشاشة أثناء انتهائه من إنهاء الواجهة الأمامية - لحماية عينيه.

الأجهزة الفعلية

تم تركيب المراوح والأضواء من خلال مرحلات الحالة الصلبة بحيث لا يتم تشغيلها بكامل طاقتها على الفور - بحيث تزداد الطاقة بالتوازي مع المراقبة.

لكننا سنتحدث عن هذا في المقالة التالية، عن الجزء الخاص بالأجهزة في اللعبة والإنشاء الفعلي للموقع.

ترّقب!

مقالات أخرى حول السعي لتدمير الخادم

كيف تم إنشاء الواجهة الخلفية للعبة قرصنة حول تدمير الخادم

المصدر: www.habr.com

إضافة تعليق