چگونه باطن یک بازی هکر در مورد از بین بردن سرور ایجاد شد

چگونه باطن یک بازی هکر در مورد از بین بردن سرور ایجاد شد
ما همچنان به شما می گوییم که تلاش لیزری ما با تخریب سرور چگونه ترتیب داده شد. از قبلی شروع کنید مقاله در مورد حل کوئست.

در مجموع، بک‌اند بازی دارای 6 واحد معماری بود که در این مقاله به تحلیل آن‌ها می‌پردازیم:

  1. باطن موجودیت های بازی که مسئول مکانیسم های بازی بودند
  2. باطن و گذرگاه تبادل اطلاعات سایت در VPS
  3. مترجم درخواست های باطن (عناصر بازی) به آردوینو و سخت افزار در سایت
  4. آردوینو که وظیفه کنترل رله ها را بر عهده داشت، دستورات را از مترجم دریافت کرد و کار واقعی را انجام داد.
  5. دستگاه های واقعی: پنکه، گلدسته، چراغ های کف و غیره.
  6. Frontend - خود وب سایت فالکون که بازیکنان از طریق آن دستگاه ها را کنترل می کردند

بیایید هر یک از آنها را مرور کنیم.

پس زمینه موجودیت های بازی

Backend به عنوان یک برنامه راه‌اندازی فنری پیاده‌سازی شد: چندین کنترلر استراحت، یک نقطه پایانی وب سوکت و خدماتی با منطق بازی داشت.

فقط سه کنترلر وجود داشت:

  • مگاترون. صفحه فعلی مگاترون از طریق درخواست های GET ارسال شد: قبل و بعد از روشن کردن برق. لیزر از طریق درخواست POST شلیک شد.
  • نگاشت صفحات تایلد به طوری که با نام صفحه ارائه شوند. Tilde صفحاتی را برای صادرات نه با نام اصلی، بلکه با شناسه داخلی و اطلاعات مطابقت تولید می کند.
  • کنترلر کپچا برای ارائه کپچای سرور شبه بار بالا.

نقطه پایانی Websocket برای کنترل وسایل مورد استفاده قرار گرفت: لامپ ها، گلدسته ها و حروف. برای نمایش همزمان وضعیت فعلی دستگاه برای همه بازیکنان انتخاب شده است: روشن یا خاموش، فعال یا نه، چه رنگی از حرف در حال حاضر روی دیوار روشن است. برای اینکه کار روشن کردن لیزر را کمی دشوارتر کنیم، مجوز را با همان لاگین و رمز عبور admin/admin به حلقه و لیزر اضافه کردیم.

بازیکنان می‌توانند آن را با روشن کردن حلقه تست کنند و همین کار را با لیزر تکرار کنند.

ما برای اینکه بازیکنان را با انتخاب غیر ضروری عذاب ندهیم، چنین جفت ورود و رمز عبور بی اهمیتی را انتخاب کردیم.

برای اینکه کار کمی جالب‌تر شود، شناسه‌های شی از mongodb به عنوان شناسه دستگاه در اتاق استفاده شد.

ObjectId حاوی یک مهر زمانی است: دو مقدار تصادفی، که یکی از آنها بر اساس شناسه دستگاه، و دومی بر اساس pid فرآیندی که آن را تولید می کند و مقدار شمارنده گرفته می شود. من می خواستم شناسه های تولید شده را در فواصل زمانی منظم و با فرآیندهای pid مختلف اما با یک شمارنده مشترک ایجاد کنم تا انتخاب شناسه دستگاه لیزری جالب تر باشد. با این حال، در پایان، همه با شناسه هایی شروع کردند که فقط در مقدار شمارنده متفاوت بودند. این ممکن است مرحله را بسیار ساده کرده باشد و نیازی به تجزیه و تحلیل ساختار objectId نداشته باشد.

مترجم از درخواست های باطن

