Serverin məhv edilməsi ilə bağlı haker oyununun arxa hissəsi necə yaradılıb

Serverin məhv edilməsi ilə bağlı haker oyununun arxa hissəsi necə yaradılıb
Serverin məhv edilməsi ilə lazer axtarışımızın necə təşkil edildiyini sizə izah etməyə davam edirik. Əvvəlkidən başlayın axtarışın həlli ilə bağlı məqalə.

Ümumilikdə, oyunun arxa tərəfində bu məqalədə təhlil edəcəyimiz 6 memarlıq vahidi var idi:

  1. Oyun mexanizmlərinə cavabdeh olan oyun obyektlərinin arxa hissəsi
  2. VPS-də backend və sayt məlumat mübadiləsi avtobusu
  3. Backend sorğularından (oyun elementləri) Arduino və saytdakı aparatlara tərcüməçi
  4. Relelərə nəzarət etmək üçün məsul olan Arduino tərcüməçidən əmrlər aldı və faktiki işi gördü.
  5. Faktiki cihazlar: fanat, çələnglər, döşəmə lampaları və s.
  6. Frontend - oyunçuların cihazları idarə etdiyi Falcon veb saytının özü

Gəlin onların hər birinə keçək.

Oyun obyektlərinin arxa hissəsi

Backend bir yay yükləmə proqramı kimi həyata keçirildi: bir neçə istirahət nəzarətçisi, veb-soket son nöqtəsi və oyun məntiqi ilə xidmətlər var idi.

Yalnız üç nəzarətçi var idi:

  • Megatron. Cari Megatron səhifəsi GET sorğuları vasitəsilə göndərilib: enerjini yandırmazdan əvvəl və sonra. Lazer POST sorğusu vasitəsilə atəş etdi.
  • Tilde səhifələrinin səhifə adı ilə xidmət göstərilməsi üçün xəritələşdirilməsi. Tilde ixrac üçün orijinal adlarla deyil, daxili ID və uyğunluq məlumatları ilə səhifələr hazırlayır.
  • Pseudo-yüksək yüklü server captcha xidmət etmək üçün Captcha nəzarətçisi.

Websocket son nöqtəsi qadcetləri idarə etmək üçün istifadə edilmişdir: lampalar, çələnglər və məktublar. O, bütün oyunçulara cihazın cari vəziyyətini sinxron şəkildə göstərmək üçün seçilib: onun aktiv və ya sönük olması, aktiv olub-olmaması, hazırda divarda hərfin hansı rəngdə işıqlandırılması. Lazeri yandırma işini bir az çətinləşdirmək üçün biz çələng və lazerə eyni giriş və parol admin/admin ilə avtorizasiya əlavə etdik.

Oyunçular çələngləri yandıraraq test edə və eyni şeyi lazerlə təkrarlaya bilərdilər.

Oyunçuları lazımsız seçimlə əzab verməmək üçün belə mənasız bir giriş-parol cütünü seçdik.

Tapşırığı bir az daha maraqlı etmək üçün otaqda cihaz identifikatorları kimi mongodb-dan obyekt identifikatorlarından istifadə edilmişdir.

ObjectId zaman damgasını ehtiva edir: biri cihaz identifikatoru əsasında götürülən iki təsadüfi dəyər, ikincisi isə onu yaradan prosesin pidi və sayğac dəyərinə əsaslanır. Lazer cihazının identifikatorunun seçilməsi daha maraqlı olsun deyə, müəyyən aralıqlarla və müxtəlif pid prosesləri ilə, lakin ümumi sayğacla yaradılan identifikatorları etmək istədim. Bununla belə, sonda hər kəs yalnız sayğac dəyəri ilə fərqlənən identifikatorlarla başladı. Bu, addımı çox sadə etdi və objectId strukturunun təhlilini tələb etmədi.

Backend sorğularından tərcüməçi

Python skriptitaymerlər üzərində işləyən və onları oyun abstraksiyalarından fiziki modelə çevirən. Məsələn, "döşəmə lampasını yandırın" → "rele N2 yandırın".

Skript RabbitMQ növbəsinə qoşuldu və sorğuları növbədən Arduino-ya ötürdü. O, həmçinin işığın paralel keçidinin məntiqini həyata keçirdi: bəzi cihazlarla birlikdə onların üzərindəki işıq yandırıldı, məsələn, ilkin olaraq Megatron-a enerji verildikdə səhnə işığı ilə işıqlandırıldı. Bütün səhnənin kinematoqrafiyası üçün işıqlandırma dizaynı layihəmizin prodüseri və quruluşçu rəssamı İlya Serovun böyük əməyi haqqında ayrıca bir hekayədir və biz bu barədə ayrıca yazıda danışacağıq.

Tərcüməçi həm də taymerdən istifadə edərək parçalayıcının işə salınması və təsvirin televizora ötürülməsi məntiqinə cavabdeh idi: parçalayıcının işə salınması üçün taymer, qışqıran kapibara, oyunun sonunda reklam çarxı.

Megatron tokeninin yaradılması məntiqi necə qurulmuşdur

