Bagaimana backend permainan peretas tentang penghancuran server dibuat

Bagaimana backend permainan peretas tentang penghancuran server dibuat
Kami terus memberi tahu Anda bagaimana pencarian laser kami dengan penghancuran server diatur. Mulai dari sebelumnya artikel tentang menyelesaikan misi.

Secara total, backend game ini memiliki 6 unit arsitektur, yang akan kami analisis di artikel ini:

  1. Bagian belakang entitas game yang bertanggung jawab atas mekanisme game
  2. Bus pertukaran data backend dan situs di VPS
  3. Penerjemah dari permintaan backend (elemen permainan) ke Arduino dan perangkat keras di lokasi
  4. Arduino, yang bertanggung jawab untuk mengendalikan relay, menerima perintah dari penerjemah dan melakukan pekerjaan sebenarnya
  5. Perangkat sebenarnya: kipas angin, karangan bunga, lampu lantai, dll.
  6. Frontend - situs web Falcon itu sendiri, tempat pemain mengontrol perangkat

Mari kita bahas masing-masingnya.

Bagian belakang entitas game

Backend diimplementasikan sebagai aplikasi booting pegas: ia memiliki beberapa pengontrol lainnya, titik akhir soket web, dan layanan dengan logika permainan.

Hanya ada tiga pengontrol:

  • Megatron. Halaman Megatron saat ini dikirim melalui permintaan GET: sebelum dan sesudah menyalakan listrik. Laser ditembakkan melalui permintaan POST.
  • Memetakan halaman tilde sehingga disajikan berdasarkan nama halaman. Tilde menghasilkan halaman untuk diekspor bukan dengan nama asli, tetapi dengan ID internal dan informasi kepatuhan.
  • Pengontrol Captcha untuk melayani captcha server pseudo-beban tinggi.

Titik akhir websocket digunakan untuk mengontrol gadget: lampu, karangan bunga, dan surat. Itu dipilih untuk secara serempak menampilkan kepada semua pemain status perangkat saat ini: apakah aktif atau tidak aktif, aktif atau tidak, warna huruf apa yang sedang menyala di dinding. Untuk mempersulit tugas menyalakan laser, kami menambahkan otorisasi ke karangan bunga dan laser dengan login dan kata sandi admin/admin yang sama.

Pemain dapat mengujinya dengan menyalakan karangan bunga dan mengulangi hal yang sama dengan laser.

Kami memilih pasangan kata sandi login yang sepele agar tidak menyiksa pemain dengan pilihan yang tidak perlu.

Untuk membuat tugas ini sedikit lebih menarik, ID objek dari mongodb digunakan sebagai pengidentifikasi perangkat di dalam ruangan.

ObjectId berisi stempel waktu: dua nilai acak, salah satunya diambil berdasarkan pengidentifikasi perangkat, dan yang kedua berdasarkan pid proses yang menghasilkannya dan nilai penghitung. Saya ingin membuat pengidentifikasi dihasilkan secara berkala dan dengan proses pid yang berbeda, tetapi dengan penghitung yang sama, sehingga pemilihan pengidentifikasi perangkat laser akan lebih menarik. Namun, pada akhirnya, semua orang memulai dengan pengidentifikasi yang hanya berbeda pada nilai penghitungnya. Ini mungkin membuat langkah ini terlalu sederhana dan tidak memerlukan analisis struktur objectId.

Penerjemah dari permintaan backend

Skrip piton, yang mengerjakan pengatur waktu dan menerjemahkannya dari abstraksi game ke dalam model fisik. Misalnya, “nyalakan lampu lantai” → “nyalakan relai N2”.

Script terhubung ke antrian RabbitMQ dan mentransfer permintaan dari antrian ke Arduino. Ini juga menerapkan logika peralihan lampu paralel: bersama dengan beberapa perangkat, lampu pada perangkat tersebut dinyalakan, misalnya, ketika daya pertama kali disuplai ke Megatron, perangkat tersebut diterangi dengan lampu panggung. Desain pencahayaan untuk sinematografi keseluruhan adegan adalah cerita tersendiri tentang karya hebat co-produser proyek dan desainer produksi kami Ilya Serov, dan kami akan menceritakannya di postingan terpisah.

Penerjemah juga bertanggung jawab atas logika meluncurkan mesin penghancur menggunakan pengatur waktu dan mengirimkan gambar ke TV: pengatur waktu untuk meluncurkan mesin penghancur, kapibara yang berteriak, iklan di akhir permainan.

Bagaimana logika untuk menghasilkan token Megatron disusun

