Carane backend saka game hacker babagan ngancurake server digawe

Carane backend saka game hacker babagan ngancurake server digawe
Kita terus pitutur marang kowe carane nggoleki laser karo karusakan saka server iki disusun. Mulai ing sadurunge artikel babagan ngrampungake quest.

Secara total, mburi game kasebut duwe 6 unit arsitektur, sing bakal dianalisis ing artikel iki:

  1. Backend entitas game sing tanggung jawab kanggo mekanisme game
  2. Backend lan bus exchange data situs ing VPS
  3. Translator saka panjalukan backend (unsur game) kanggo Arduino lan hardware ing situs
  4. Arduino, sing tanggung jawab kanggo ngontrol relay, nampa perintah saka penerjemah lan nindakake karya nyata
  5. Piranti nyata: kipas angin, garlands, lampu lantai, lsp.
  6. Frontend - situs web Falcon dhewe, saka ngendi pemain ngontrol piranti

Ayo padha liwat saben wong.

Backend saka entitas game

Backend kasebut diimplementasikake minangka aplikasi boot spring: duwe sawetara pengontrol istirahat, endpoint websocket lan layanan kanthi logika game.

Mung ana telung pengontrol:

  • Megatron. Kaca Megatron saiki dikirim liwat panjalukan GET: sadurunge lan sawise nguripake daya. Laser murub liwat request POST.
  • Pemetaan kaca tilde supaya dilayani kanthi jeneng kaca. Tilde ngasilake kaca kanggo ekspor ora nganggo jeneng asli, nanging kanthi ID internal lan informasi kepatuhan.
  • Captcha controller kanggo ngawula pseudo-dhuwur-load server captcha.

Titik pungkasan Websocket digunakake kanggo ngontrol gadget: lampu, garland lan huruf. Iku dipilih kanggo synchronously nampilake kanggo kabeh pemain status piranti saiki: apa iku aktif utawa mati, aktif utawa ora, apa werna saka huruf sing lagi surem ing tembok. Supaya tugas kanggo nguripake laser sethitik liyane angel, kita ditambahaké wewenang kanggo Garland lan laser karo login padha lan sandi admin / admin.

Pemain bisa nyoba kanthi nguripake garland lan mbaleni padha karo laser.

Kita milih pasangan login-sandi sing ora pati penting supaya ora nyiksa pemain kanthi pilihan sing ora perlu.

Kanggo nggawe tugas luwih menarik, ID obyek saka mongodb digunakake minangka pengenal piranti ing kamar.

ObjectId ngandhut timestamp: loro nilai acak, siji kang dijupuk adhedhasar pengenal piranti, lan liya adhedhasar pid saka proses sing njedulake lan nilai counter. Aku wanted kanggo nggawe pengenal kui ing interval biasa lan karo pangolahan pid beda, nanging karo counter umum, supaya pilihan saka pengenal piranti laser bakal luwih menarik. Nanging, ing pungkasan, saben wong miwiti karo pengenal sing beda-beda mung ing nilai counter. Iki bisa uga nggawe langkah kasebut gampang banget lan ora mbutuhake analisis struktur objectId.

Penerjemah saka panjalukan backend

Aksara Python, sing nggarap timer lan nerjemahake saka abstraksi game menyang model fisik. Contone, "uripake lampu lantai" → "uripake relay N2."

Skrip disambungake menyang antrian RabbitMQ lan nransfer panjalukan saka antrian menyang Arduino. Uga dileksanakake logika ngoper cahya podo: bebarengan karo sawetara piranti, padha diuripake cahya, contone, nalika daya pisanan diwenehake menyang Megatron, padhang karo cahya panggung. Desain cahya kanggo sinematografi kabeh adegan minangka crita kapisah babagan karya gedhe saka co-produser proyek lan desainer produksi Ilya Serov, lan kita bakal nyritakake babagan kasebut ing kiriman sing kapisah.

Penerjemah uga tanggung jawab kanggo logika ngluncurake shredder nggunakake timer lan ngirim gambar menyang TV: timer kanggo ngetokake shredder, capybara sing njerit, iklan ing pungkasan game.

Kepiye logika kanggo ngasilake token Megatron disusun

Tes dijupuk

Saben 25 detik, token anyar digawe lan bisa digunakake kanggo nguripake laser sajrone 10 detik kanthi daya 10/255. Link menyang github karo kode Megatron.

