Kuinka palvelimen tuhoamista käsittelevän hakkeripelin taustaohjelma luotiin

Kuinka palvelimen tuhoamista käsittelevän hakkeripelin taustaohjelma luotiin
Jatkamme kertomista, kuinka lasertehtävämme palvelimen tuhoamisen kanssa järjestettiin. Aloita edellisestä artikkeli tehtävän ratkaisemisesta.

Yhteensä pelin taustalla oli 6 arkkitehtonista yksikköä, joita analysoimme tässä artikkelissa:

  1. Pelien mekanismeista vastuussa olevien pelien entiteettien tausta
  2. Tausta- ja sivustotiedonvaihtoväylä VPS:ssä
  3. Kääntäjä backend-pyynnöistä (pelielementit) Arduinoon ja laitteistoon paikan päällä
  4. Releiden ohjauksesta vastannut Arduino sai käskyt kääntäjältä ja teki varsinaisen työn
  5. Varsinaiset laitteet: tuuletin, seppeleet, lattialamput jne.
  6. Frontend - itse Falcon-verkkosivusto, josta pelaajat ohjasivat laitteita

Käydään läpi jokainen niistä.

Pelikokonaisuuksien tausta

Backend toteutettiin jousikäynnistyssovelluksena: siinä oli useita lepoohjaimia, websocket-päätepiste ja pelilogiikallisia palveluita.

Ohjainta oli vain kolme:

  • Megatron. Nykyinen Megatron-sivu lähetettiin GET-pyyntöjen kautta: ennen ja jälkeen virran kytkemisen. Laser laukaisi POST-pyynnön kautta.
  • Tilde-sivujen kartoitus niin, että ne näytetään sivun nimen mukaan. Tilde ei valmista vientiin tarkoitettuja sivuja alkuperäisillä nimillä, vaan sisäisillä tunniste- ja vaatimustenmukaisuustiedoilla.
  • Captcha-ohjain palvelemaan pseudokorkean kuormituksen palvelinta captchaa.

Websocket-päätepistettä käytettiin ohjaamaan gadgeteja: lamppuja, seppeleitä ja kirjaimia. Se valittiin näyttämään synkronisesti kaikille pelaajille laitteen tämänhetkinen tila: onko se päällä tai pois päältä, aktiivinen vai ei, minkä värinen kirjain tällä hetkellä palaa seinällä. Tehdäksemme laserin kytkemisestä hieman vaikeampaa, lisäsimme seppeleen ja laserin valtuutuksen samalla kirjautumistunnuksella ja salasanalla admin/admin.

Pelaajat voivat testata sitä kytkemällä seppeleen päälle ja toistamalla saman laserilla.

Valitsimme tällaisen triviaalin kirjautumissalasana-parin, jotta emme kiusaa pelaajia tarpeettomalla valinnalla.

Tehtävän kiinnostavuuden lisäämiseksi huoneessa käytettiin laitetunnisteena mongodb:n objektitunnuksia.

ObjectId sisältää aikaleiman: kaksi satunnaista arvoa, joista toinen otetaan laitetunnisteen perusteella ja toinen sen luovan prosessin pid:n ja laskurin arvon perusteella. Halusin tehdä säännöllisin väliajoin ja erilaisilla pid-prosesseilla generoidut tunnisteet, mutta yhteisellä laskurilla, jotta laserlaitteen tunnisteen valinta olisi mielenkiintoisempaa. Lopulta kaikki aloittivat kuitenkin tunnisteilla, jotka erosivat vain laskurin arvosta. Tämä on saattanut tehdä vaiheesta liian yksinkertaisen, eikä se vaatinut objectId-rakenteen analysointia.

Kääntäjä backend-pyynnöistä

Python-skripti, joka työskenteli ajastimien parissa ja käänsi ne pelien abstraktioista fyysiseksi malliksi. Esimerkiksi "sytytä lattiavalaisin" → "sytytä rele N2".

Skripti liittyi RabbitMQ-jonoon ja siirsi pyynnöt jonosta Arduinoon. Siinä toteutettiin myös rinnakkaisvalojen kytkennän logiikka: yhdessä joidenkin laitteiden kanssa niiden valo sytytettiin, esimerkiksi kun Megatroniin alun perin syötettiin virtaa, se valaistiin näyttämövalolla. Valosuunnittelu koko kohtauksen kuvaamiseen on erillinen tarina projektimme yhteistuottaja ja tuotantosuunnittelija Ilja Serovin hienosta työstä, ja kerromme siitä erillisessä postauksessa.

Kääntäjä vastasi myös logiikasta, jossa silppuri käynnistettiin ajastimella ja kuva lähetettiin televisioon: silppurin laukaisuajastin, huutava kapybara, mainos pelin lopussa.

Miten Megatron-tunnuksen luomisen logiikka rakennettiin

Testilaukaus

