Sut y crëwyd backend gêm haciwr am ddinistrio gweinydd

Sut y crëwyd backend gêm haciwr am ddinistrio gweinydd
Rydym yn parhau i ddweud wrthych sut y trefnwyd ein hymgais laser gyda dinistrio'r gweinydd. Dechrau yn flaenorol erthygl am ddatrys y cwest.

Yn gyfan gwbl, roedd gan gefn y gêm 6 uned bensaernïol, y byddwn yn eu dadansoddi yn yr erthygl hon:

  1. Cefn endidau gêm a oedd yn gyfrifol am fecanweithiau gêm
  2. Bws cyfnewid data ôl-ben a safle ar VPS
  3. Cyfieithydd o geisiadau backend (elfennau gêm) i Arduino a chaledwedd ar y safle
  4. Derbyniodd Arduino, a oedd yn gyfrifol am reoli'r cyfnewid, orchmynion gan y cyfieithydd a gwnaeth y gwaith ei hun
  5. Dyfeisiau gwirioneddol: ffan, garlantau, lampau llawr, ac ati.
  6. Frontend - gwefan Falcon ei hun, y mae chwaraewyr yn rheoli dyfeisiau ohoni

Gadewch i ni fynd trwy bob un ohonynt.

Cefn endidau gêm

Gweithredwyd y backend fel cymhwysiad cist gwanwyn: roedd ganddo sawl rheolydd gorffwys, pwynt terfyn gwe-soced a gwasanaethau gyda rhesymeg gêm.

Dim ond tri rheolydd oedd:

  • Megatron. Anfonwyd y dudalen Megatron gyfredol trwy geisiadau GET: cyn ac ar ôl troi'r pŵer ymlaen. Taniodd y laser trwy'r cais POST.
  • Mapio tudalennau tilde fel eu bod yn cael eu gwasanaethu gan enw tudalen. Mae Tilde yn cynhyrchu tudalennau i'w hallforio nid gydag enwau gwreiddiol, ond gydag ID mewnol a gwybodaeth gydymffurfio.
  • Rheolydd Captcha i wasanaethu captcha gweinydd ffug-llwyth uchel.

Defnyddiwyd endpoint websocket i reoli teclynnau: lampau, garland a llythrennau. Fe'i dewiswyd i arddangos statws cyfredol y ddyfais i bob chwaraewr yn gydamserol: p'un a yw ymlaen neu i ffwrdd, yn weithredol ai peidio, pa liw llythyren sydd wedi'i oleuo ar y wal ar hyn o bryd. Er mwyn gwneud y dasg o droi'r laser ymlaen ychydig yn anoddach, fe wnaethom ychwanegu awdurdodiad at y garland a'r laser gyda'r un mewngofnodi a chyfrinair gweinyddwr / gweinyddwr.

Gallai chwaraewyr ei brofi trwy droi'r garland ymlaen ac ailadrodd yr un peth gyda'r laser.

Dewison ni bâr mewngofnodi-cyfrinair mor ddibwys er mwyn peidio â phoenydio chwaraewyr â dewis diangen.

I wneud y dasg ychydig yn fwy diddorol, defnyddiwyd IDau gwrthrych o mongodb fel dynodwyr dyfais yn yr ystafell.

Mae ObjectId yn cynnwys stamp amser: dau werth ar hap, un ohonynt yn cael ei gymryd yn seiliedig ar ddynodwr y ddyfais, a'r ail yn seiliedig ar pid y broses sy'n ei gynhyrchu a'r gwerth cownter. Roeddwn i eisiau gwneud y dynodwyr a gynhyrchir yn rheolaidd a chyda gwahanol brosesau pid, ond gyda rhifydd cyffredin, fel y byddai dewis dynodwr dyfais laser yn fwy diddorol. Fodd bynnag, yn y diwedd, dechreuodd pawb gyda dynodwyr a oedd yn wahanol yn y gwerth cownter yn unig. Efallai bod hyn wedi gwneud y cam yn rhy syml a heb fod angen dadansoddiad o strwythur objectId.

Ceisiadau cyfieithydd o gefn

