วิธีการสร้างแบ็กเอนด์ของเกมแฮ็กเกอร์เกี่ยวกับการทำลายเซิร์ฟเวอร์

วิธีการสร้างแบ็กเอนด์ของเกมแฮ็กเกอร์เกี่ยวกับการทำลายเซิร์ฟเวอร์
เรายังคงบอกคุณต่อไปว่าภารกิจเลเซอร์ของเรากับการทำลายเซิร์ฟเวอร์นั้นถูกจัดเตรียมอย่างไร เริ่มต้นในก่อนหน้านี้ บทความเกี่ยวกับการแก้ภารกิจ.

โดยรวมแล้วแบ็กเอนด์ของเกมมี 6 หน่วยสถาปัตยกรรม ซึ่งเราจะวิเคราะห์ในบทความนี้:

  1. แบ็กเอนด์ของเอนทิตีเกมที่รับผิดชอบกลไกของเกม
  2. แบ็กเอนด์และบัสแลกเปลี่ยนข้อมูลไซต์บน VPS
  3. นักแปลจากคำขอแบ็กเอนด์ (องค์ประกอบเกม) ไปยัง Arduino และฮาร์ดแวร์ในไซต์
  4. Arduino ซึ่งมีหน้าที่ควบคุมรีเลย์ ได้รับคำสั่งจากผู้แปลและดำเนินการจริง
  5. อุปกรณ์จริง พัดลม พวงมาลัย โคมไฟตั้งพื้น ฯลฯ
  6. ส่วนหน้า - เว็บไซต์ Falcon ซึ่งผู้เล่นควบคุมอุปกรณ์

เรามาดูกันทีละเรื่อง

แบ็กเอนด์ของเอนทิตีเกม

แบ็กเอนด์ถูกนำมาใช้เป็นแอปพลิเคชัน Spring Boot: มีตัวควบคุมส่วนที่เหลือหลายตัว จุดสิ้นสุดของ websocket และบริการที่มีตรรกะของเกม

มีผู้ควบคุมเพียงสามคนเท่านั้น:

  • เมกะตรอน หน้าเมกะทรอนปัจจุบันถูกส่งผ่านคำขอ GET ก่อนและหลังเปิดเครื่อง เลเซอร์ยิงผ่านคำขอ POST
  • การแมปหน้าตัวหนอนเพื่อให้แสดงตามชื่อหน้า Tilde สร้างเพจสำหรับการส่งออกไม่ใช่ด้วยชื่อดั้งเดิม แต่มี ID ภายในและข้อมูลการปฏิบัติตามข้อกำหนด
  • ตัวควบคุม Captcha เพื่อให้บริการ captcha เซิร์ฟเวอร์หลอกที่มีโหลดสูง

จุดสิ้นสุด Websocket ใช้เพื่อควบคุมอุปกรณ์ต่างๆ เช่น โคมไฟ พวงมาลัย และตัวอักษร ได้รับเลือกให้แสดงสถานะปัจจุบันของอุปกรณ์ให้ผู้เล่นทุกคนเห็นพร้อมกัน ไม่ว่าจะเปิดหรือปิด ใช้งานอยู่หรือไม่ก็ตาม ตัวอักษรสีใดที่ติดสว่างอยู่บนผนัง เพื่อให้งานการเปิดเลเซอร์ยากขึ้นอีกเล็กน้อย เราได้เพิ่มการอนุญาตให้กับพวงมาลัยและเลเซอร์ด้วยการเข้าสู่ระบบและรหัสผ่านผู้ดูแลระบบ/ผู้ดูแลระบบเดียวกัน

ผู้เล่นสามารถทดสอบได้โดยเปิดพวงมาลัยแล้วทำซ้ำแบบเดียวกันด้วยเลเซอร์

เราเลือกคู่ล็อกอินและรหัสผ่านที่ไม่สำคัญเพื่อไม่ให้ผู้เล่นต้องทรมานกับการเลือกที่ไม่จำเป็น

เพื่อให้งานน่าสนใจยิ่งขึ้นอีกเล็กน้อย ID อ็อบเจ็กต์จาก mongodb จึงถูกใช้เป็นตัวระบุอุปกรณ์ในห้อง