Joka 25 sekunti luotiin uusi merkki, jonka avulla laser voitiin kytkeä päälle 10 sekunniksi teholla 10/255. Linkki github Megatron-koodilla.

Laser jäähtyi sitten 1 minuutin ajan - tänä aikana se ei ollut käytettävissä eikä hyväksynyt uusia laukauspyyntöjä.

Tämä voima ei riittänyt polttamaan köyden läpi, mutta kuka tahansa pelaaja saattoi ampua Megatronin ja nähdä lasersäteen toiminnassa.

Tokenin luomiseen käytettiin MD5-hajautusalgoritmia. Ja suunnitelma toimi MD5 MD5:stä + laskuri + salaisuus taistelumerkkinä ja ilman salaisuutta testimerkkinä.

MD5 on viittaus kaupalliseen projektiin, jonka taustakumppanimme Pavel teki. Vain pari vuotta sitten tässä projektissa käytettiin MD5:tä, ja kun hän kertoi projektin suunnittelijalle, että se oli vanhentunut salausalgoritmi, he alkoivat käyttää MD5:tä MD5:stä. Koska päätimme tehdä mahdollisimman noob-projektin, hän muisti kaiken ja päätti tehdä pienen referenssin.

Taistelulaukaus

Megatronin taistelutila on 100 % laserteho 3 watilla. Tämä riittää 2 minuutiksi polttamaan painoa pitäneen köyden läpi, rikkomaan akvaarion ja tulvimaan palvelimen vedellä.

Jätimme muutaman vihjeen projektin Githubiin: nimittäin tokenin generointikoodin, josta saattoi ymmärtää, että testi- ja taistelutunnukset generoidaan saman laskurin perusteella. Taistelumerkkien tapauksessa käytetään vasta-arvon lisäksi myös suolaa, joka on jäänyt lähes kokonaan tämän olemuksen muuttamishistoriaan kahta viimeistä hahmoa lukuun ottamatta.

Tietäen nämä tiedot, oli mahdollista lajitella suolan 2 viimeistä symbolia ja itse asiassa saada selville, että siihen käytettiin Lostin numeroita, jotka on muunnettu heksadesimaalijärjestelmään.

Sitten pelaajien piti ottaa kiinni vasta-arvo (analysoimalla testimerkki) ja luoda taistelumerkki käyttämällä seuraavaa laskurin arvoa ja edellisessä vaiheessa valittua suolaa.

Laskuri yksinkertaisesti kasvaa jokaisella testilaukauksella ja 25 sekunnin välein. Emme kirjoittaneet tästä missään, sen piti olla pieni peliyllätys.

Captcha-vuorovaikutuspalvelu

Pelimaailmassa tämä oli sama captcha, joka piti ladata tuulettimen käynnistämiseksi ja fläppitaulun avaamiseksi vihjeellä. Kameran vieressä oli kannettava tietokone, jossa oli kuormituksen valvonta.

Kuinka palvelimen tuhoamista käsittelevän hakkeripelin taustaohjelma luotiin

Työkalut Laskin mitä valvonnassa näyttää nykyisenä kuormana: lämpötila ja CPU Fan. Mittarit siirrettiin aikakantatietokantaan ja piirsi grafana.

Jos viimeisen 5 sekunnin aikana oli yli 50 pyyntöä näyttää captcha, kuormitus kasvoi kiinteällä + satunnaisella määrällä vaiheita. Laskelma oli, että 100 % kuormitus saavutettaisiin kahdessa minuutissa.

Itse asiassa palvelussa oli enemmän logiikkaa kuin loppupelissä näytettiin: sijoitimme näytön niin, että vain CPU Fanin pyöriminen näkyi.

Tehtävän alussa he halusivat jättää Grafanin saataville Falconin verkkosivuilta. Mutta se sisälsi myös springboot-mittareita taustasovellusraportista, joita emme ehtineet tyhjentää, joten päätimme estää pääsyn siihen. Ja aivan oikein - jopa tehtävän alussa jotkut pelaajat arvasivat, että sovellus oli kirjoitettu springboot-kehykseen ja jopa kaivoivat esiin joidenkin palveluiden nimet.

Isännöinti ja dataväylä

Työkalu tiedon siirtämiseen taustajärjestelmästä sivustolle, VPS-palvelimelle, jolla RabbitMQ oli käynnissä.

Backend ja dataväylä pidettiin päällä meidän VPS. Sen teho oli verrattavissa näytöllä näkemäsi tietokoneeseen: 2-ytiminen VPS, jossa on kaksi gigatavua RAM-muistia. Tariffi veloitettiin resursseista, koska huippukuormitus oli suunniteltu vain muutamaksi päiväksi - näin tekevät asiakkaamme, joka aikoo ladata VPS:n lyhyeksi ajaksi. Sitten kävi ilmi, että kuormitus oli odotettua suurempi ja kiinteä tariffi olisi kannattavampi. Jos teet tehtävän, valitse rivitariffit turbo.