اسکریپت پایتون، که روی تایمر کار کرد و آنها را از انتزاعات بازی به یک مدل فیزیکی ترجمه کرد. به عنوان مثال، "روشن کردن چراغ کف" → "روشن کردن رله N2".

اسکریپت به صف RabbitMQ متصل شد و درخواست ها را از صف به آردوینو منتقل کرد. همچنین منطق سوئیچینگ نور موازی را اجرا کرد: همراه با برخی از دستگاه ها، چراغ روی آنها روشن می شد، به عنوان مثال، هنگامی که در ابتدا برق به Megatron عرضه شد، با نور صحنه روشن می شد. طراحی نور برای فیلمبرداری کل صحنه داستانی جداگانه در مورد کار بزرگ ایلیا سروف، تهیه کننده و طراح تولید پروژه ما است و در پستی جداگانه در مورد آن خواهیم گفت.

مترجم همچنین مسئولیت منطق راه‌اندازی خردکن با استفاده از تایمر و انتقال تصویر به تلویزیون را بر عهده داشت: تایمر راه‌اندازی خردکن، یک کاپیبارا جیغ، یک آگهی تبلیغاتی در پایان بازی.

چگونه منطق تولید توکن مگاترون ساختار یافته است

شوت آزمایشی

هر 25 ثانیه یک توکن جدید تولید می شد و می توان از آن برای روشن کردن لیزر به مدت 10 ثانیه با توان 10/255 استفاده کرد. پیوند به github با کد مگاترون.

سپس لیزر به مدت 1 دقیقه خنک شد - در این مدت در دسترس نبود و درخواست های جدید را نمی پذیرفت.

این قدرت برای سوزاندن طناب کافی نبود، اما هر بازیکنی می‌توانست مگاترون را شلیک کند و پرتو لیزر را در عمل ببیند.

برای تولید توکن از الگوریتم هش MD5 استفاده شد. و این طرح اجرا شد MD5 از MD5 + شمارنده + مخفی برای یک نشانه رزمی و بدون راز برای یک نشانه آزمایشی.

MD5 اشاره ای به یک پروژه تجاری است که پاول، پشتیبان ما، انجام داد. همین چند سال پیش این پروژه از MD5 استفاده کرد، و زمانی که او به معمار پروژه گفت که این یک الگوریتم رمزگذاری قدیمی است، آنها شروع به استفاده از MD5 از MD5 کردند. از آنجایی که تصمیم گرفتیم نوب ترین پروژه ممکن را انجام دهیم، او همه چیز را به یاد آورد و تصمیم گرفت یک مرجع کوچک انجام دهد.

شلیک رزمی

حالت رزمی مگاترون 100% قدرت لیزر با 3 وات است. این برای 2 دقیقه کافی است تا از طریق طناب نگهدارنده وزن بسوزد، تا آکواریوم بشکند و سرور پر از آب شود.

ما چند نکته در مورد Github پروژه گذاشتیم: یعنی کد تولید توکن، که از آن می توان فهمید که توکن های آزمایشی و رزمی بر اساس یک نشانگر شمارنده تولید می شوند. در مورد ژتون رزمی، علاوه بر مقدار شمارش، از یک نمک نیز استفاده می شود که به استثنای دو کاراکتر آخر، تقریباً به طور کامل در تاریخچه تغییر این اصل باقی مانده است.

با دانستن این داده ها، می توان 2 نماد آخر نمک را مرتب کرد و در واقع متوجه شد که اعداد Lost که به سیستم هگزادسیمال تبدیل شده اند، برای آن استفاده شده است.

سپس بازیکنان باید مقدار شمارنده (با تجزیه و تحلیل نشانه تست) را می گرفتند و با استفاده از مقدار شمارنده بعدی و نمک انتخاب شده در مرحله قبل، یک نشانه مبارزه تولید می کردند.

شمارنده به سادگی با هر ضربه آزمایشی و هر 25 ثانیه افزایش می یابد. ما جایی در این مورد ننوشتیم، قرار بود یک سورپرایز بازی کوچک باشد.

