Hvernig bakendi tölvuþrjótaleiks um að eyðileggja netþjón var búinn til

Hvernig bakendi tölvuþrjótaleiks um að eyðileggja netþjón var búinn til
Við höldum áfram að segja þér hvernig leysileit okkar með eyðingu netþjónsins var komið fyrir. Byrjaðu í fyrra grein um að leysa verkefnið.

Alls hafði bakendi leiksins 6 byggingareiningar, sem við munum greina í þessari grein:

  1. Bakenda leikjaeininga sem voru ábyrgir fyrir leikkerfi
  2. Backend og síða gagnaskiptarúta á VPS
  3. Þýðandi frá bakendabeiðnum (leikjaþætti) yfir í Arduino og vélbúnað á staðnum
  4. Arduino, sem var ábyrgur fyrir stjórnun liða, fékk skipanir frá þýðandanum og vann verkið.
  5. Raunveruleg tæki: vifta, kransa, gólflampar osfrv.
  6. Frontend - Falcon vefsíðan sjálf, þaðan sem leikmenn stjórnuðu tækjum

Við skulum fara í gegnum hvert þeirra.

Bakendi leikjaeininga

Bakendinn var útfærður sem vorræsiforrit: það var með nokkra hvíldarstýringar, veftengisendapunkt og þjónustu með leikjafræði.

Það voru aðeins þrír stýringar:

  • Megatron. Núverandi Megatron síða var send í gegnum GET beiðnir: fyrir og eftir að kveikt var á straumnum. Lasarinn skaut í gegnum POST beiðnina.
  • Kortleggja tilde síður þannig að þær séu þjónaðar með síðuheiti. Tilde framleiðir síður til útflutnings ekki með upprunalegum nöfnum, heldur með innri auðkenni og samræmisupplýsingum.
  • Captcha stjórnandi til að þjóna gervi-háhlaða miðlara captcha.

Websocket endapunktur var notaður til að stjórna græjum: lömpum, krans og bókstöfum. Það var valið að sýna öllum spilurum samstillt núverandi stöðu tækisins: hvort sem það er kveikt eða slökkt, virkt eða ekki, hvaða litur stafsins er upplýstur á veggnum. Til að gera verkefnið að kveikja á leysinum örlítið erfiðara, bættum við heimildum við kransann og leysirinn með sama notandanafni og lykilorði admin/admin.

Spilarar gætu prófað það með því að kveikja á kransinum og endurtaka það sama með leysinum.

Við völdum svo léttvægt innskráningar-lykilorð par til að kvelja ekki leikmenn með óþarfa vali.

Til að gera verkefnið aðeins áhugaverðara voru auðkenni hlutar frá mongodb notuð sem auðkenni tækja í herberginu.

ObjectId inniheldur tímastimpil: tvö tilviljunarkennd gildi, annað þeirra er byggt á auðkenni tækisins og hið síðara byggt á pid ferlisins sem myndar það og teljaragildi. Mig langaði til að búa til auðkennin sem mynduð voru með reglulegu millibili og með mismunandi pid-ferlum, en með sameiginlegum teljara, svo að val á auðkenni fyrir leysitæki væri áhugaverðara. Hins vegar, á endanum, byrjuðu allir með auðkenni sem voru aðeins mismunandi í teljaragildinu. Þetta gæti hafa gert skrefið of einfalt og þarfnast ekki greiningar á objectId uppbyggingunni.

Þýðandi úr bakendabeiðnum

Python handrit, sem vann að tímamælum og þýddi þá úr leikjauppdrætti yfir í líkamlegt líkan. Til dæmis, „kveiktu á gólflampanum“ → „kveiktu á relay N2“.

Handritið tengdist RabbitMQ biðröðinni og flutti beiðnir úr biðröðinni til Arduino. Það útfærði einnig rökfræði samhliða ljósrofa: ásamt sumum tækjum var kveikt á ljósinu á þeim, til dæmis þegar rafmagn var gefið til Megatron í upphafi var það lýst upp með sviðsljósi. Ljósahönnun fyrir kvikmyndatöku alls senunnar er sérstök saga um frábært verk samstarfsframleiðanda okkar og framleiðsluhönnuðar Ilya Serov, og við munum segja frá því í sérstakri færslu.

Þýðandinn var einnig ábyrgur fyrir rökfræði þess að ræsa tætarann ​​með því að nota tímamæli og senda myndina í sjónvarpið: tímamælirinn til að ræsa tætarann, öskrandi capybara, auglýsingu í lok leiksins.

Hvernig rökfræðin til að búa til Megatron táknið var byggð upp

Prófskot