ObjectId มีการประทับเวลา: ค่าสุ่มสองค่า ค่าหนึ่งใช้ตามตัวระบุอุปกรณ์ และค่าที่สองขึ้นอยู่กับ pid ของกระบวนการที่สร้างค่านั้นและค่าตัวนับ ฉันต้องการสร้างตัวระบุที่สร้างขึ้นในช่วงเวลาปกติและด้วยกระบวนการ pid ที่แตกต่างกัน แต่ใช้ตัวนับทั่วไป เพื่อให้การเลือกตัวระบุอุปกรณ์เลเซอร์น่าสนใจยิ่งขึ้น อย่างไรก็ตาม ในท้ายที่สุด ทุกคนเริ่มต้นด้วยตัวระบุที่แตกต่างกันเพียงค่าตัวนับเท่านั้น นี่อาจทำให้ขั้นตอนง่ายเกินไป และไม่จำเป็นต้องวิเคราะห์โครงสร้าง objectId

นักแปลจากคำขอแบ็กเอนด์

สคริปต์หลามซึ่งทำงานเกี่ยวกับตัวจับเวลาและแปลสิ่งเหล่านั้นจากนามธรรมของเกมให้เป็นแบบจำลองทางกายภาพ ตัวอย่างเช่น “เปิดโคมไฟตั้งพื้น” → “เปิดรีเลย์ N2”

สคริปต์เชื่อมต่อกับคิว RabbitMQ และถ่ายโอนคำขอจากคิวไปยัง Arduino นอกจากนี้ยังใช้ตรรกะของการสลับไฟแบบขนาน: ร่วมกับอุปกรณ์บางชนิดไฟบนอุปกรณ์เหล่านั้นก็เปิดขึ้นเช่นเมื่อจ่ายไฟให้กับเมกะตรอนในตอนแรกมันก็ส่องสว่างด้วยไฟเวที การออกแบบแสงสำหรับการถ่ายภาพยนตร์ของทั้งฉากเป็นเรื่องราวที่แยกจากกันเกี่ยวกับผลงานที่ยอดเยี่ยมของผู้อำนวยการสร้างร่วมในโครงการและผู้ออกแบบงานสร้าง Ilya Serov และเราจะเล่าเกี่ยวกับเรื่องนี้ในโพสต์แยกต่างหาก

นักแปลยังต้องรับผิดชอบต่อตรรกะของการเปิดตัวเครื่องทำลายเอกสารโดยใช้ตัวจับเวลาและส่งภาพไปยังทีวี: ตัวจับเวลาสำหรับการเปิดตัวเครื่องทำลายเอกสาร คาปิบาราที่กรีดร้อง ซึ่งเป็นโฆษณาในตอนท้ายของเกม

ตรรกะในการสร้างโทเค็น Megatron มีโครงสร้างอย่างไร

ทดสอบช็อต

โทเค็นใหม่จะถูกสร้างขึ้นทุกๆ 25 วินาที และสามารถใช้เพื่อเปิดเลเซอร์เป็นเวลา 10 วินาทีที่กำลัง 10/255 เชื่อมโยงไปยัง GitHub พร้อมโค้ด Megatron.

จากนั้นเลเซอร์จะเย็นลงเป็นเวลา 1 นาที - ในระหว่างนี้เลเซอร์ไม่สามารถใช้งานได้และไม่ยอมรับคำขอยิงใหม่

พลังนี้ไม่เพียงพอที่จะเผาไหม้ผ่านเชือก แต่ผู้เล่นคนใดสามารถยิงเมกะทรอนและเห็นลำแสงเลเซอร์ทำงาน

อัลกอริธึมการแฮช MD5 ถูกใช้เพื่อสร้างโทเค็น และโครงการก็สำเร็จ MD5 จาก MD5 + ตัวนับ + ความลับ สำหรับโทเค็นการต่อสู้และไม่มีความลับสำหรับโทเค็นการทดสอบ