Test atışı

Hər 25 saniyədən bir yeni bir token yaradıldı və lazeri 10/10 gücdə 255 saniyə yandırmaq üçün istifadə edilə bilərdi. -a keçid Megatron kodu ilə github.

Daha sonra lazer 1 dəqiqə soyudu - bu müddət ərzində o, mövcud deyildi və yeni çəkiliş sorğularını qəbul etmədi.

Bu güc ipdən yanmaq üçün kifayət etmədi, lakin istənilən oyunçu Megatron-u atəşə tuta və lazer şüasını hərəkətdə görə bilərdi.

Token yaratmaq üçün MD5 hashing alqoritmi istifadə edilmişdir. Və sxem işləndi MD5-dən MD5 + sayğac + gizli döyüş nişanı üçün və sınaq nişanı üçün sirr olmadan.

MD5, dəstəkçimiz Pavelin etdiyi kommersiya layihəsinə istinaddır. Cəmi bir neçə il əvvəl bu layihə MD5-dən istifadə edirdi və o, layihə memarına bunun köhnəlmiş şifrələmə alqoritmi olduğunu deyəndə MD5-dən MD5-dən istifadə etməyə başladılar. Ən noob layihəni mümkün etmək qərarına gəldiyimiz üçün o, hər şeyi xatırladı və kiçik bir istinad etmək qərarına gəldi.

Döyüş atışı

Megatron-un döyüş rejimi 100 vatt gücündə 3% lazer gücüdür. Bu, çəki saxlayan ipdən yanmaq, akvariumu qırmaq və serveri su ilə doldurmaq üçün 2 dəqiqə kifayətdir.

Layihənin Github-da bir neçə ipucu buraxdıq: daha doğrusu, test və döyüş tokenlərinin eyni sayğac göstəricisi əsasında yaradıldığını başa düşmək olar. Döyüş nişanı vəziyyətində, əks qiymətə əlavə olaraq, son iki simvol istisna olmaqla, bu mahiyyətin dəyişdirilməsi tarixində demək olar ki, tamamilə qalan bir duz da istifadə olunur.

Bu məlumatları bilməklə, duzun son 2 simvolunu çeşidləmək və əslində bunun üçün onaltılıq sistemə çevrilmiş Lost-dan rəqəmlərin istifadə edildiyini öyrənmək mümkün oldu.

Sonra oyunçular sayğac dəyərini tutmalı (test nişanını təhlil edərək) və növbəti sayğac dəyərindən və əvvəlki addımda seçilmiş duzdan istifadə edərək döyüş nişanı yaratmalı idilər.

Sayğac sadəcə olaraq hər sınaq atışı ilə və hər 25 saniyədən bir artırılır. Bu barədə heç yerdə yazmadıq, bu kiçik bir oyun sürprizi olmalı idi.

Captcha qarşılıqlı əlaqə xidməti

Oyun dünyasında bu, fanatı işə salmaq və flipçartı işarə ilə açmaq üçün yüklənməli olan eyni captcha idi. Kameranın yanında yük monitorinqi olan bir noutbuk var idi.

Serverin məhv edilməsi ilə bağlı haker oyununun arxa hissəsi necə yaradılıb

Xidmət Cari yük kimi monitorinqdə nə göstəriləcəyini hesabladım: temperatur və CPU Fan. Metriklər vaxt bazası məlumat bazasına köçürüldü və qrafana tərəfindən tərtib edildi.

Son 5 saniyədə captcha-nı göstərmək üçün 50-dən çox sorğu olubsa, yük sabit + təsadüfi sayda addımlarla artdı. Hesablama belə idi ki, 100% yük iki dəqiqə ərzində əldə edilə bilər.

Əslində, xidmətdə son oyunda göstəriləndən daha çox məntiq var idi: biz monitoru elə yerləşdirdik ki, yalnız CPU Fanının fırlanması görünsün.

Axtarışın əvvəlində onlar Grafan-ı Falcon saytından əlçatan buraxmaq istəyirdilər. Lakin o, həmçinin backend tətbiqi hesabatından Springboot metriklərini ehtiva edir, onları təmizləməyə vaxtımız yox idi, ona görə də ona girişi bloklamaq qərarına gəldik. Və haqlı olaraq - hətta axtarışın əvvəlində də bəzi oyunçular tətbiqin Springboot çərçivəsində yazıldığını təxmin etdilər və hətta bəzi xidmətlərin adlarını qazdılar.

Hostinq və məlumat avtobusu

Məlumatı arxa hissədən sayta, RabbitMQ-nun işlədiyi VPS serverinə ötürmək üçün alət.

Backend və məlumat avtobusu açıq saxlanıldı bizim VPS. Onun gücü ekranda gördüyünüz kompüterlə müqayisə oluna bilərdi: iki giqabayt operativ yaddaşa malik 2 nüvəli VPS. Tarif resurslar üçün hesablanıb, çünki pik yük yalnız bir neçə günə planlaşdırılıb - qısa müddət ərzində VPS yükləməyi planlaşdıran müştərilərimiz bunu edir. Sonra məlum oldu ki, yük gözlədiyimizdən çox olub və sabit tarif daha sərfəli olacaq. Axtarış etsəniz, xətt tariflərini seçin turbo.

