Phần phụ trợ của trò chơi hacker về việc phá hủy máy chủ được tạo ra như thế nào

Phần phụ trợ của trò chơi hacker về việc phá hủy máy chủ được tạo ra như thế nào
Chúng tôi tiếp tục cho bạn biết nhiệm vụ laser của chúng tôi với việc phá hủy máy chủ đã được sắp xếp như thế nào. Bắt đầu ở phần trước bài viết về việc giải quyết nhiệm vụ.

Tổng cộng, phần phụ trợ của trò chơi có 6 đơn vị kiến ​​trúc mà chúng tôi sẽ phân tích trong bài viết này:

  1. Phần phụ trợ của các thực thể trò chơi chịu trách nhiệm về cơ chế trò chơi
  2. Bus trao đổi dữ liệu phụ trợ và trang web trên VPS
  3. Trình dịch từ các yêu cầu phụ trợ (các thành phần trò chơi) sang Arduino và phần cứng tại chỗ
  4. Arduino, chịu trách nhiệm điều khiển rơle, nhận lệnh từ người dịch và thực hiện công việc thực tế
  5. Các thiết bị thực tế: quạt, vòng hoa, đèn sàn, v.v.
  6. Frontend - chính trang web Falcon, từ đó người chơi điều khiển các thiết bị

Chúng ta hãy đi qua từng người trong số họ.

Phần phụ trợ của các thực thể trò chơi

Phần phụ trợ được triển khai dưới dạng ứng dụng khởi động mùa xuân: nó có một số bộ điều khiển còn lại, điểm cuối websocket và các dịch vụ có logic trò chơi.

Chỉ có ba bộ điều khiển:

  • Megatron. Trang Megatron hiện tại được gửi thông qua các yêu cầu GET: trước và sau khi bật nguồn. Tia laser bắn qua yêu cầu POST.
  • Ánh xạ các trang dấu ngã để chúng được phục vụ theo tên trang. Tilde tạo ra các trang để xuất không phải với tên gốc mà có ID nội bộ và thông tin tuân thủ.
  • Bộ điều khiển captcha để phục vụ captcha máy chủ giả tải cao.

Điểm cuối Websocket được sử dụng để điều khiển các tiện ích: đèn, vòng hoa và chữ cái. Nó được chọn để hiển thị đồng bộ cho tất cả người chơi trạng thái hiện tại của thiết bị: bật hay tắt, hoạt động hay không, màu chữ hiện đang sáng trên tường. Để làm cho nhiệm vụ bật tia laser trở nên khó khăn hơn một chút, chúng tôi đã thêm ủy quyền cho vòng hoa và tia laser với cùng thông tin đăng nhập và mật khẩu quản trị viên/quản trị viên.

Người chơi có thể kiểm tra nó bằng cách bật vòng hoa và lặp lại điều tương tự với tia laser.

Chúng tôi đã chọn một cặp mật khẩu đăng nhập tầm thường như vậy để không làm khổ người chơi bằng những lựa chọn không cần thiết.

Để làm cho nhiệm vụ trở nên thú vị hơn một chút, ID đối tượng từ mongodb đã được sử dụng làm mã nhận dạng thiết bị trong phòng.

ObjectId chứa dấu thời gian: hai giá trị ngẫu nhiên, một trong số đó được lấy dựa trên mã định danh thiết bị và giá trị thứ hai dựa trên pid của quá trình tạo ra nó và giá trị bộ đếm. Tôi muốn tạo các số nhận dạng đều đặn và với các quy trình pid khác nhau, nhưng với một bộ đếm chung, để việc lựa chọn số nhận dạng thiết bị laser sẽ thú vị hơn. Tuy nhiên, cuối cùng, mọi người đều bắt đầu với các mã định danh chỉ khác nhau ở giá trị bộ đếm. Điều này có thể khiến bước này trở nên quá đơn giản và không yêu cầu phân tích cấu trúc objectId.

Trình dịch từ các yêu cầu phụ trợ