سرویس تعامل کپچا

در دنیای بازی، این همان کپچای بود که باید بارگذاری می شد تا فن روشن شود و فلیپچارت با یک اشاره باز شود. در کنار دوربین یک لپ تاپ با مانیتورینگ بار قرار داشت.

چگونه باطن یک بازی هکر در مورد از بین بردن سرور ایجاد شد

سرویس من محاسبه کردم که چه چیزی در مانیتورینگ به عنوان بار فعلی نمایش داده شود: دما و فن CPU. معیارها به پایگاه داده پایگاه زمانی منتقل شدند و توسط grafana ترسیم شدند.

اگر در 5 ثانیه گذشته بیش از 50 درخواست برای نمایش کپچا وجود داشته باشد، بارگذاری با تعداد ثابت + تصادفی از مراحل افزایش می یابد. محاسبه این بود که 100٪ بار را می توان در دو دقیقه به دست آورد.

در واقع، منطق بیشتری در سرویس نسبت به بازی نهایی وجود داشت: ما مانیتور را به گونه ای قرار دادیم که فقط چرخش فن CPU قابل مشاهده باشد.

در ابتدای تلاش، آنها می خواستند Grafan را از وب سایت فالکون در دسترس قرار دهند. اما همچنین حاوی معیارهای Springboot از گزارش برنامه باطن بود، که ما زمان پاک کردن آن را نداشتیم، بنابراین تصمیم گرفتیم دسترسی به آن را مسدود کنیم. و به درستی - حتی در ابتدای تلاش، برخی از بازیکنان حدس زدند که برنامه در چارچوب Springboot نوشته شده است و حتی نام برخی از خدمات را کشف کردند.

هاست و گذرگاه داده

ابزاری برای انتقال اطلاعات از باطن به سایت، سرور VPS که RabbitMQ روی آن اجرا می شد.

باطن و گذرگاه داده روشن نگه داشته شدند VPS ما. قدرت آن با کامپیوتری که روی صفحه دیدید قابل مقایسه بود: یک VPS 2 هسته ای با دو گیگابایت رم. این تعرفه برای منابع محاسبه شد، زیرا اوج بار فقط برای چند روز برنامه ریزی شده بود - این همان کاری است که مشتریان ما انجام می دهند که قصد دارند VPS را برای مدت کوتاهی بارگیری کنند. سپس معلوم شد که بار بیشتر از حد انتظار ما بود و تعرفه ثابت سود بیشتری خواهد داشت. اگر کوئست انجام می دهید، تعرفه های خط را انتخاب کنید توربو.

برای محافظت از سرور در برابر DDoSa، ما از Cloudflare استفاده کردیم.

شایان ذکر است که VPS با افتخار همه چیز را تحمل کرد.

آردوینو که وظیفه کنترل رله ها را بر عهده داشت، دستورات را از مترجم دریافت کرد و کار واقعی را انجام داد.

این بیشتر موضوع مقاله بعدی در مورد بخش سخت افزاری پروژه است: باطن به سادگی درخواست هایی برای روشن کردن یک رله خاص ارسال می کند. این اتفاق افتاد که باطن تقریباً همه موجودیت‌ها را می‌شناخت و درخواست‌های آن مانند "روشن کردن این موجودیت" بود. ما این کار را برای آزمایش زودهنگام سایت انجام دادیم (هنوز همه آردوینو و رله ها را مونتاژ نکرده بودیم)، در نهایت همه چیز را همینطور رها کردیم.

Frontend

ما به سرعت سایت را در tilde ایجاد کردیم، یک روز کاری طول کشید و 30 هزار در بودجه ما صرفه جویی کرد.

در ابتدا، ما به این فکر کردیم که به سادگی سایت را صادر کنیم و منطقی را که از دست داده بودیم اضافه کنیم، اما با شرایط استفاده مواجه شدیم که ما را از انجام این کار منع کرد.