Á 25 sekúndna fresti var búið til nýtt tákn sem hægt var að nota til að kveikja á leysinum í 10 sekúndur á 10/255 afli. Tengill á github með Megatron kóða.

Laserinn kólnaði síðan í 1 mínútu - á þessum tíma var hann ekki tiltækur og tók ekki við nýjum skotbeiðnum.

Þessi kraftur var ekki nóg til að brenna í gegnum reipið, heldur gat hvaða leikmaður sem er gat skotið Megatron og séð leysigeislann í verki.

MD5 kjötkássa reikniritið var notað til að búa til táknið. Og skipulagið gekk upp MD5 frá MD5 + teljari + leyndarmál fyrir bardagamerki og án leyndarmáls fyrir prufumerki.

MD5 er tilvísun í viðskiptaverkefni sem Pavel, bakvörður okkar, gerði. Fyrir aðeins nokkrum árum síðan notaði þetta verkefni MD5 og þegar hann sagði verkefnisarkitektinum að þetta væri gamaldags dulkóðunaralgrím byrjuðu þeir að nota MD5 frá MD5. Þar sem við ákváðum að gera sem mest noob verkefni sem unnt var, mundi hann allt og ákvað að gera smá tilvísun.

Bardagaskot

Bardagastilling Megatron er 100% leysir afl við 3 wött. Þetta er nóg í 2 mínútur til að brenna í gegnum reipið sem hélt þyngdinni, til að brjóta fiskabúrið og flæða netþjóninn með vatni.

Við skildum eftir nokkrar vísbendingar um Github verkefnisins: nefnilega táknmyndarkóðann, sem hægt er að skilja af því að prófunar- og bardagatáknin eru mynduð út frá sama teljaravísi. Þegar um bardagamerki er að ræða, er auk mótgildisins einnig notað salt, sem er næstum algjörlega skilið eftir í sögunni um að breyta þessum kjarna, að undanskildum tveimur síðustu stöfunum.

Með því að þekkja þessi gögn var hægt að raða í gegnum síðustu 2 tákn saltsins og í raun komast að því að tölurnar frá Lost, umreiknaðar í sextándakerfi, voru notaðar fyrir það.

Síðan þurftu leikmenn að ná teljaragildinu (með því að greina prófunartáknið) og búa til bardagatákn með því að nota næsta teljagildi og saltið sem valið var í fyrra skrefi.

Teljarinn hækkaði einfaldlega með hverju prófunarskoti og á 25 sekúndna fresti. Við skrifuðum hvergi um þetta, þetta átti að koma smá leik á óvart.

Captcha samskiptaþjónusta

Í leikjaheiminum var þetta sama captcha sem þurfti að hlaða inn til að kveikja á viftunni og opna flettitöfluna með vísbendingu. Við hlið myndavélarinnar var fartölva með álagseftirliti.

Hvernig bakendi tölvuþrjótaleiks um að eyðileggja netþjón var búinn til

Service Ég reiknaði út hvað á að sýna í eftirliti sem núverandi álag: hitastig og CPU Fan. Mælingar voru fluttar í tímagrunnsgagnagrunninn og teiknaðar með grafana.

Ef á síðustu 5 sekúndum voru fleiri en 50 beiðnir um að birta captcha, þá jókst álagið um fastan + handahófskenndan fjölda skrefa. Útreikningurinn var sá að hægt væri að ná 100% álagi á tveimur mínútum.

Reyndar var meiri rökfræði í þjónustunni en sýndi sig í síðasta leiknum: við settum skjáinn þannig að aðeins snúningur CPU Fan sást.

Í upphafi leitarinnar vildu þeir skilja Grafann eftir aðgengilega frá heimasíðu Falcon. En það innihélt líka springboot mæligildi úr bakenda umsóknarskýrslunni, sem við höfðum ekki tíma til að hreinsa, svo við ákváðum að loka fyrir aðgang að henni. Og það er rétt - jafnvel í upphafi leitarinnar giskuðu sumir leikmenn á að forritið væri skrifað í springboot ramma og gróf jafnvel upp nöfn sumra þjónustu.

Hýsing og gagnastrætó

Tól til að flytja upplýsingar frá bakendanum yfir á síðuna, VPS netþjóninn sem RabbitMQ var í gangi á.

Bakendinum og gagnastrætóinu var haldið áfram VPS okkar. Kraftur hennar var sambærilegur við tölvuna sem þú sást á skjánum: 2 kjarna VPS með tveimur gígabætum af vinnsluminni. Gjaldskráin var rukkuð fyrir auðlindir, þar sem hámarksálag var fyrirhugað í aðeins nokkra daga - þetta gera viðskiptavinir okkar sem ætla að hlaða VPS í stuttan tíma. Þá kom í ljós að álagið var meira en við bjuggumst við og föst gjaldskrá skilaði meiri hagnaði. Ef þú gerir quest skaltu velja línugjaldskrána túrbó.