Tập lệnh Python, người đã làm việc về bộ tính giờ và chuyển chúng từ các khái niệm trừu tượng về trò chơi sang mô hình vật lý. Ví dụ: “bật đèn sàn” → “bật rơle N2.”

Tập lệnh đã kết nối với hàng đợi RabbitMQ và chuyển các yêu cầu từ hàng đợi sang Arduino. Nó cũng thực hiện logic chuyển đổi ánh sáng song song: cùng với một số thiết bị, đèn trên chúng được bật, chẳng hạn như khi nguồn điện ban đầu được cấp cho Megatron, nó được chiếu sáng bằng đèn sân khấu. Thiết kế ánh sáng cho toàn bộ cảnh quay là một câu chuyện riêng về công việc tuyệt vời của người đồng sản xuất dự án và nhà thiết kế sản xuất Ilya Serov của chúng tôi, và chúng tôi sẽ kể về nó trong một bài riêng.

Người dịch cũng chịu trách nhiệm về tính logic của việc khởi chạy máy hủy tài liệu bằng cách sử dụng đồng hồ hẹn giờ và truyền hình ảnh đến TV: đồng hồ hẹn giờ khởi chạy máy hủy tài liệu, một con chuột lang nước la hét, một đoạn quảng cáo ở cuối trò chơi.

Cách cấu trúc logic để tạo mã thông báo Megatron

Bắn thử

Cứ sau 25 giây, một mã thông báo mới được tạo và có thể được sử dụng để bật tia laser trong 10 giây ở mức công suất 10/255. Liên kết tới github với mã Megatron.

Sau đó, tia laser nguội đi trong 1 phút - trong thời gian này nó không khả dụng và không chấp nhận các yêu cầu bắn mới.

Sức mạnh này không đủ để đốt cháy sợi dây, nhưng bất kỳ người chơi nào cũng có thể bắn Megatron và nhìn thấy chùm tia laze hoạt động.

Thuật toán băm MD5 đã được sử dụng để tạo mã thông báo. Và kế hoạch đã thành công MD5 từ MD5 + bộ đếm + bí mật để có mã thông báo chiến đấu và không có bí mật cho mã thông báo thử nghiệm.

MD5 là tham chiếu đến một dự án thương mại mà Pavel, người hỗ trợ của chúng tôi, đã thực hiện. Chỉ vài năm trước, dự án này đã sử dụng MD5 và khi anh ấy nói với kiến ​​trúc sư dự án rằng đó là một thuật toán mã hóa lỗi thời, họ đã bắt đầu sử dụng MD5 từ MD5. Vì chúng tôi quyết định thực hiện dự án mới nhất có thể nên anh ấy đã nhớ mọi thứ và quyết định đưa ra một tài liệu tham khảo nhỏ.

Bắn chiến đấu

Chế độ chiến đấu của Megatron là 100% năng lượng laser ở công suất 3 watt. Điều này đủ để đốt cháy sợi dây giữ trọng lượng trong 2 phút, làm vỡ bể cá và làm ngập nước vào máy chủ.

Chúng tôi đã để lại một số gợi ý trên Github của dự án: cụ thể là mã tạo mã thông báo, từ đó người ta có thể hiểu rằng mã thông báo thử nghiệm và chiến đấu được tạo dựa trên cùng một chỉ báo truy cập. Trong trường hợp mã thông báo chiến đấu, ngoài giá trị đếm, một loại muối còn được sử dụng, gần như hoàn toàn còn sót lại trong lịch sử thay đổi ý chính này, ngoại trừ hai ký tự cuối cùng.

Biết được dữ liệu này, người ta có thể sắp xếp 2 ký hiệu cuối cùng của muối và thực sự phát hiện ra rằng các số từ Lost, được chuyển đổi sang hệ thập lục phân, đã được sử dụng cho nó.

Sau đó, người chơi phải nắm bắt giá trị bộ đếm (bằng cách phân tích mã thông báo kiểm tra) và tạo mã thông báo chiến đấu bằng cách sử dụng giá trị bộ đếm tiếp theo và muối đã chọn ở bước trước.