MD5 เป็นการอ้างอิงถึงโครงการเชิงพาณิชย์ที่ Pavel ซึ่งเป็นผู้สนับสนุนของเราทำ เมื่อสองสามปีก่อนโปรเจ็กต์นี้ใช้ MD5 และเมื่อเขาบอกสถาปนิกโปรเจ็กต์ว่านี่เป็นอัลกอริธึมการเข้ารหัสที่ล้าสมัย พวกเขาก็เริ่มใช้ MD5 จาก MD5 เนื่องจากเราตัดสินใจที่จะทำให้โปรเจ็กต์ noob มากที่สุดเท่าที่จะเป็นไปได้ เขาจึงจำทุกอย่างได้และตัดสินใจให้ข้อมูลอ้างอิงเล็กน้อย

ยิงต่อสู้

โหมดการต่อสู้ของเมกะตรอนคือพลังเลเซอร์ 100% ที่ 3 วัตต์ นี่เพียงพอแล้วเป็นเวลา 2 นาทีในการเผาเชือกที่รับน้ำหนักเพื่อทำลายตู้ปลาและทำให้เซิร์ฟเวอร์ท่วมด้วยน้ำ

เราได้ทิ้งคำแนะนำไว้เล็กน้อยเกี่ยวกับ Github ของโปรเจ็กต์ กล่าวคือ รหัสการสร้างโทเค็น ซึ่งใครๆ ก็สามารถเข้าใจได้ว่าโทเค็นการทดสอบและการต่อสู้นั้นถูกสร้างขึ้นโดยใช้ตัวบ่งชี้ตัวนับเดียวกัน ในกรณีของโทเค็นการต่อสู้ นอกเหนือจากค่าตัวนับแล้ว ยังมีการใช้เกลือซึ่งเกือบจะเหลืออยู่ในประวัติศาสตร์ของการเปลี่ยนแปลงส่วนสำคัญนี้ทั้งหมด ยกเว้นอักขระสองตัวสุดท้าย

เมื่อรู้ข้อมูลนี้ ก็เป็นไปได้ที่จะเรียงลำดับสัญลักษณ์เกลือ 2 ตัวสุดท้าย และพบว่ามีการใช้ตัวเลขจาก Lost ซึ่งแปลงเป็นระบบเลขฐานสิบหก

จากนั้นผู้เล่นจะต้องจับค่าตัวนับ (โดยการวิเคราะห์โทเค็นทดสอบ) และสร้างโทเค็นการต่อสู้โดยใช้ค่าตัวนับถัดไปและเกลือที่เลือกในขั้นตอนก่อนหน้า

ตัวนับจะเพิ่มขึ้นตามการทดสอบแต่ละครั้งและทุกๆ 25 วินาที เราไม่ได้เขียนเกี่ยวกับเรื่องนี้ที่ไหนเลย มันควรจะเป็นเกมเซอร์ไพรส์เล็กๆ น้อยๆ

บริการโต้ตอบแคปต์ชา

ในโลกของเกมนี่เป็น captcha แบบเดียวกับที่ต้องโหลดเพื่อเปิดพัดลมและเปิดฟลิปชาร์ตพร้อมคำใบ้ ถัดจากกล้องคือแล็ปท็อปที่มีการตรวจสอบโหลด

วิธีการสร้างแบ็กเอนด์ของเกมแฮ็กเกอร์เกี่ยวกับการทำลายเซิร์ฟเวอร์

บริการ ฉันคำนวณสิ่งที่จะแสดงในการมอนิเตอร์เป็นโหลดปัจจุบัน: อุณหภูมิและพัดลม CPU หน่วยวัดถูกถ่ายโอนไปยังฐานข้อมูลฐานเวลาและวาดโดยกราฟาน่า

หากในช่วง 5 วินาทีที่ผ่านมา มีคำขอมากกว่า 50 รายการให้แสดง captcha แสดงว่าโหลดเพิ่มขึ้นตามจำนวนขั้นตอนคงที่ + สุ่ม การคำนวณคือสามารถโหลดได้ 100% ภายในสองนาที

ในความเป็นจริง การบริการมีเหตุผลมากกว่าที่แสดงในเกมสุดท้าย: เราวางจอภาพในลักษณะที่มองเห็นเฉพาะการหมุนของพัดลม CPU เท่านั้น