Serveri DDoSa-dan qorumaq üçün Cloudflare-dən istifadə etdik.

VPS-nin hər şeyə şərəflə tab gətirdiyini söyləməyə dəyər.

Relelərə nəzarət etmək üçün məsul olan Arduino tərcüməçidən əmrlər aldı və faktiki işi gördü.

Bu, daha çox layihənin aparat hissəsi haqqında növbəti məqalənin mövzusudur: arxa uç sadəcə olaraq xüsusi releyi işə salmaq üçün sorğular göndərirdi. Elə oldu ki, backend demək olar ki, bütün qurumları tanıyırdı və ondan gələn sorğular “bu obyekti işə salın” kimi görünürdü. Bunu saytın erkən sınağı üçün etdik (hələ bütün Arduino və releləri yığmamışdıq), sonda hər şeyi belə buraxdıq.

Frontend

Tez tilde üzərində sayt yaratdıq, bir iş günü çəkdi və büdcəmizə 30 min qənaət etdi.

Başlanğıcda biz sadəcə saytı ixrac etməyi və çatışmayan məntiqi əlavə etməyi düşündük, lakin bunu etməyimizi qadağan edən istifadə şərtləri ilə qarşılaşdıq.

Biz lisenziyanı pozmağa hazır deyildik, ona görə də iki variant var idi: hər şeyi özümüz həyata keçirmək və ya birbaşa Tilda ilə əlaqə saxlamaq, layihə haqqında danışmaq və kodu dəyişdirmək üçün icazə istəmək.

Biz ikinci variantı seçdik və onlar bizi nəinki yarı yolda qarşıladılar, hətta bizə bir illik pulsuz biznes hesabı da verdilər, buna görə onlara çox minnətdarıq. Onlara Sokolun veb-sayt dizaynını göstərmək çox yöndəmsiz idi.

Nəticədə elementar cihazlara sorğu göndərmək üçün js məntiqini ön hissəyə əlavə etdik və oyun elementlərini yandırıb-söndürmək üçün düymələrin üslublarını bir qədər dəyişdirdik.

Veb dizayn

Ayrı bir fəsilə dəyər olan axtarışların tarixi.

Biz sadəcə köhnə sayt deyil, dizaynın bütün əsas qaydalarını pozan tamamilə iyrənc bir sayt yaratmaq istədik. Eyni zamanda, inandırıcılığı qorumaq vacib idi: o, KBB hekayəsini pozmamalı, müəllifin iddialılığını nümayiş etdirməli idi və oyunçular belə bir saytın mövcud ola biləcəyinə və hətta müştərilər gətirə biləcəyinə inanmalı idilər. Və gətirdi! Oyun davam edərkən veb saytlar yaratmaq üçün bizimlə iki dəfə əlaqə saxlanıldı.

Əvvəlcə daha çox gif və parlaq elementlər daxil etməyə çalışaraq dizaynı özüm etdim. Ancaq 10 illik dizayner ərim çiyninin üstündən baxdı və "çox yaxşı" kimi rədd etdi. Dizayn qaydalarını pozmaq üçün onları bilmək lazımdır.

Serverin məhv edilməsi ilə bağlı haker oyununun arxa hissəsi necə yaradılıb

Davamlı ikrah hissi doğuran bir neçə rəng birləşmələri var: yaşıl və qırmızı bərabər zənginlik, boz və çəhrayı, mavi və qəhvəyi. Sonda əsas rənglər kimi qırmızı və yaşılın birləşməsinə qərar verdik, pişiklə giflər əlavə etdik və stok fotodan Sokolovun özünün 3-4 şəklini seçdik. Mənim yalnız bir neçə tələbim var idi: bir-iki ölçüdə yaraşmayan kostyum geyinmiş və “peşəkar studiyada fotosessiya”da olan orta yaşlı kişi. Test üçün dostlarına göstərdilər və “bunu necə bəyənirsən?” deyə soruşdular.

Dizaynın hazırlanması zamanı ərim hər yarım saatdan bir uzanmalı idi; helikopter uçmağa başladı. Paşa, gözlərini qorumaq üçün ön tərəfi tamamladıqdan sonra tərtibatçı konsolunu ekranın çox hissəsinə açmağa çalışdı.

Faktiki cihazlar

Fanlar və işıqlar bərk vəziyyətdə olan relelər vasitəsilə quraşdırılmışdı ki, onlar dərhal tam gücdə yanmasınlar - beləliklə, güc monitorinqlə paralel olaraq artsın.

Ancaq bu barədə növbəti yazıda, oyunun aparat hissəsi və saytın faktiki tikintisi haqqında danışacağıq.

Ayıq qalaq!

Serveri məhv etmək axtarışı haqqında digər məqalələr

Serverin məhv edilməsi ilə bağlı haker oyununun arxa hissəsi necə yaradılıb

Mənbə: www.habr.com

Добавить комментарий