ما آمادگی نقض مجوز را نداشتیم، بنابراین دو گزینه وجود داشت: همه چیز را خودمان پیاده کنیم یا مستقیماً با تیلدا تماس بگیریم، در مورد پروژه صحبت کنیم و اجازه تغییر کد را بخواهیم.

ما گزینه دوم را انتخاب کردیم و آنها نه تنها در نیمه راه با ما روبرو شدند، بلکه حتی یک سال حساب تجاری رایگان به ما دادند که از آنها بسیار سپاسگزاریم. نشان دادن طراحی وب سایت سوکول به آنها بسیار ناخوشایند بود.

در نتیجه، منطق js را برای ارسال درخواست به دستگاه‌های ابتدایی به فرانت‌اند متصل کردیم و سبک دکمه‌های روشن و خاموش کردن عناصر بازی را کمی تغییر دادیم.

طراحی وب سایت

تاریخچه جستجوها که ارزش یک فصل جداگانه را دارد.

ما می خواستیم نه فقط یک سایت قدیمی، بلکه یک سایت کاملاً منزجر کننده ایجاد کنیم که تمام قوانین اساسی طراحی را نقض می کند. در عین حال، حفظ باورپذیری مهم بود: باید داستان گوش و حلق و بینی را شکست نمی داد، پرمدعا بودن نویسنده را نشان می داد، و بازیکنان باید باور می کردند که چنین سایتی می تواند وجود داشته باشد و حتی مشتری بیاورد. و او آورد! در حالی که بازی در حال انجام بود، دو بار برای ایجاد وب سایت با ما تماس گرفته شد.

در ابتدا طراحی را خودم انجام دادم و سعی کردم گیف ها و عناصر براق بیشتری را در آن قرار دهم. اما شوهر 10 ساله طراح من از روی شانه اش نگاه کرد و آن را "خیلی خوب" رد کرد. برای شکستن قوانین طراحی، باید آنها را بشناسید.

چگونه باطن یک بازی هکر در مورد از بین بردن سرور ایجاد شد

چندین ترکیب رنگ وجود دارد که احساس انزجار پایدار را برمی انگیزد: سبز و قرمز با غنای یکسان، خاکستری و صورتی، آبی به علاوه قهوه ای. در پایان، ترکیبی از قرمز و سبز را به عنوان رنگ های پایه حل کردیم، گیف هایی با گربه اضافه کردیم و 3-4 عکس از خود سوکولوف را از یک عکس استوک انتخاب کردیم. من فقط چند مورد نیاز داشتم: یک مرد میانسال، پوشیدن کت و شلوار نامناسب چند سایز خیلی بزرگ و در یک ژست "عکسبرداری حرفه ای در استودیو". برای آزمایش، آنها آن را به دوستان نشان دادند و پرسیدند "چطور آن را دوست دارید؟"

در طول فرآیند توسعه طراحی، شوهرم مجبور شد هر نیم ساعت یکبار دراز بکشد؛ هلیکوپتر شروع به پرواز کرد. پاشا سعی کرد تا کنسول توسعه دهنده را در بیشتر قسمت های صفحه نمایش باز کند، در حالی که پایان بخش ظاهری را به پایان رساند - تا از چشمان خود محافظت کند.

دستگاه های واقعی

فن ها و چراغ ها از طریق رله های حالت جامد نصب می شدند تا بلافاصله با قدرت کامل روشن نشوند - به طوری که به موازات نظارت، قدرت افزایش می یابد.

اما در پست بعدی درباره بخش سخت افزاری بازی و ساخت واقعی سایت در این مورد صحبت خواهیم کرد.

گوش به زنگ باشید!

مقالات دیگر در مورد تلاش برای از بین بردن سرور

چگونه باطن یک بازی هکر در مورد از بین بردن سرور ایجاد شد

منبع: www.habr.com

اضافه کردن نظر