Bộ đếm chỉ tăng lên sau mỗi lần chụp thử và cứ sau 25 giây. Chúng tôi đã không viết về điều này ở bất cứ đâu, nó được cho là một trò chơi nhỏ bất ngờ.

Dịch vụ tương tác Captcha

Trong thế giới trò chơi, đây chính là hình ảnh xác thực phải được tải để bật quạt và mở bảng lật kèm theo gợi ý. Bên cạnh camera là một chiếc máy tính xách tay có tính năng giám sát tải.

Phần phụ trợ của trò chơi hacker về việc phá hủy máy chủ được tạo ra như thế nào

Dịch vụ Tôi đã tính toán những gì sẽ hiển thị trong quá trình giám sát dưới dạng tải hiện tại: nhiệt độ và Quạt CPU. Các số liệu đã được chuyển đến cơ sở dữ liệu timebase và được hiển thị bởi grafana.

Nếu trong 5 giây cuối cùng có hơn 50 yêu cầu hiển thị hình ảnh xác thực thì tải sẽ tăng theo số bước cố định + ngẫu nhiên. Tính toán là có thể đạt được 100% tải trong hai phút.

Trên thực tế, dịch vụ này có nhiều logic hơn những gì được hiển thị trong trò chơi cuối cùng: chúng tôi đặt màn hình sao cho chỉ có thể nhìn thấy chuyển động quay của Quạt CPU.

Khi bắt đầu nhiệm vụ, họ muốn để Grafan có thể truy cập được từ trang web Falcon. Nhưng nó cũng chứa các số liệu springboot từ báo cáo ứng dụng phụ trợ mà chúng tôi không có thời gian để xóa nên chúng tôi quyết định chặn quyền truy cập vào nó. Và đúng như vậy - ngay từ khi bắt đầu nhiệm vụ, một số người chơi đã đoán rằng ứng dụng này được viết bằng framework springboot và thậm chí còn tìm ra tên của một số dịch vụ.

Bus lưu trữ và dữ liệu

Một công cụ để truyền thông tin từ phần phụ trợ đến trang web, máy chủ VPS nơi RabbitMQ đang chạy.

Bus phụ trợ và dữ liệu vẫn được duy trì VPS của chúng tôi. Sức mạnh của nó có thể so sánh với chiếc máy tính bạn nhìn thấy trên màn hình: VPS 2 lõi với RAM XNUMX gigabyte. Thuế được tính cho các tài nguyên vì thời gian tải cao nhất được lên kế hoạch chỉ trong vài ngày - đây là điều mà khách hàng của chúng tôi làm khi dự định tải VPS trong một khoảng thời gian ngắn. Sau đó, hóa ra tải trọng cao hơn chúng tôi mong đợi và mức thuế cố định sẽ có lợi hơn. Nếu bạn thực hiện một nhiệm vụ, hãy chọn mức thuế dòng bộ tăng áp.

Để bảo vệ máy chủ khỏi DDoSa, chúng tôi đã sử dụng Cloudflare.

Điều đáng nói là VPS đã đứng vững trước mọi thứ một cách danh dự.

Arduino, chịu trách nhiệm điều khiển rơle, nhận lệnh từ người dịch và thực hiện công việc thực tế

Đây chính là chủ đề của bài viết tiếp theo về phần cứng của dự án: phần phụ trợ chỉ gửi yêu cầu bật một rơle cụ thể. Điều đó đã xảy ra đến mức phần phụ trợ biết hầu hết tất cả các thực thể và các yêu cầu từ nó trông giống như “bật thực thể này”. Chúng tôi đã làm điều này để thử nghiệm sớm trang web (chúng tôi chưa lắp ráp tất cả Arduino và rơle), cuối cùng chúng tôi vẫn để mọi thứ như vậy.

giao diện người dùng

Chúng tôi đã nhanh chóng tạo trang web trên dấu ngã, chỉ mất một ngày làm việc và tiết kiệm được 30 nghìn trong ngân sách của chúng tôi.

