Како је створен бацкенд хакерске игре о уништавању сервера

Како је створен бацкенд хакерске игре о уништавању сервера
Настављамо да вам причамо како је уређена наша ласерска потрага са уништавањем сервера. Почните у претходном чланак о решавању потраге.

Укупно, позадина игре је имала 6 архитектонских јединица, које ћемо анализирати у овом чланку:

  1. Бацкенд ентитета игре који су били одговорни за механизме игре
  2. Бацкенд и сабирница за размену података сајта на ВПС
  3. Преводилац са позадинских захтева (елемената игре) на Ардуино и хардвер на лицу места
  4. Ардуино, који је био одговоран за контролу релеја, примао је команде од преводиоца и обављао стварни посао
  5. Стварни уређаји: вентилатор, вијенци, подне лампе итд.
  6. Фронтенд - сам сајт Фалцон, са којег су играчи контролисали уређаје

Хајде да прођемо кроз сваки од њих.

Позадина ентитета игре

Позадински део је имплементиран као пролећна апликација за покретање: имао је неколико контролера за одмор, крајњу тачку веб-сокета и услуге са логиком игре.

Постојала су само три контролора:

  • Мегатрон. Тренутна Мегатрон страница је послата путем ГЕТ захтева: пре и после укључивања напајања. Ласер је испалио кроз ПОСТ захтев.
  • Мапирање тилда страница тако да се приказују по имену странице. Тилде производи странице за извоз не са оригиналним именима, већ са интерним ИД-ом и информацијама о усклађености.
  • Цаптцха контролер за послуживање цаптцха сервера са псеудо-високим оптерећењем.

Крајња тачка Вебсоцкет-а је коришћена за контролу гаџета: лампе, гирланде и слова. Изабрано је да се свим играчима синхроно приказује тренутни статус уређаја: да ли је укључен или искључен, активан или не, која боја слова тренутно светли на зиду. Да бисмо мало отежали задатак укључивања ласера, додали смо ауторизацију вијенцу и ласеру са истим логином и лозинком админ/админ.

Играчи су то могли тестирати укључивањем вијенца и поновити исто са ласером.

Изабрали смо тако тривијалан пар логин-лозинке како не бисмо мучили играче непотребним одабиром.

Да би задатак био мало занимљивији, ИД-ови објеката из монгодб-а су коришћени као идентификатори уређаја у просторији.

ОбјецтИд садржи временску ознаку: две насумичне вредности, од којих се једна узима на основу идентификатора уређаја, а друга на основу пид-а процеса који га генерише и вредности бројача. Желео сам да направим идентификаторе који се генеришу у редовним интервалима и са различитим пид процесима, али са заједничким бројачем, како би избор идентификатора ласерског уређаја био занимљивији. Међутим, на крају су сви почели са идентификаторима који су се разликовали само по вредности бројача. Ово је можда учинило корак превише једноставним и не захтева анализу структуре објецтИд.

Преводилац са бацкенд захтева

Питхон скрипта, који је радио на тајмерима и превео их из апстракција игара у физички модел. На пример, „укључите подну лампу“ → „укључите релеј Н2“.

Скрипта се повезала са редом РаббитМК и пренела захтеве из реда у Ардуино. Такође је имплементирала логику паралелног пребацивања светла: заједно са неким уређајима, светло на њима се палило, на пример, када је Мегатрон првобитно напајан, био је осветљен сценским светлом. Дизајн светла за кинематографију целе сцене је посебна прича о великом раду копродуцента нашег пројекта и дизајнера продукције Иље Серова, о чему ћемо причати у посебном посту.

Преводилац је такође био одговоран за логику покретања схредера помоћу тајмера и преношења слике на ТВ: тајмер за покретање схредера, вриштећа капибара, реклама на крају игре.

Како је структурисана логика за генерисање Мегатрон токена

Пробни ударац

Сваких 25 секунди генерисан је нови токен који је могао да се користи за укључивање ласера ​​на 10 секунди при 10/255 снаге. Линк за гитхуб са Мегатрон кодом.

Ласер се затим охладио 1 минут - за то време је био недоступан и није прихватао нове захтеве за снимање.

Ова снага није била довољна да се прогори конопац, али сваки играч је могао да испали Мегатрон и види ласерски зрак у акцији.

За генерисање токена коришћен је МД5 алгоритам хеширања. И шема је успела МД5 од МД5 + бројач + тајна за борбени жетон и без тајне за пробни жетон.

МД5 је референца на комерцијални пројекат који је Павел, наш бекендер, урадио. Пре само неколико година овај пројекат је користио МД5, а када је архитекти пројекта рекао да је то застарели алгоритам за шифровање, почели су да користе МД5 из МД5. Пошто смо одлучили да направимо што више нооб пројекат, он се свега сетио и одлучио да направи малу референцу.

Борбени хитац

Мегатронов борбени режим је 100% снаге ласера ​​при 3 вата. Ово је довољно за 2 минута да прогори конопац који је држао тежину, да се разбије акваријум и поплави сервер водом.

Оставили смо неколико наговештаја на Гитхуб-у пројекта: наиме, код за генерисање токена, из којег би се могло разумети да се тестни и борбени токени генеришу на основу истог бројача индикатора. У случају борбеног жетона, поред противвредности, користи се и со, која је скоро у потпуности остала у историји промене ове суштине, са изузетком последња два знака.

Познавајући ове податке, било је могуће сортирати последња 2 симбола соли и заправо сазнати да су за то коришћени бројеви из Лост-а, претворени у хексадецимални систем.

Затим су играчи морали да ухвате вредност бројача (анализом тестног жетона) и генеришу борбени жетон користећи следећу вредност бројача и со одабрану у претходном кораку.