ในตอนเริ่มต้นของภารกิจ พวกเขาต้องการปล่อยให้ Grafan สามารถเข้าถึงได้จากเว็บไซต์ Falcon แต่ยังมีตัววัด Springboot จากรายงานแอปพลิเคชันแบ็กเอนด์ด้วย ซึ่งเราไม่มีเวลาเคลียร์ ดังนั้นเราจึงตัดสินใจบล็อกการเข้าถึง และถูกต้องแม้กระทั่งในช่วงเริ่มต้นของภารกิจ ผู้เล่นบางคนเดาว่าแอปพลิเคชันนั้นเขียนในเฟรมเวิร์ก springboot และยังขุดชื่อของบริการบางอย่างด้วย

โฮสติ้งและบัสข้อมูล

เครื่องมือสำหรับการถ่ายโอนข้อมูลจากแบ็กเอนด์ไปยังไซต์ ซึ่งเป็นเซิร์ฟเวอร์ VPS ที่ RabbitMQ ใช้งานอยู่

แบ็กเอนด์และบัสข้อมูลถูกเก็บไว้ VPS ของเรา. พลังของมันเทียบได้กับคอมพิวเตอร์ที่คุณเห็นบนหน้าจอ: VPS แบบ 2 คอร์พร้อม RAM ขนาด XNUMX กิกะไบต์ มีการเรียกเก็บภาษีสำหรับทรัพยากร เนื่องจากมีการวางแผนโหลดสูงสุดไว้เพียงไม่กี่วัน - นี่คือสิ่งที่ลูกค้าของเราทำซึ่งวางแผนจะโหลด VPS ในช่วงเวลาสั้น ๆ จากนั้นปรากฎว่าภาระนั้นสูงกว่าที่เราคาดไว้และอัตราภาษีคงที่จะให้ผลกำไรมากกว่า หากคุณทำภารกิจ ให้เลือกอัตราภาษีตามรายการ เทอร์โบ.

เพื่อปกป้องเซิร์ฟเวอร์จาก DDoSa เราใช้ Cloudflare

สมควรที่จะบอกว่า VPS ยืนหยัดทุกสิ่งอย่างมีเกียรติ

Arduino ซึ่งมีหน้าที่ควบคุมรีเลย์ ได้รับคำสั่งจากผู้แปลและดำเนินการจริง

นี่เป็นหัวข้อของบทความถัดไปเกี่ยวกับส่วนฮาร์ดแวร์ของโครงการ: แบ็กเอนด์เพียงส่งคำขอเพื่อเปิดรีเลย์เฉพาะ มันเกิดขึ้นที่แบ็กเอนด์รู้จักเอนทิตีและคำขอเกือบทั้งหมดจากนั้นดูเหมือนว่า "เปิดใช้งานเอนทิตีนี้" เราทำสิ่งนี้เพื่อทดสอบไซต์ในช่วงแรก (เรายังไม่ได้ประกอบ Arduino และรีเลย์ทั้งหมด) ในที่สุดเราก็ทิ้งทุกอย่างไว้อย่างนั้น

ส่วนหน้า

เราสร้างเว็บไซต์อย่างรวดเร็วด้วยตัวหนอน ใช้เวลาหนึ่งวันทำการและช่วยเราประหยัดเงินได้ 30 ในงบประมาณของเรา

ในตอนแรก เราคิดที่จะส่งออกไซต์และเพิ่มตรรกะที่เราขาดหายไป แต่เราพบเงื่อนไขการใช้งานที่ห้ามไม่ให้เราทำเช่นนี้

เราไม่พร้อมที่จะละเมิดใบอนุญาต ดังนั้นจึงมีสองทางเลือก: ดำเนินการทุกอย่างด้วยตนเองหรือติดต่อ Tilda โดยตรง พูดคุยเกี่ยวกับโครงการและขออนุญาตในการเปลี่ยนแปลงรหัส

เราเลือกตัวเลือกที่สอง และพวกเขาไม่เพียงแต่พบกันครึ่งทางเท่านั้น แต่ยังให้บัญชีธุรกิจฟรีแก่เราหนึ่งปี ซึ่งเรารู้สึกขอบคุณพวกเขามาก การแสดงการออกแบบเว็บไซต์ของ Sokol ให้พวกเขาดูเป็นเรื่องที่น่าอึดอัดใจมาก