Til að vernda netþjóninn gegn DDoSa notuðum við Cloudflare.

Það er þess virði að segja að VPS stóðst allt með sóma.

Arduino, sem var ábyrgur fyrir stjórnun liða, fékk skipanir frá þýðandanum og vann verkið.

Þetta er meira efni næstu greinar um vélbúnaðarhluta verkefnisins: bakendinn sendi einfaldlega beiðnir um að kveikja á tilteknu gengi. Það gerðist svo að bakendinn þekkti næstum allar einingarnar og beiðnir frá henni litu út eins og „kveiktu á þessari aðila“. Við gerðum þetta til að prófa síðuna snemma (við höfðum ekki enn sett saman öll Arduino og relays), á endanum skildum við allt eftir svona.

Að framanverðu

Við bjuggum fljótt til síðuna á tilde, það tók einn virkan dag og sparaði okkur 30 þúsund á kostnaðarhámarkinu.

Upphaflega datt okkur í hug að flytja síðuna einfaldlega út og bæta við rökfræðinni sem okkur vantaði, en við lentum í notkunarskilmálum sem bönnuðu okkur að gera þetta.

Við vorum ekki tilbúin að brjóta leyfið og því voru tveir kostir í boði: að útfæra allt sjálf eða að hafa beint samband við Tildu, tala um verkefnið og biðja um leyfi til að breyta kóðanum.

Við völdum seinni kostinn og þeir hittu okkur ekki bara á miðri leið, heldur gáfu okkur meira að segja árs ókeypis viðskiptareikning, sem við erum þeim mjög þakklát fyrir. Það var mjög óþægilegt að sýna þeim vefsíðuhönnun Sokol.

Fyrir vikið festum við js rökfræði við framenda til að senda beiðnir í grunntæki og breyttum aðeins stíl hnappanna til að kveikja og slökkva á leikþáttum.

Hönnun vefsíðu

Saga leitar, sem er þess virði að vera sérstakt kafla.

Við vildum ekki bara búa til gamaldags síðu heldur algjörlega ógeðslega sem brýtur í bága við allar grundvallarreglur hönnunar. Á sama tíma var mikilvægt að viðhalda trúverðugleika: það þurfti ekki að brjóta háls- og nef- og eyrnasöguna, sýna fram á tilgerð höfundar og leikmenn þyrftu að trúa því að slík síða gæti verið til og jafnvel komið með viðskiptavini. Og hann kom með það! Á meðan leikurinn var í gangi var haft samband við okkur tvisvar til að búa til vefsíður.

Í fyrstu gerði ég hönnunina sjálfur og reyndi að innihalda fleiri gifs og glansandi þætti. En hönnuður eiginmaður minn til 10 ára horfði um öxl og vísaði því á bug sem „of gott“. Til að brjóta hönnunarreglur þarftu að þekkja þær.

Hvernig bakendi tölvuþrjótaleiks um að eyðileggja netþjón var búinn til

Það eru nokkrir litasamsetningar sem vekja varanlega tilfinningu fyrir viðbjóði: grænt og rautt jafnmikið, grátt og bleikt, blátt og brúnt. Á endanum settumst við upp á blöndu af rauðu og grænu sem grunnlitum, bættum við gifsmyndum með kötti og völdum 3-4 myndir af Sokolov sjálfum úr mynd. Ég hafði aðeins nokkrar kröfur: miðaldra karl, klæddur illa passandi jakkafötum nokkrum stærðum of stórum og í „faglegri stúdíómyndatöku“ stellingu. Fyrir prófið sýndu þeir það vinum og spurðu „hvernig líkar þér við það?

Í hönnunarþróunarferlinu þurfti maðurinn minn að fara að leggjast á hálftíma fresti; þyrlan byrjaði að fljúga. Pasha reyndi að opna þróunartölvuna á mestan hluta skjásins á meðan hann kláraði að klára framendann - til að vernda augun.

Raunveruleg tæki

Vifturnar og ljósin voru fest í gegnum solid-state relay svo þau kviknuðust ekki strax á fullu afli - þannig að krafturinn jókst samhliða eftirliti.

En við munum tala um þetta í næstu færslu, um vélbúnaðarhluta leiksins og raunverulega byggingu síðunnar.

Haltu áfram!

Aðrar greinar um leitina til að eyðileggja þjóninn

Hvernig bakendi tölvuþrjótaleiks um að eyðileggja netþjón var búinn til

Heimild: www.habr.com

Bæta við athugasemd