Laser banjur digawe adhem mudhun kanggo 1 menit - sak iki wektu iku ora kasedhiya lan ora nampa panjalukan dijupuk anyar.

Daya iki ora cukup kanggo ngobong liwat tali, nanging pemain sembarang bisa murub Megatron lan ndeleng sinar laser ing tumindak.

Algoritma hashing MD5 digunakake kanggo ngasilake token. Lan skema kasebut bisa ditindakake MD5 saka MD5 + counter + rahasia kanggo token pertempuran lan tanpa rahasia kanggo token test.

MD5 minangka referensi kanggo proyek komersial sing ditindakake dening Pavel, backender kita. Mung sawetara taun kepungkur, proyek iki digunakake MD5, lan nalika dheweke ngandhani arsitek proyek yen iki minangka algoritma enkripsi sing wis lawas, dheweke wiwit nggunakake MD5 saka MD5. Awit kita mutusaké kanggo nggawe proyek paling noob bisa, elinga kabeh lan mutusaké kanggo nggawe referensi cilik.

Tembakan tempur

Mode pertempuran Megatron yaiku 100% daya laser ing 3 watt. Iki cukup kanggo 2 menit kanggo ngobong liwat tali sing nahan bobot, kanggo break Aquarium lan banjir server karo banyu.

Kita ninggalake sawetara pitunjuk ing Github proyek: yaiku, kode generasi token, sing bisa dingerteni manawa token tes lan pertempuran digawe adhedhasar indikator counter sing padha. Ing kasus token pertempuran, saliyane kanggo nilai counter, uyah uga digunakake, sing meh rampung ing sajarah ngganti inti iki, kajaba rong karakter pungkasan.

Ngerti data iki, iku bisa kanggo Ngurutake liwat pungkasan 2 simbol saka uyah lan bener mangerteni sing nomer saka Lost, diowahi kanggo sistem hexadecimal, digunakake kanggo iku.

Banjur para pemain kudu nyekel nilai counter (kanthi nganalisa token test) lan ngasilake token pertempuran nggunakake nilai counter sabanjure lan uyah sing dipilih ing langkah sadurunge.

Counter mung nambah kanthi saben tes tes lan saben 25 detik. Kita ora nulis babagan iki ing ngendi wae, mesthine dadi kejutan game cilik.

Layanan interaksi Captcha

Ing donya game, iki minangka captcha sing padha sing kudu dimuat kanggo nguripake penggemar lan mbukak flipchart kanthi tandha. Ing jejere kamera ana laptop kanthi pemantauan beban.

Carane backend saka game hacker babagan ngancurake server digawe

layanan Aku ngetung apa kanggo nampilake ing ngawasi minangka mbukak saiki: suhu lan CPU Fan. Metrik ditransfer menyang database timebase lan digambar dening grafana.

Yen ing 5 detik pungkasan ana luwih saka 50 panjalukan kanggo nampilake captcha, banjur beban tambah kanthi nomer tetep + acak langkah. Pitungan kasebut yaiku beban 100% bisa digayuh sajrone rong menit.

Ing kasunyatan, ana liyane logika ing layanan saka ditampilake ing game final: kita diselehake monitor ing cara sing mung rotasi saka Fan CPU katon.

Ing wiwitan nggoleki, dheweke pengin ninggalake Grafan sing bisa diakses saka situs web Falcon. Nanging uga ngemot metrik springboot saka laporan aplikasi backend, sing ora duwe wektu kanggo mbusak, mula kita mutusake kanggo mblokir akses menyang. Lan kanthi bener - sanajan ing wiwitan nggoleki, sawetara pemain ngira manawa aplikasi kasebut ditulis ing kerangka springboot lan malah ndudhuk jeneng sawetara layanan.

Hosting lan data bus

Alat kanggo nransfer informasi saka backend menyang situs, server VPS sing dienggo RabbitMQ.

Backend lan data bus padha katahan ing VPS kita. Daya kasebut bisa dibandhingake karo komputer sing sampeyan deleng ing layar: VPS 2-inti kanthi rong gigabyte RAM. Tarif kasebut dikenani biaya kanggo sumber daya, amarga beban puncak direncanakake mung sawetara dina - iki sing ditindakake para klien kita sing rencana mbukak VPS kanggo wektu sing cendhak. Banjur ternyata beban kasebut luwih dhuwur tinimbang sing dikarepake, lan tarif tetep bakal luwih nguntungake. Yen sampeyan nggoleki, pilih tarif baris turbo.