ด้วยเหตุนี้ เราจึงแนบตรรกะ js ไว้ที่ส่วนหน้าเพื่อส่งคำขอไปยังอุปกรณ์พื้นฐาน และเปลี่ยนรูปแบบของปุ่มสำหรับเปิดและปิดองค์ประกอบเกมเล็กน้อย

ออกแบบเว็บไซต์

ประวัติความเป็นมาของการค้นหาซึ่งคุ้มค่ากับบทที่แยกจากกัน

เราต้องการสร้างไม่เพียงแค่ไซต์ล้าสมัยเท่านั้น แต่ยังเป็นไซต์ที่น่าขยะแขยงอย่างยิ่งที่ฝ่าฝืนกฎพื้นฐานของการออกแบบทั้งหมด ในเวลาเดียวกัน สิ่งสำคัญคือต้องรักษาความน่าเชื่อถือ: ต้องไม่ทำลายเรื่องราวของ ENT แสดงให้เห็นถึงความเสแสร้งของผู้เขียน และผู้เล่นจะต้องเชื่อว่าไซต์ดังกล่าวมีอยู่จริงและนำลูกค้ามาด้วย และเขาก็นำมันมา! ในขณะที่เกมกำลังดำเนินอยู่ เราได้รับการติดต่อสองครั้งเพื่อสร้างเว็บไซต์

ในตอนแรก ฉันออกแบบด้วยตัวเอง โดยพยายามเพิ่ม GIF และองค์ประกอบที่เป็นมันเงาให้มากขึ้น แต่สามีนักออกแบบของฉันที่คบกันมา 10 ปีมองข้ามไหล่ของเขาและมองว่ามัน “ดีเกินไป” หากต้องการแหกกฎการออกแบบ คุณจำเป็นต้องรู้กฎเหล่านี้

วิธีการสร้างแบ็กเอนด์ของเกมแฮ็กเกอร์เกี่ยวกับการทำลายเซิร์ฟเวอร์

มีการผสมสีหลายสีที่ทำให้เกิดความรู้สึกรังเกียจยาวนาน: สีเขียวและสีแดงที่มีความสมบูรณ์เท่ากัน, สีเทาและสีชมพู, สีฟ้าบวกสีน้ำตาล ในท้ายที่สุด เราก็เลือกใช้สีแดงและสีเขียวเป็นสีพื้นฐาน เพิ่ม GIF ที่มีแมว และเลือกรูปถ่ายของ Sokolov 3-4 รูปจากภาพสต็อก ฉันมีข้อกำหนดเพียงไม่กี่อย่าง: ชายวัยกลางคนที่สวมสูทที่ไม่พอดีตัวและตัวใหญ่เกินไปและอยู่ในท่า "ถ่ายภาพในสตูดิโอมืออาชีพ" ในการทดสอบพวกเขาแสดงให้เพื่อนดูและถามว่า “คุณชอบมันแค่ไหน”

ในระหว่างกระบวนการพัฒนาการออกแบบ สามีของฉันต้องนอนลงทุกๆ ครึ่งชั่วโมง เฮลิคอปเตอร์ก็เริ่มบิน Pasha พยายามเปิดคอนโซลนักพัฒนาซอฟต์แวร์ไปยังหน้าจอส่วนใหญ่ในขณะที่เขาเสร็จสิ้นส่วนหน้า - เพื่อปกป้องดวงตาของเขา

อุปกรณ์จริง

พัดลมและไฟถูกติดตั้งผ่านรีเลย์โซลิดสเตต เพื่อไม่ให้เปิดทำงานเต็มกำลังในทันที - เพื่อให้กำลังเพิ่มขึ้นควบคู่ไปกับการตรวจสอบ

แต่เราจะพูดถึงเรื่องนี้ในโพสต์หน้า เกี่ยวกับส่วนฮาร์ดแวร์ของเกมและการก่อสร้างจริงของไซต์

คอยติดตาม!

บทความอื่น ๆ เกี่ยวกับภารกิจทำลายเซิร์ฟเวอร์

วิธีการสร้างแบ็กเอนด์ของเกมแฮ็กเกอร์เกี่ยวกับการทำลายเซิร์ฟเวอร์

ที่มา: will.com

เพิ่มความคิดเห็น