Бројач се једноставно повећавао са сваким пробним ударцем и сваких 25 секунди. Нисмо нигде писали о томе, требало је да буде мало изненађење.

Услуга Цаптцха интеракције

У свету игара, ово је била иста цаптцха која је морала да се учита да би се укључио вентилатор и отворио флипчарт са наговештајем. Поред камере је био лаптоп са надзором оптерећења.

Како је створен бацкенд хакерске игре о уништавању сервера

Сервис Израчунао сам шта да прикажем у надзору као тренутно оптерећење: температуру и вентилатор ЦПУ-а. метрике су пренете у базу података временске базе и исцртане помоћу графане.

Ако је у последњих 5 секунди примљено више од 50 захтева за приказ цаптцха, онда се оптерећење повећава за фиксни + случајни број корака. Рачуница је била да се 100% оптерећења може постићи за два минута.

У ствари, било је више логике у сервису него што је приказано у финалној игри: поставили смо монитор тако да је била видљива само ротација вентилатора ЦПУ-а.

На почетку потраге хтели су да оставе Графану доступним са Фалцон веб странице. Али је такође садржао метрику спрингбоот-а из извештаја позадинске апликације, коју нисмо имали времена да обришемо, па смо одлучили да блокирамо приступ. И с правом - чак и на почетку потраге, неки играчи су погодили да је апликација написана у спрингбоот оквиру и чак ископали имена неких сервиса.

Хостинг и магистрала података

Алат за пренос информација са бацкенд-а на сајт, ВПС сервер на коме је РаббитМК радио.

Позадина и магистрала података су били укључени наш ВПС. Његова снага је била упоредива са рачунаром који сте видели на екрану: 2-језгарни ВПС са два гигабајта РАМ-а. Тарифа је наплаћивана за ресурсе, пошто је вршно оптерећење планирано за само неколико дана - то раде наши клијенти који планирају да учитају ВПС на кратко. Тада се показало да је оптерећење веће него што смо очекивали, а фиксна тарифа би била исплативија. Ако радите задатак, изаберите линијске тарифе turbo.

Да бисмо заштитили сервер од ДДоСа, користили смо Цлоудфларе.

Ваља рећи да је ВПС све часно издржао.

Ардуино, који је био одговоран за контролу релеја, примао је команде од преводиоца и обављао стварни посао

Ово је више тема следећег чланка о хардверском делу пројекта: позадина је једноставно послала захтеве да укључи одређени релеј. Десило се да је бацкенд знао скоро све ентитете и захтеви од њега изгледали су као „укључи овај ентитет“. Ово смо урадили за рано тестирање сајта (још нисмо саставили сав Ардуино и релеје), на крају смо све оставили тако.

Предњи крај

Брзо смо направили сајт на тилди, трајао је један радни дан и уштедели смо 30 хиљада на нашем буџету.

У почетку смо мислили да једноставно извеземо сајт и додамо логику која нам је недостајала, али смо наишли на услове коришћења који су нам то забрањивали.

Нисмо били спремни да прекршимо лиценцу, па су постојале две опције: да све имплементирамо сами или да директно контактирамо Тилду, разговарамо о пројекту и тражимо дозволу за промену кода.

Изабрали смо другу опцију и они су нам не само изашли у сусрет на пола пута, већ су нам чак дали и годину дана бесплатног пословног налога, на чему смо им веома захвални. Било је веома незгодно показивати им Соколов дизајн сајта.

Као резултат тога, прикључили смо јс логику на фронтенд за слање захтева на елементарне уређаје и мало променили стилове дугмади за укључивање и искључивање елемената игре.

Дизајн веб страница

Историја претраживања, која вреди посебног поглавља.

Желели смо да направимо не само старомодан сајт, већ и апсолутно одвратан који крши сва основна правила дизајна. Истовремено, било је важно одржати веродостојност: није требало да разбије причу о ОРЛ, да демонстрира претенциозност аутора, а играчи би морали да верују да такав сајт може да постоји, па чак и да доводи клијенте. И донео га је! Док је игра трајала, два пута смо контактирани да направимо веб странице.

У почетку сам сам урадио дизајн, покушавајући да укључим више гифова и сјајних елемената. Али мој 10-годишњи муж дизајнер погледао је преко рамена и одбацио то као „превише добро“. Да бисте прекршили правила дизајна, морате их знати.

Како је створен бацкенд хакерске игре о уништавању сервера

Постоји неколико комбинација боја које изазивају трајни осећај гађења: зелена и црвена једнаког богатства, сива и розе, плава плус браон. На крају смо се определили за комбинацију црвене и зелене као основне боје, додали гифове са мачком и одабрали 3-4 фотографије самог Соколова са фотке. Имао сам само неколико захтева: средовечни мушкарац, у оделу који је неприкладан за пар величина и у пози за „професионално студијско фотографисање“. За тест су га показали пријатељима и питали "како вам се свиђа?"

Током процеса развоја дизајна, мој муж је морао да легне сваких пола сата; хеликоптер је почео да лети. Пасха је покушао да отвори конзолу за програмере на већем делу екрана док је завршавао фронтенд - да заштити очи.

Стварни уређаји

Вентилатори и светла су монтирани преко полупроводничких релеја да се не би одмах укључили на пуну снагу – да би се снага повећавала паралелно са праћењем.

Али о томе ћемо говорити у следећем посту, о хардверском делу игре и стварној изградњи сајта.

Будите у току!

Остали чланци о потрази за уништавањем сервера

Како је створен бацкенд хакерске игре о уништавању сервера

Извор: ввв.хабр.цом

Додај коментар