Chống lừa đảo khách hàng trong trò chơi nhiều người chơi 1vs1


8

Tôi đang phát triển một trò chơi bài đơn giản, nơi sẽ có một hệ thống mai mối sẽ đưa bạn chống lại một người chơi khác. Đây sẽ là chế độ trò chơi duy nhất có sẵn, 1vs1 chống lại một người khác, không có AI.

Tôi muốn ngăn chặn gian lận càng nhiều càng tốt. Tôi đã đọc rất nhiều câu hỏi tương tự ở đây và tôi đã biết rằng tôi không thể tin tưởng khách hàng và tôi phải thực hiện tất cả các máy chủ xác minh. Tôi dự định có một máy chủ (dù sao cũng cần một máy chủ để mai mối) và tôi dự định sẽ thực hiện một số máy chủ xác minh nhưng nếu tôi muốn kiểm tra mọi thứ phía máy chủ thì điều này giúp máy chủ của tôi có thể theo dõi trạng thái của tất cả các trò chơi hiện tại và kiểm tra mọi hành động và tôi không có tiền / cơ sở hạ tầng để hỗ trợ máy chủ đó.

Ý tưởng của tôi là làm cho khách hàng kiểm tra và xác minh một số hành động được thực hiện bởi đối thủ của họ * và nếu họ tìm thấy một số hành động bất hợp pháp thông báo việc gian lận có thể xảy ra với máy chủ và khiến máy chủ xác minh. Điều này vẫn sẽ yêu cầu máy chủ của tôi theo dõi tất cả các trò chơi hiện tại, nhưng nó sẽ tiết kiệm tài nguyên chỉ kiểm tra một số thứ không thể kiểm tra ở phía máy khách (như thứ tự thẻ trong bộ bài) và chỉ kiểm tra những thứ khác khi chúng thực sự sai.

* (chỉ những người họ có thể kiểm tra mà không cho phép bản thân gian lận! ví dụ: họ không thể kiểm tra xem thẻ đã chơi có trong tay không, họ sẽ cần họ biết tất cả các thẻ trong tay)

Tóm tắt, câu hỏi của tôi là : đây có phải là một cách tiếp cận khả thi? Tôi thực sự sẽ tiết kiệm tài nguyên làm điều này hay sự phức tạp thêm trong máy chủ và máy khách để trao đổi tin nhắn này không đáng? Bạn có biết trò chơi nào đã thử thành công hoặc không thành công một cách tiếp cận tương tự không?

Cảm ơn tất cả đã đọc và trả lời


Tất nhiên, sau đó bạn cần xác thực các kiểm tra khách hàng đó ...
ThorinII

vâng, ý tưởng là tiết kiệm một số xác nhận bằng cách chỉ kiểm tra các kiểm tra khách hàng đó, không phải tất cả các hành động. Nhưng như Philip đã nói, nó có lẽ là một sự tối ưu hóa sớm
garcianavalon

Câu trả lời:


8

Tùy thuộc vào mức độ phức tạp của trò chơi của bạn, việc xác minh xem một hành động có hợp pháp hay không có thể yêu cầu quay lại các phần lớn của trò chơi. Một ví dụ: Người chơi A nói rằng Người chơi B không thể chơi bài đó ngay bây giờ vì anh ta không có ResourceX. PlayerB nói rằng anh ta có nhiều ResourceX. Ai đúng? Để tìm hiểu, bạn sẽ mô phỏng lại toàn bộ trò chơi từ đầu đến cuối để đếm ResourceX mà PlayerB có ngay bây giờ. Vì vậy, chỉ xác minh hành động của người chơi khi một tiếng kêu "hôi" có thể không thực sự là một sự tối ưu hóa.

Nhưng nỗ lực có thực sự xứng đáng?

Tôi nghĩ rằng bạn có thể có một trường hợp tối ưu hóa sớm ở đây. Mặc dù tôi không biết chính xác những gì bạn đang làm, một trò chơi bài thường không đắt về mặt tính toán ở phía máy chủ.