Tes tembakan

Setiap 25 detik, token baru dihasilkan dan dapat digunakan untuk menyalakan laser selama 10 detik dengan daya 10/255. Tautan ke github dengan kode Megatron.

Laser kemudian didinginkan selama 1 menit - selama waktu ini laser tidak tersedia dan tidak menerima permintaan tembakan baru.

Kekuatan ini tidak cukup untuk membakar tali, tetapi pemain mana pun dapat menembakkan Megatron dan melihat sinar laser beraksi.

Algoritme hashing MD5 digunakan untuk menghasilkan token. Dan skema itu berhasil MD5 dari MD5 + counter + rahasia untuk token tempur dan tanpa rahasia untuk token uji.

MD5 adalah referensi ke proyek komersial yang dilakukan oleh Pavel, pendukung kami. Beberapa tahun yang lalu proyek ini menggunakan MD5, dan ketika dia memberi tahu arsitek proyek bahwa algoritma enkripsinya sudah ketinggalan zaman, mereka mulai menggunakan MD5 dari MD5. Karena kami memutuskan untuk membuat proyek yang paling noob, dia mengingat semuanya dan memutuskan untuk membuat referensi kecil.

Tembakan tempur

Mode tempur Megatron adalah kekuatan laser 100% dengan daya 3 watt. Ini cukup untuk 2 menit untuk membakar tali yang menahan beban, menghancurkan akuarium dan membanjiri server dengan air.

Kami meninggalkan beberapa petunjuk pada proyek Github: yaitu, kode pembuatan token, yang darinya orang dapat memahami bahwa token pengujian dan pertempuran dihasilkan berdasarkan indikator penghitung yang sama. Dalam kasus token tempur, selain nilai penghitung, garam juga digunakan, yang hampir seluruhnya tertinggal dalam riwayat perubahan inti ini, dengan pengecualian dua karakter terakhir.

Mengetahui data ini, dimungkinkan untuk memilah 2 simbol terakhir dari garam dan benar-benar mengetahui bahwa angka dari Lost, yang dikonversi ke sistem heksadesimal, digunakan untuk itu.

Kemudian pemain harus menangkap nilai penghitung (dengan menganalisis token uji) dan menghasilkan token pertempuran menggunakan nilai penghitung berikutnya dan garam yang dipilih pada langkah sebelumnya.

Penghitungnya bertambah setiap kali uji coba dilakukan dan setiap 25 detik. Kami tidak menulis tentang ini di mana pun, ini seharusnya menjadi kejutan permainan kecil.

Layanan interaksi Captcha

Di dunia game, ini adalah captcha yang sama yang harus dimuat untuk menyalakan kipas angin dan membuka flipchart dengan sebuah petunjuk. Di sebelah kamera ada laptop dengan pemantauan beban.

Bagaimana backend permainan peretas tentang penghancuran server dibuat

Layanan Saya menghitung apa yang akan ditampilkan dalam pemantauan sebagai beban saat ini: suhu dan Kipas CPU. Metrik ditransfer ke database timebase dan digambar oleh grafana.

Jika dalam 5 detik terakhir ada lebih dari 50 permintaan untuk menampilkan captcha, maka beban bertambah dengan jumlah langkah tetap + acak. Perhitungannya, beban 100% bisa dicapai dalam dua menit.

Faktanya, ada lebih banyak logika dalam layanan ini daripada yang ditampilkan di game terakhir: kami menempatkan monitor sedemikian rupa sehingga hanya perputaran Kipas CPU yang terlihat.

Pada awal pencarian mereka ingin membiarkan Grafan dapat diakses dari situs web Falcon. Namun itu juga berisi metrik springboot dari laporan aplikasi backend, yang tidak sempat kami hapus, jadi kami memutuskan untuk memblokir akses ke sana. Dan memang demikian - bahkan di awal pencarian, beberapa pemain menebak bahwa aplikasi tersebut ditulis dalam kerangka springboot dan bahkan menggali nama beberapa layanan.

Hosting dan bus data

Alat untuk mentransfer informasi dari backend ke situs, server VPS tempat RabbitMQ dijalankan.

Backend dan bus data tetap aktif VPS kami. Kekuatannya sebanding dengan komputer yang Anda lihat di layar: VPS 2-core dengan RAM dua gigabyte. Tarif dibebankan untuk sumber daya, karena beban puncak direncanakan hanya beberapa hari - inilah yang dilakukan klien kami yang berencana memuat VPS untuk jangka waktu singkat. Ternyata bebannya lebih tinggi dari yang kami harapkan, dan tarif tetap akan lebih menguntungkan. Jika Anda melakukan pencarian, pilih tarif jalur turbo.