Kanggo nglindhungi server saka DDoSa, kita nggunakake Cloudflare.

Perlu dikandhakake yen VPS nahan kabeh kanthi hormat.

Arduino, sing tanggung jawab kanggo ngontrol relay, nampa perintah saka penerjemah lan nindakake karya nyata

Iki luwih topik artikel sabanjure babagan bagean hardware proyek: backend mung ngirim panjaluk kanggo nguripake relay tartamtu. Kedaden sing backend ngerti meh kabeh entitas lan panjalukan saka iku katon kaya "nguripake entitas iki." Kita nindakake iki kanggo testing awal situs (kita durung nglumpuk kabeh Arduino lan relay), ing pungkasan kita ninggalake kabeh kaya.

Frontend

Kita cepet nggawe situs ing tilde, njupuk siji dina apa lan nyimpen 30 ewu ing budget kita.

Kaping pisanan, kita mikir mung ngekspor situs kasebut lan nambah logika sing ilang, nanging kita entuk syarat panggunaan sing nglarang kita nindakake iki.

Kita ora siap nglanggar lisensi, mula ana rong pilihan: kanggo ngetrapake kabeh dhewe utawa langsung hubungi Tilda, ngomong babagan proyek kasebut lan njaluk ijin kanggo ngganti kode kasebut.

Kita milih pilihan kaloro lan padha ora mung ketemu kita separo, nanging malah menehi taun free akun bisnis, kang kita matur nuwun banget kanggo wong-wong mau. Kikuk banget nuduhake desain situs web Sokol.

Akibaté, kita nempelake logika js ing frontend kanggo ngirim panjalukan menyang piranti dhasar, lan rada ngganti gaya tombol kanggo nguripake lan mateni unsur game.

Desain situs web

Sajarah searches, kang worth bab kapisah.

We wanted kanggo nggawe ora mung situs lawas-gaya, nanging pancen njijiki sing nerak kabeh aturan dhasar saka desain. Ing wektu sing padha, penting kanggo njaga kapercayan: kudu ora ngrusak crita ENT, nduduhake pretentiousness penulis, lan pemain kudu percaya yen situs kasebut bisa ana lan malah nggawa klien. Lan dheweke nggawa! Nalika game kasebut, kita dikontak kaping pindho kanggo nggawe situs web.

Kaping pisanan, aku nggawe desain dhewe, nyoba nambah gif lan unsur mengkilat. Nanging bojoku desainer 10 taun katon liwat pundhak lan nolak iku "apik banget." Kanggo nglanggar aturan desain, sampeyan kudu ngerti.

Carane backend saka game hacker babagan ngancurake server digawe

Ana sawetara kombinasi warna sing nyebabake rasa jijik sing langgeng: ijo lan abang kanthi kasugihan sing padha, abu-abu lan jambon, biru plus coklat. Ing pungkasan, kita mapan ing kombinasi abang lan ijo minangka werna dhasar, nambah gif karo kucing lan milih 3-4 foto Sokolov dhewe saka foto saham. Aku mung duwe sawetara syarat: wong setengah baya, nganggo jas sing ora pas karo ukuran saperangan gedhe banget lan ing pose "foto studio profesional". Kanggo tes, dheweke nuduhake menyang kanca-kanca lan takon "Kepiye sampeyan seneng?"

Sajrone proses pangembangan desain, bojoku kudu turu saben setengah jam; helikopter wiwit mabur. Pasha nyoba mbukak konsol pangembang ing sebagian besar layar nalika dheweke ngrampungake frontend - kanggo nglindhungi mripate.

Piranti nyata

Penggemar lan lampu dipasang liwat relay solid-state supaya ora langsung diuripake kanthi daya lengkap - supaya daya tambah sejajar karo pemantauan.

Nanging kita bakal pirembagan bab iki ing kirim sabanjuré, bab hardware bagean game lan construction nyata saka situs.

Tetep dirungokake!

Artikel liyane babagan usaha kanggo numpes server

Carane backend saka game hacker babagan ngancurake server digawe

Source: www.habr.com

Add a comment