Sgript Python, a weithiodd ar amseryddion a'u trosi o dyniadau hapchwarae i fodel ffisegol. Er enghraifft, “trowch y lamp llawr ymlaen” → “trowch y ras gyfnewid N2 ymlaen.”

Cysylltodd y sgript â chiw RabbitMQ a throsglwyddo ceisiadau o'r ciw i Arduino. Roedd hefyd yn gweithredu rhesymeg newid golau cyfochrog: ynghyd â rhai dyfeisiau, cafodd y golau arnynt ei droi ymlaen, er enghraifft, pan gafodd pŵer ei gyflenwi i Megatron i ddechrau, cafodd ei oleuo â golau llwyfan. Mae dyluniad goleuo ar gyfer sinematograffi'r olygfa gyfan yn stori ar wahân am waith gwych ein cyd-gynhyrchydd prosiect a'r dylunydd cynhyrchu Ilya Serov, a byddwn yn dweud amdano mewn post ar wahân.

Roedd y cyfieithydd hefyd yn gyfrifol am y rhesymeg o lansio'r peiriant rhwygo gan ddefnyddio amserydd a throsglwyddo'r ddelwedd i'r teledu: yr amserydd ar gyfer lansio'r peiriant rhwygo, capybara sgrechian, hysbyseb ar ddiwedd y gêm.

Sut y cafodd y rhesymeg ar gyfer cynhyrchu tocyn Megatron ei strwythuro

Saethiad prawf

Bob 25 eiliad cynhyrchwyd tocyn newydd a gellid ei ddefnyddio i droi'r laser ymlaen am 10 eiliad ar bŵer 10/255. Dolen i github gyda chod Megatron.

Yna oerodd y laser am 1 munud - yn ystod y cyfnod hwn nid oedd ar gael ac ni dderbyniodd geisiadau saethu newydd.

Nid oedd y pŵer hwn yn ddigon i losgi trwy'r rhaff, ond gallai unrhyw chwaraewr danio Megatron a gweld y pelydr laser ar waith.

Defnyddiwyd yr algorithm stwnsio MD5 i gynhyrchu'r tocyn. Ac fe weithiodd y cynllun allan MD5 o MD5 + cownter + cyfrinach am docyn ymladd a heb gyfrinach ar gyfer tocyn prawf.

Mae MD5 yn gyfeiriad at brosiect masnachol a wnaeth Pavel, ein cefnogwr. Dim ond cwpl o flynyddoedd yn ôl defnyddiodd y prosiect hwn MD5, a phan ddywedodd wrth bensaer y prosiect ei fod yn algorithm amgryptio hen ffasiwn, fe ddechreuon nhw ddefnyddio MD5 o MD5. Ers i ni benderfynu gwneud y prosiect mwyaf noob posibl, cofiodd popeth a phenderfynodd wneud cyfeiriad bach.

Ergyd ymladd

Modd ymladd Megatron yw pŵer laser 100% ar 3 wat. Mae hyn yn ddigon am 2 funud i losgi trwy'r rhaff a ddaliodd y pwysau, i dorri'r acwariwm a gorlifo'r gweinydd â dŵr.

Gadawsom ychydig o awgrymiadau ar Github y prosiect: sef, y cod cynhyrchu tocyn, y gallai rhywun ddeall ohono fod y tocynnau prawf a brwydro yn cael eu cynhyrchu yn seiliedig ar yr un dangosydd cownter. Yn achos tocyn ymladd, yn ychwanegol at y gwerth cownter, defnyddir halen hefyd, sydd bron yn gyfan gwbl ar ôl yn hanes newid y gist hwn, ac eithrio'r ddau gymeriad olaf.

Gan wybod y data hwn, roedd yn bosibl didoli trwy'r 2 symbol olaf o'r halen a darganfod mewn gwirionedd bod y rhifau o Lost, wedi'u trosi i'r system hecsadegol, wedi'u defnyddio ar ei gyfer.