Các trò chơi bài thường được thiết kế để chơi mà không cần sự hỗ trợ của máy tính, vì vậy cơ chế trò chơi của chúng thường đơn giản về mặt tính toán đủ để con người thực hiện *. Ngoài ra, người chơi thường mất vài giây để di chuyển, cảm giác như là vĩnh cửu cho máy chủ. Điều đó có nghĩa là máy chủ của bạn chỉ có một nhiệm vụ nhẹ để thực hiện cứ sau vài giây cho mỗi trò chơi. Tôi không biết có bao nhiêu người chơi đồng thời bạn mong đợi, nhưng miễn là bạn vẫn ở trong quy mô của một dự án sở thích phi thương mại, tôi nghi ngờ rằng ngay cả máy chủ rẻ nhất bạn có thể tìm thấy sẽ không thể xử lý được. Về tiền đề, tất nhiên, rằng bạn biết cách lập trình hiệu quả.

*) miễn là bạn loại trừ người chơi ra quyết định. Hầu hết các trò chơi được xây dựng dựa trên tiền đề rằng chiến lược chiến thắng lý tưởng có thể được tính toán trên lý thuyết, nhưng làm như vậy rất phức tạp đến nỗi người chơi và thậm chí cả máy tính không thể làm như vậy, vì vậy họ cần sử dụng trực giác. Nhưng bạn nói rằng bạn muốn không có AI và chỉ muốn người chơi so với người chơi, vì vậy điều này nằm ngoài phạm vi của câu hỏi này. Nhưng nó cũng khiến người ta phải suy nghĩ về một khía cạnh gian lận khác: Bạn đã xem xét một người chơi sử dụng một chương trình để giúp họ ra quyết định chưa? Giống như một trong đó cho họ biết xác suất chính xác rằng đối thủ có một thẻ nhất định trong tay?


Tôi nghĩ bạn đã đúng, tôi đang cố gắng tránh quá tải máy chủ trước khi thực sự quá tải. Thực tế là bạn đã trả lời câu hỏi của tôi với cùng một câu hỏi (là nỗ lực thực sự xứng đáng) tổng hợp nó khá tốt
garcianavalon

Đối với những khách truy cập khác, lưu ý rằng, trừ khi nó thực sự giao tiếp với mã trò chơi (và có khả năng ngay cả sau đó), khả năng phát hiện một chương trình bên ngoài cung cấp trợ giúp 'xác suất' về cơ bản là không.
Clockwork-Muse

4

"Tôi muốn ngăn chặn gian lận càng nhiều càng tốt." - Vì vậy, nói tất cả chúng ta. :)

Có lẽ một cách tiếp cận hợp lý hơn là không lãng phí thời gian để làm bất cứ điều gì ở trên và ngoài các biện pháp chống gian lận hợp lý và nói chung hiệu quả.

Đó là: kiểm tra hai lần các lỗi cho phép người chơi thực hiện bất kỳ hành động bất hợp pháp nào và chỉ gửi dữ liệu được mã hóa (thông qua https hoặc mã hóa tùy chỉnh) và mã hóa chính ứng dụng để gây khó khăn hơn cho việc hack. Đó là nó.

Người chơi có nhiều khả năng gian lận thông qua các lỗi trong trò chơi hơn bất kỳ điều gì khác.

Bạn có thể chỉ đơn giản là làm tốt hơn, phát triển khôn ngoan, để chờ xem người chơi của bạn có thực sự quan tâm đủ để gian lận hay không. Nếu ứng dụng không nằm trong "biểu đồ 500 hàng đầu" theo nghĩa bóng và việc gian lận không đơn giản (tức là lỗi), người chơi sẽ không quan tâm đến việc lãng phí thời gian của mình để cố gắng gian lận thông qua các biện pháp khác, chẳng hạn như sửa đổi luồng IP hoặc hack ứng dụng.

Tất nhiên trừ khi bạn giao dịch tiền thật và giải thưởng thực tế ở đây.