Ban đầu, chúng tôi chỉ nghĩ đến việc xuất trang web và thêm logic mà chúng tôi còn thiếu, nhưng chúng tôi gặp phải các điều khoản sử dụng cấm chúng tôi làm điều này.

Chúng tôi chưa sẵn sàng vi phạm giấy phép, vì vậy có hai lựa chọn: tự mình thực hiện mọi thứ hoặc liên hệ trực tiếp với Tilda, nói về dự án và xin phép thay đổi mã.

Chúng tôi đã chọn phương án thứ hai và họ không chỉ gặp chúng tôi được nửa đường mà thậm chí còn cho chúng tôi một năm tài khoản kinh doanh miễn phí, điều mà chúng tôi rất biết ơn họ. Thật là lúng túng khi cho họ xem thiết kế trang web của Sokol.

Do đó, chúng tôi đã gắn logic js vào giao diện người dùng để gửi yêu cầu đến các thiết bị cơ bản và thay đổi một chút kiểu nút để bật và tắt các thành phần trò chơi.

Thiết kế trang web

Lịch sử tìm kiếm có giá trị bằng một chương riêng.

Chúng tôi muốn tạo ra không chỉ một trang web lỗi thời mà còn là một trang web hoàn toàn kinh tởm vi phạm tất cả các quy tắc thiết kế cơ bản. Đồng thời, điều quan trọng là phải duy trì độ tin cậy: nó không được phá vỡ câu chuyện ENT, thể hiện sự kiêu ngạo của tác giả và người chơi sẽ phải tin rằng một trang web như vậy có thể tồn tại và thậm chí thu hút khách hàng. Và anh ấy đã mang nó đến! Trong khi trò chơi đang diễn ra, chúng tôi đã được liên hệ hai lần để tạo trang web.

Lúc đầu, tôi tự thiết kế, cố gắng đưa vào nhiều ảnh gif và các yếu tố lấp lánh hơn. Nhưng người chồng thiết kế 10 năm của tôi đã coi thường và cho rằng nó “quá tốt”. Để phá vỡ các quy tắc thiết kế, bạn cần phải biết chúng.

Phần phụ trợ của trò chơi hacker về việc phá hủy máy chủ được tạo ra như thế nào

Có một số cách kết hợp màu sắc gợi lên cảm giác ghê tởm lâu dài: xanh lá cây và đỏ có độ đậm tương đương, xám và hồng, xanh dương cộng với nâu. Cuối cùng, chúng tôi quyết định kết hợp màu đỏ và xanh lá cây làm màu cơ bản, thêm ảnh gif có hình một con mèo và chọn 3-4 bức ảnh của chính Sokolov từ một bức ảnh có sẵn. Tôi chỉ có một vài yêu cầu: một người đàn ông trung niên, mặc một bộ vest không vừa vặn, cỡ lớn vài cỡ và tạo dáng “chụp ảnh studio chuyên nghiệp”. Đối với bài kiểm tra, họ cho bạn bè xem và hỏi "bạn thích nó như thế nào?"

Trong quá trình phát triển thiết kế, chồng tôi cứ nửa giờ lại phải nằm một lần, trực thăng bắt đầu bay. Pasha cố gắng mở gần hết màn hình bảng điều khiển dành cho nhà phát triển trong khi hoàn thiện giao diện người dùng - để bảo vệ đôi mắt của mình.

Thiết bị thực tế

Quạt và đèn được gắn thông qua rơ-le trạng thái rắn để chúng không bật hết công suất ngay lập tức - để công suất tăng song song với việc giám sát.

Nhưng chúng ta sẽ nói về vấn đề này trong bài đăng tiếp theo, về phần phần cứng của trò chơi và cách xây dựng thực tế của trang web.

Hãy theo dõi!

Các bài viết khác về nhiệm vụ phá hủy máy chủ

Phần phụ trợ của trò chơi hacker về việc phá hủy máy chủ được tạo ra như thế nào

Nguồn: www.habr.com

Thêm một lời nhận xét