Yna bu'n rhaid i'r chwaraewyr ddal y gwerth cownter (drwy ddadansoddi'r tocyn prawf) a chynhyrchu tocyn ymladd gan ddefnyddio'r gwerth cownter nesaf a'r halen a ddewiswyd yn y cam blaenorol.

Cynyddwyd y cownter gyda phob ergyd prawf a phob 25 eiliad. Wnaethon ni ddim ysgrifennu am hyn yn unman, roedd i fod i fod yn syndod gêm fach.

Gwasanaeth rhyngweithio Captcha

Yn y byd hapchwarae, dyma'r un captcha a oedd yn rhaid ei lwytho er mwyn troi'r gefnogwr ymlaen ac agor y siart troi gydag awgrym. Wrth ymyl y camera roedd gliniadur gyda monitro llwyth.

Sut y crëwyd backend gêm haciwr am ddinistrio gweinydd

Gwasanaeth Cyfrifais beth i'w arddangos wrth fonitro fel y llwyth presennol: tymheredd a CPU Fan. Trosglwyddwyd metrigau i'r gronfa ddata cronfa amser a'u llunio gan grafana.

Os bu mwy na 5 o geisiadau i arddangos y captcha yn ystod y 50 eiliad diwethaf, yna cynyddodd y llwyth gan nifer sefydlog + hap o gamau. Y cyfrifiad oedd y gellid cyflawni llwyth 100% mewn dau funud.

Mewn gwirionedd, roedd mwy o resymeg yn y gwasanaeth nag a ddangoswyd yn y gêm olaf: fe wnaethom osod y monitor yn y fath fodd fel mai dim ond cylchdro'r CPU Fan oedd yn weladwy.

Ar ddechrau'r cwest roedden nhw eisiau gadael Grafan yn hygyrch o wefan Falcon. Ond roedd hefyd yn cynnwys metrigau springboot o adroddiad y cais backend, nad oedd gennym amser i'w glirio, felly penderfynasom rwystro mynediad iddo. Ac yn gywir felly - hyd yn oed ar ddechrau'r ymchwil, roedd rhai chwaraewyr yn dyfalu bod y cais wedi'i ysgrifennu yn y fframwaith springboot a hyd yn oed wedi cloddio enwau rhai gwasanaethau.

Lletya a bws data

Offeryn ar gyfer trosglwyddo gwybodaeth o'r pen ôl i'r safle, y gweinydd VPS yr oedd RabbitMQ yn rhedeg arno.

Cadwyd y backend a bws data ymlaen ein VPS. Roedd ei bŵer yn debyg i'r cyfrifiadur a welsoch ar y sgrin: VPS 2-graidd gyda dau gigabeit o RAM. Codwyd y tariff am adnoddau, gan mai dim ond am ychydig ddyddiau y cynlluniwyd y llwyth brig - dyma beth mae ein cleientiaid yn ei wneud sy'n bwriadu llwytho VPS am gyfnod byr. Yna mae'n troi allan bod y llwyth yn uwch na'r disgwyl, a byddai tariff sefydlog yn fwy proffidiol. Os ydych chi'n gwneud cais, dewiswch y tariffau llinell turbo.

Er mwyn amddiffyn y gweinydd rhag DDoSa, fe wnaethon ni ddefnyddio Cloudflare.

Mae'n werth dweud bod y VPS wedi gwrthsefyll popeth ag anrhydedd.

Derbyniodd Arduino, a oedd yn gyfrifol am reoli'r cyfnewid, orchmynion gan y cyfieithydd a gwnaeth y gwaith ei hun

Mae hyn yn fwy pwnc yr erthygl nesaf am y rhan caledwedd y prosiect: y backend yn syml anfon ceisiadau i droi ar ras gyfnewid benodol. Digwyddodd felly bod y cefndir yn adnabod bron pob endid ac roedd ceisiadau ganddo yn edrych fel “trowch yr endid hwn ymlaen.” Fe wnaethom hyn ar gyfer profi'r safle'n gynnar (nid oeddem wedi casglu'r holl Arduino a'r ras gyfnewid eto), yn y diwedd fe adawon ni bopeth felly.

Pen blaen

Fe wnaethon ni greu'r wefan yn gyflym ar tilde, fe gymerodd un diwrnod gwaith ac arbed 30 mil i ni ar ein cyllideb.

I ddechrau, roeddem yn meddwl am allforio'r wefan yn unig ac ychwanegu'r rhesymeg yr oeddem ar goll, ond fe wnaethom redeg i mewn i delerau defnydd a oedd yn ein gwahardd rhag gwneud hyn.

Nid oeddem yn barod i dorri'r drwydded, felly roedd dau opsiwn: gweithredu popeth ein hunain neu gysylltu â Tilda yn uniongyrchol, siarad am y prosiect a gofyn am ganiatâd i newid y cod.

Dewisasom yr ail opsiwn ac fe wnaethant nid yn unig gwrdd â ni hanner ffordd, ond hyd yn oed rhoi blwyddyn o gyfrif busnes rhad ac am ddim inni, yr ydym yn ddiolchgar iawn iddynt amdano. Roedd yn lletchwith iawn dangos cynllun gwefan Sokol iddynt.

O ganlyniad, fe wnaethom atodi rhesymeg js i'r blaen ar gyfer anfon ceisiadau i ddyfeisiau elfennol, a newid ychydig ar arddulliau'r botymau ar gyfer troi ymlaen ac oddi ar elfennau gêm.

Dyluniad y safle

Hanes chwiliadau, sy'n werth pennod ar wahân.

Roeddem am greu nid yn unig safle hen ffasiwn, ond un hollol ffiaidd sy'n torri holl reolau sylfaenol dylunio. Ar yr un pryd, roedd yn bwysig cynnal hygrededd: roedd yn rhaid iddo beidio â thorri'r stori ENT, dangos rhodres yr awdur, a byddai'n rhaid i chwaraewyr gredu y gallai safle o'r fath fodoli a hyd yn oed ddod â chleientiaid. Ac fe ddaeth ag ef! Tra oedd y gêm yn mynd yn ei blaen, cysylltwyd â ni ddwywaith i greu gwefannau.

Ar y dechrau fe wnes i'r dyluniad fy hun, gan geisio cynnwys mwy o gifs ac elfennau sgleiniog. Ond roedd fy ngŵr dylunydd ers 10 mlynedd yn edrych dros ei ysgwydd a’i ddiswyddo fel “rhy dda.” I dorri rheolau dylunio, mae angen i chi eu gwybod.

Sut y crëwyd backend gêm haciwr am ddinistrio gweinydd

Mae yna sawl cyfuniad lliw sy'n ennyn teimlad parhaol o ffieidd-dod: gwyrdd a choch o gyfoeth cyfartal, llwyd a phinc, glas a brown. Yn y diwedd, fe wnaethom setlo ar gyfuniad o goch a gwyrdd fel y lliwiau sylfaenol, ychwanegu gifs gyda chath a dewis 3-4 llun o Sokolov ei hun o lun stoc. Dim ond ychydig o ofynion oedd gen i: dyn canol oed, yn gwisgo siwt anaddas cwpl o feintiau rhy fawr ac mewn ystum “siop ffotograffau stiwdio proffesiynol”. Ar gyfer y prawf, fe wnaethon nhw ei ddangos i ffrindiau a gofyn “sut ydych chi'n ei hoffi?”

Yn ystod y broses datblygu dyluniad, roedd yn rhaid i fy ngŵr fynd i orwedd bob hanner awr; dechreuodd yr hofrennydd hedfan. Ceisiodd Pasha agor consol y datblygwr i'r rhan fwyaf o'r sgrin wrth iddo orffen gorffen y blaen - i amddiffyn ei lygaid.

Dyfeisiau gwirioneddol

Cafodd y gwyntyllau a'r goleuadau eu gosod trwy rasys cyfnewid cyflwr solet fel na fyddent yn troi ymlaen ar bŵer llawn ar unwaith - fel y byddai'r pŵer yn cynyddu ochr yn ochr â monitro.

Ond byddwn yn siarad am hyn yn y post nesaf, am ran caledwedd y gêm ac adeiladwaith gwirioneddol y safle.

Arhoswch tuned!

Erthyglau eraill am yr ymgais i ddinistrio'r gweinydd

Sut y crëwyd backend gêm haciwr am ddinistrio gweinydd

Ffynhonnell: hab.com

Ychwanegu sylw