Nếu ứng dụng của bạn thành công và gian lận trở thành một vấn đề, đó là lúc bạn nên giải quyết nó. Nhưng tại thời điểm này, đây sẽ là một trò chơi mèo và chuột, và những kẻ gian lận sẽ luôn chiến thắng.

Về cơ bản điều tôi đang nói là 100% người chơi của bạn sẽ không gian lận nếu không thể thông qua một lỗi có thể lặp lại và / hoặc ứng dụng của bạn không phổ biến lắm. Nếu ứng dụng của bạn trở nên rất phổ biến, ít hơn 1% người chơi của bạn sẽ gian lận theo những cách mà bạn thậm chí không thể tưởng tượng được.

Vì vậy, khi gian lận diễn ra, bạn nên tự bảo vệ mình trước các mánh gian lận rõ ràng (lỗi, mã hóa cả ứng dụng và luồng IP) và chỉ phản ứng với các mánh gian lận thực tế mà bạn tìm hiểu và giải quyết trực tiếp. Những gì bạn thực sự muốn là ghi nhật ký tất cả các hành động của người chơi, yêu cầu họ xác minh trên máy chủ và nếu bạn tìm thấy một hành động bất hợp pháp xảy ra khá thường xuyên, hãy tìm hiểu lý do tại sao. Có thể là một lỗi, có thể là một khai thác, có thể là một hack kỹ thuật.

Biện pháp chống gian lận quan trọng nhất là học rằng người chơi thực sự LÀM gian lận, và làm thế nào.


cảm ơn, một câu trả lời rất tốt quá Thật vô nghĩa khi dành thời gian cố gắng tạo ra giải pháp chống trộm tốt nhất trong khi gặp lỗi có thể khai thác, tôi sẽ làm việc trước trong những điều cốt lõi mà mọi trò chơi cần bảo vệ một cách khôn ngoan và sau đó khắc phục các vấn đề xuất hiện, thay vì ngược lại!
garcianavalon

0

Tôi nghĩ rằng bạn đang gặp phải một số vấn đề khác ở đây. Điều gì sẽ xảy ra nếu người chơi giả mạo thành một khách hàng bình thường (bằng cách mô phỏng lưu lượng truy cập mạng của bạn) và đang sử dụng để làm hỏng trò chơi của bạn bằng cách xác nhận sai?

Thay vì cố gắng xây dựng một hệ thống máy khách chống đạn, điều này sẽ dẫn bạn đến việc sửa lỗi và cấm khai thác liên tục, tôi sẽ cố gắng đơn giản hóa hệ thống máy chủ. Tôi không biết đủ về cơ chế trò chơi của bạn, nhưng có lẽ bạn có thể đưa thông tin trên máy chủ xuống mức tối thiểu.

Nói chung, bạn nên cho rằng ứng dụng khách mà bạn đang nói chuyện có thể triển khai bất kỳ mã và cơ chế trò chơi nào mà nó cảm thấy giống như đang triển khai. Và điều này làm cho việc xác nhận phía khách hàng gần như không thể


0

Nó phụ thuộc một chút vào những gì bạn coi là gian lận. Có phải nó đang sử dụng một công cụ để thực hiện / tính toán các bước di chuyển? Có phải để thay đổi bộ bài trong khi chơi? Điều đầu tiên sẽ khó giải quyết. Đối với người thứ hai, bạn có thể nghĩ về việc mỗi người dùng chèn thẻ của mình và tạo mã băm được hiển thị ở cả hai bên. Cuối cùng, máy chủ có thể tính toán hàm băm với các thẻ đã chơi và các thẻ còn lại. Nếu một hàm băm không khớp thì người dùng đã gian lận. Nếu các quy tắc không được tuân theo thì bạn cũng có thể kiểm tra điều này trên máy chủ của mình. Bạn có thể làm điều này theo yêu cầu của người dùng để tiết kiệm tài nguyên. Không có thông tin trên thẻ trở nên có sẵn. Để làm cho thế hệ băm trở nên độc đáo / phức tạp hơn một chút, bạn có thể đưa tên người dùng vào hàm băm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.