Palvelimen suojaamiseksi DDoSalta käytimme Cloudflarea.

On syytä sanoa, että VPS kesti kaiken kunnialla.

Releiden ohjauksesta vastannut Arduino sai käskyt kääntäjältä ja teki varsinaisen työn

Tämä on enemmänkin seuraavan artikkelin aihe projektin laitteisto-osasta: backend lähetti yksinkertaisesti pyynnöt tietyn releen käynnistämiseksi. Tapahtui niin, että taustaosa tiesi melkein kaikki entiteetit ja sen lähettämät pyynnöt näyttivät "ota tämä entiteetti käyttöön". Teimme tämän sivuston varhaista testausta varten (emme olleet vielä koottaneet kaikkia Arduinoja ja releitä), lopulta jätimme kaiken sellaiseksi.

Käyttöliittymä

Loimme sivuston nopeasti tildelle, se kesti yhden työpäivän ja säästi 30 tuhatta budjetistamme.

Aluksi ajattelimme yksinkertaisesti viedä sivuston ja lisätä puuttuvan logiikan, mutta törmäsimme käyttöehtoihin, jotka estivät meitä tekemästä tätä.

Emme olleet valmiita rikkomaan lisenssiä, joten vaihtoehtoja oli kaksi: toteuttaa kaikki itse tai ottaa suoraan yhteyttä Tildaan, keskustella projektista ja pyytää lupaa koodin vaihtamiseen.

Valitsimme toisen vaihtoehdon, ja he eivät vain ottaneet meidät vastaan ​​puolivälissä, vaan jopa antoivat meille vuoden ilmaisen yritystilin, josta olemme heille erittäin kiitollisia. Oli erittäin kiusallista näyttää heille Sokolin verkkosivujen suunnittelua.

Tämän seurauksena liitimme käyttöliittymään js-logiikan pyyntöjen lähettämiseksi peruslaitteisiin ja muutimme hieman pelielementtien päälle- ja poiskytkemispainikkeiden tyylejä.

Verkkosivujen suunnittelu

Etsintöjen historia, joka on erillisen luvun arvoinen.

Halusimme luoda ei vain vanhanaikaisen sivuston, vaan aivan inhottavan sivuston, joka rikkoo kaikkia suunnittelun perussääntöjä. Samalla oli tärkeää säilyttää uskottavuus: sen ei tarvinnut rikkoa ENT-tarinaa, osoittaa kirjoittajan vaatimattomuutta, ja pelaajien piti uskoa, että tällainen sivusto voisi olla olemassa ja jopa tuoda asiakkaita. Ja hän toi sen! Pelin aikana meihin otettiin yhteyttä kahdesti verkkosivustojen luomiseksi.

Aluksi tein suunnittelun itse, yritin sisällyttää enemmän gifiä ja kiiltäviä elementtejä. Mutta 10-vuotias suunnittelijamieheni katsoi olkapäänsä yli ja piti sitä "liian hyvänä". Jotta voit rikkoa suunnittelusääntöjä, sinun on tiedettävä ne.

Kuinka palvelimen tuhoamista käsittelevän hakkeripelin taustaohjelma luotiin

On olemassa useita väriyhdistelmiä, jotka herättävät jatkuvaa inhoa: vihreä ja punainen yhtä rikkaat, harmaa ja vaaleanpunainen, sininen ja ruskea. Lopulta päädyimme punaisen ja vihreän yhdistelmään perusväreiksi, lisäsimme gifit kissan kanssa ja valitsimme 3-4 valokuvaa Sokolovista itsestään. Minulla oli vain muutama vaatimus: keski-ikäinen mies, yllään huonosti istuva puku pari kokoa liian iso ja "ammattimaisessa studiokuvauksessa". Testiä varten he näyttivät sen ystäville ja kysyivät "miten pidät siitä?"

Suunnittelun kehitysprosessin aikana mieheni piti mennä makuulle puolen tunnin välein, helikopteri alkoi lentää. Pasha yritti avata kehittäjäkonsolin suurimmalle osalle näytöstä, kun hän viimeisteli käyttöliittymän - suojatakseen silmiään.

Varsinaiset laitteet

Tuulettimet ja valot asennettiin puolijohdereleiden kautta, jotta ne eivät heti syttyisi täydellä teholla - jotta teho kasvaisi samanaikaisesti valvonnan kanssa.

Mutta puhumme tästä seuraavassa viestissä, pelin laitteisto-osasta ja sivuston varsinaisesta rakentamisesta.

Pysy kanavalla!

Muita artikkeleita palvelimen tuhoamisesta

Kuinka palvelimen tuhoamista käsittelevän hakkeripelin taustaohjelma luotiin

Lähde: will.com

Lisää kommentti