Untuk melindungi server dari DDoSa, kami menggunakan Cloudflare.

Patut dikatakan bahwa VPS bertahan dalam segala hal dengan terhormat.

Arduino, yang bertanggung jawab untuk mengendalikan relay, menerima perintah dari penerjemah dan melakukan pekerjaan sebenarnya

Ini lebih merupakan topik artikel berikutnya tentang bagian perangkat keras proyek: backend hanya mengirimkan permintaan untuk mengaktifkan relai tertentu. Kebetulan backend mengetahui hampir semua entitas dan permintaan darinya tampak seperti “aktifkan entitas ini”. Kami melakukan ini untuk pengujian awal situs (kami belum merakit semua Arduino dan relay), pada akhirnya kami membiarkan semuanya seperti itu.

Paling depan

Kami dengan cepat membuat situs di tilde, membutuhkan satu hari kerja dan menghemat anggaran kami sebesar 30 ribu.

Awalnya, kami berpikir untuk hanya mengekspor situs dan menambahkan logika yang kami lewatkan, namun kami menemui ketentuan penggunaan yang melarang kami melakukan hal ini.

Kami belum siap untuk melanggar lisensi, jadi ada dua pilihan: menerapkan semuanya sendiri atau menghubungi Tilda secara langsung, membicarakan proyek tersebut dan meminta izin untuk mengubah kode.

Kami memilih opsi kedua dan mereka tidak hanya menemui kami di tengah jalan, tetapi bahkan memberi kami satu tahun akun bisnis gratis, dan kami sangat berterima kasih kepada mereka. Sangat canggung menunjukkan kepada mereka desain website Sokol.

Hasilnya, kami melampirkan logika js ke frontend untuk mengirim permintaan ke perangkat dasar, dan sedikit mengubah gaya tombol untuk menghidupkan dan mematikan elemen game.

Desain situs web

Sejarah pencarian, yang layak mendapat bab tersendiri.

Kami ingin membuat bukan hanya situs kuno, tapi juga situs yang benar-benar menjijikkan yang melanggar semua aturan dasar desain. Pada saat yang sama, penting untuk menjaga kepercayaan: situs tersebut tidak boleh merusak cerita THT, menunjukkan kepura-puraan penulisnya, dan pemain harus percaya bahwa situs semacam itu bisa ada dan bahkan mendatangkan klien. Dan dia membawanya! Saat permainan berlangsung, kami dihubungi dua kali untuk membuat situs web.

Awalnya saya mendesain sendiri, mencoba memasukkan lebih banyak gif dan elemen mengkilap. Tapi suami desainer saya selama 10 tahun memandang ke belakang dan menganggapnya "terlalu bagus". Untuk melanggar aturan desain, Anda perlu mengetahuinya.

Bagaimana backend permainan peretas tentang penghancuran server dibuat

Ada beberapa kombinasi warna yang membangkitkan rasa jijik yang bertahan lama: hijau dan merah dengan kekayaan yang sama, abu-abu dan merah muda, biru plus coklat. Pada akhirnya, kami memilih kombinasi merah dan hijau sebagai warna dasar, menambahkan gif dengan kucing, dan memilih 3-4 foto Sokolov sendiri dari foto stok. Saya hanya memiliki beberapa persyaratan: seorang pria paruh baya, mengenakan setelan yang tidak pas beberapa ukuran terlalu besar dan dalam pose “pemotretan studio profesional”. Untuk tesnya, mereka menunjukkannya kepada teman-temannya dan bertanya “bagaimana kamu menyukainya?”

Selama proses pengembangan desain, suami saya harus berbaring setiap setengah jam; helikopter mulai terbang. Pasha mencoba membuka konsol pengembang ke sebagian besar layar sementara dia menyelesaikan penyelesaian bagian depan - untuk melindungi matanya.

Perangkat sebenarnya

Kipas dan lampu dipasang melalui solid-state relay sehingga tidak langsung menyala dengan daya penuh - sehingga daya akan meningkat seiring dengan pemantauan.

Namun kita akan membicarakan hal ini di postingan berikutnya, tentang bagian perangkat keras game dan konstruksi situs sebenarnya.

Tetap disini!

Artikel lain tentang misi menghancurkan server

Bagaimana backend permainan peretas tentang penghancuran server dibuat

Sumber: www.habr.com

Tambah komentar