Một số cách để ngăn chặn hoặc giảm gian lận trong các trò chơi trực tuyến nhiều người chơi là gì? [đóng cửa]


19

Punkbuster tồn tại chỉ để ngăn chặn gian lận, và gian lận là phổ biến trong các trò chơi kích hoạt punkbuster. Modern Warefare 2 bị khóa nghiêm trọng từ người dùng cuối đang chạy máy chủ của họ hoặc thực hiện bất kỳ mod nào, và gian lận xảy ra liên tục.

Đối với một trò chơi nhiều người chơi trong đó mỗi khách hàng đang chạy trên PC, có thể làm gì để giảm hoặc loại bỏ gian lận?



1
Bản thân đây không phải là một câu trả lời hoàn chỉnh nên tôi sẽ không liệt kê nó thành một, nhưng nếu bạn thêm một lượng giá trị nhất định vào tài khoản người chơi bên cạnh các phương pháp chống gian lận truyền thống tôi tin rằng có thể giúp ích. Ví dụ, nếu những người chơi mới bị rớt xuống các máy chủ "noob" cho đến khi họ có đủ kinh nghiệm để truy cập vào phần còn lại của trò chơi, điều đó khiến cho tin tặc phải cấp lại tài khoản của họ sau mỗi lần bị cấm. Có lẽ vẫn còn một số tin tặc có thể vượt qua điều đó, nhưng việc bảo vệ tài khoản / máy chủ mai mối của bạn dễ dàng hơn nhiều so với việc bảo vệ khách hàng.
Lewis Wakeford

Câu trả lời:


18

Nó phụ thuộc vào cách họ gian lận, tập trung vào một trong những cách chính để tạo ra trò gian lận, các quy trình khác bám vào ứng dụng của bạn và sửa đổi nó - bạn có thể liệt kê tất cả các quy trình khác và nối các phương thức thao tác bộ nhớ của họ và mô phỏng bàn phím / chuột của họ phương pháp.

Wallhacks thường được viết bằng cách tiêm mã giữa quy trình của bạn và các thư viện DirectX / GL để đặt độ trong suốt trên các vật liệu để có thể nhìn thấy chúng. Bạn có thể thêm một số mã vào hệ thống phân tích / loại bỏ của bạn để đặc biệt không thu hút người chơi / thực thể hữu ích khác nếu họ ở sau bức tường (để tránh gian lận theo cách đó).

Nếu bạn đang đi nhiều người chơi và muốn ngăn chặn các gói được sửa đổi giữa máy khách / máy chủ, thì việc tạo một tổng kiểm tra dữ liệu bạn đang gửi thông qua một số thuật toán của riêng bạn và kiểm tra điều này khi nó đi qua phía bên kia có thể có hiệu quả. (Bạn có thể cuối cùng sẽ làm điều này cho các mục đích QA khác nhau).

Điều tương tự cũng xảy ra với hầu hết các tài nguyên trong bộ nhớ của bạn, tạo tổng kiểm tra ở đầu khung và xác minh nó ở các giai đoạn khác nhau có thể mang lại một số phát hiện thao tác bộ nhớ khá tiện dụng.

Đây là một chủ đề khá liên quan, nhưng hy vọng điều này sẽ đưa bạn theo một hướng mơ hồ chấp nhận được.


Hoặc thậm chí tốt hơn là giấu các vật thể sau các bức tường (vẫn có thể bị hack), không cung cấp thông tin cho khách hàng về vị trí của người chơi đó (hoặc chỉ cần một hiệu ứng âm thanh 3d tốt)
Bart van Heukelom

17

Ở giải pháp cực đoan nhất, về cơ bản bạn không bao giờ tin tưởng khách hàng. Đối với các trò chơi như MMO, người dùng không chạy máy chủ của họ và mọi logic chơi trò chơi đều được xử lý phía máy chủ. Không bao giờ trao cho khách hàng quyền nói "Tôi có sức khỏe X" hoặc "Tôi có đạn X", v.v.


4
Thật tuyệt nếu bạn thực sự có tài nguyên để chạy một máy chủ chuyên dụng, nhưng đó là cách nhìn khá đơn giản. Nhiều khả năng bạn vẫn sẽ thực hiện nhiều logic trên máy khách và một tập hợp logic tối thiểu trên máy chủ, với sự đồng bộ hóa thỉnh thoảng để thực thi các quy tắc cơ bản. Nó cũng không nhất thiết ngăn chặn tất cả các mánh gian lận phía khách hàng như thao túng bộ nhớ / thao tác bộ nhớ để đánh lừa khách hàng tiết lộ thông tin hữu ích / v.v.
Rob Ashton

10

Nếu bạn có một hệ thống mà logic đắt tiền và phải được thực hiện chủ yếu trên máy khách để lưu chu kỳ máy chủ, bạn có thể triển khai hệ thống phát hiện gian lận xác suất. Cứ sau vài phút, nó lại chọn một vài người chơi khác để kiểm tra chặt chẽ và kiểm tra tính nhất quán trên máy chủ. Vì những kẻ gian lận hiếm khi giới hạn gian lận của họ trong khoảng thời gian ngắn và hiếm, cuối cùng họ sẽ bị bắt.

Một lợi ích khác cho điều này là họ sẽ không có chu kỳ quay vòng nhanh để phát triển - nếu trung bình phải mất 10 giờ chơi trò chơi để máy chủ chú ý đến bạn, thì đó là chu kỳ quay vòng 10 giờ mỗi lần bạn muốn xem nếu một cái gì đó làm việc Và nếu nó đã làm việc, nó thậm chí còn lâu hơn vì họ sẽ không biết nếu máy chủ đã cho họ một ngón tay cái lên hoặc chỉ đã không nhận xung quanh đối với họ.


+1 Về mặt hiệu suất, các cách tiếp cận ngẫu nhiên như thế này là câu trả lời thực tế duy nhất cho các vấn đề rộng lớn hơn, IMO. Ngoài OnLive, nghĩa là, nếu bạn chỉ nhắm mục tiêu đến Hoa Kỳ.
Kỹ sư

5

Ngoài ra còn có nhiều loại hack hỗ trợ aim cho các game bắn súng góc nhìn thứ nhất cũng hoạt động bằng cách nối vào các cuộc gọi thư viện đồ họa. OGC Hook cho Counter-Strike / HL1 có vô số tùy chọn ngoài việc làm cho các bức tường trở nên trong suốt.

Nếu thông tin vị trí cho kẻ thù tại một thời điểm nào đó được chuyển đến thư viện cấp thấp hơn có mã có sẵn rộng rãi, thì các cuộc gọi đó có thể được nối vào và dữ liệu vị trí, tỷ lệ, xoay, v.v. có thể được sử dụng để tính toán chính xác véc tơ tốt nhất để bắn khi kẻ thù đó Các hệ thống chống gian lận như PunkBuster thường bao gồm phát hiện kiểu heuristic (mức độ thường xuyên mà người chơi này có được một phát bắn hoàn hảo, tần suất họ quay quanh 180 suy thoái để hạ sát thủ một lần, v.v.) ngoài việc theo dõi bộ nhớ và quá trình.

Cuối cùng, nhiệm vụ ngăn chặn gian lận trong các trò chơi nhiều người chơi là trò chơi mèo vờn chuột. Khi các mánh gian lận mới được phát triển, các phương pháp chống gian lận mới được tạo ra, và sau đó các mánh gian lận mới được xây dựng để tránh các công nghệ chống gian lận mới.

Như Tetrad đã nói trong phản hồi của mình, các quy tắc cứng và nhanh duy nhất cho "bảo mật trò chơi" là cung cấp cho khách hàng càng ít thông tin càng tốt và tin tưởng khách hàng ít nhất có thể. Các loại trò chơi khác nhau sẽ có các yêu cầu khác nhau có thể ảnh hưởng đến mức độ bạn có thể tuân thủ các quy tắc này.

Trong một trò chơi FPS, vì tốc độ chơi quá nhanh, nên thường không thể chỉ cung cấp cho khách hàng dữ liệu mà họ nên biết về chính xác này ngay lập tức. Nếu bạn không nói với khách hàng rằng có kẻ thù ở góc đó và người chơi sẽ đi quanh góc đó, bạn đột nhiên phải gửi cho họ thông tin đó trong một phần nghìn giây hoặc có nguy cơ người chơi bị giết bởi kẻ thù mà họ không giết từng thấy

"Khắc phục" duy nhất cho những vấn đề hiện đang có sẵn có lẽ là OnLive. Bởi vì dịch vụ đó chỉ cung cấp nội dung âm thanh và video từ máy khách đang chạy an toàn trong trung tâm dữ liệu, nên phương tiện duy nhất để gian lận là về cơ bản tạo ra AI của con người có thể phân tích luồng video đến và thực hiện hành động dựa trên đó - một nhiệm vụ mà ít, nếu có, gian lận lên đến.


3

Tất cả các câu trả lời ở trên là tuyệt vời, nhưng tôi sẽ thêm một phần khác:

Một số trò chơi có tính năng phát lại rất chắc chắn, cho phép lưu lại mọi trò chơi sau khi trò chơi kết thúc ở định dạng nhỏ gọn và xem nó theo nhiều cách khác nhau - quan điểm người chơi khác nhau, giao diện người dùng thống kê thời gian thực, v.v.

Ví dụ mà tôi rất quen thuộc: Starcraft 2. Một trong những cách mà Blizzard chặn tin tặc là bằng cách nhận bằng chứng gian lận khi phát lại trò chơi.

Một ví dụ cho việc sử dụng trong FPS sẽ là: nếu bạn chơi một trò chơi và bạn nghi ngờ rằng người khác bị lừa với hack tường, bạn xem lại, và sau đó thấy rằng trong tầm nhìn phát lại bình thường của mình, anh ta không thể có nhìn thấy bạn và ném lựu đạn qua góc, hoặc bất cứ điều gì.

Sau đó, bạn báo cáo anh ta với phát lại, và nếu bằng chứng chống lại anh ta là đủ tốt, anh ta bị cấm. Theo tôi biết, các công ty làm những việc này chỉ lấy bằng chứng nghiêm trọng, hoặc nhiều nguồn bằng chứng về hành vi tương tự trước khi cấm.

Vì vậy, đây không phải là một kỹ thuật chống gỡ lỗi, đây là một hệ thống báo cáo người dùng cho phép bằng chứng gian lận được hỗ trợ bởi con người.


0

Đây có thể không phải là một câu trả lời đầy đủ, nhưng tôi có một số đầu vào ở đây. Một trong những cách tốt nhất để ngăn chặn gian lận là che giấu hoặc sử dụng C / C ++. Điều này ngăn mọi người sửa đổi mã máy khách.


Điều đáng nói là có rất nhiều máy khử mùi ngoài kia. Ngoài ra, các trò chơi .Net (C #, XNA) có thể được sửa đổi bằng Reflection. Từ những gì tôi biết, tôi đoán C / C ++ thực sự là một cách để làm cho nó khó bị giả mạo mã.
dùng1306322

Vâng. Quan điểm của tôi chỉ là việc obfuscation ngăn chặn việc dịch mã dễ dàng thành không thể đọc được và C / C ++ không dễ biên dịch, cả hai đều là những lựa chọn tốt.
LiquidFeline

Ngoài ra, nếu bạn vá trò chơi của mình thường xuyên và thay đổi các giá trị nhị phân trong các NOP ngẫu nhiên có thể thực thi hoặc chèn, sẽ không có bản hack nào tồn tại đủ lâu ...
SirKnigget

@CPP_Person: Thật ra C khá nổi tiếng vì rất dễ biên dịch. Đây là một vấn đề hoàn toàn khác đối với C ++, đây thực sự là một ngôn ngữ khá phức tạp từ góc độ trình biên dịch. Tuy nhiên tôi không hiểu, tại sao nó lại quan trọng, việc biên dịch một ngôn ngữ lập trình nhất định dễ dàng như thế nào - bạn muốn ngăn mọi người viết các công cụ gian lận, chứ không phải viết một trình biên dịch tốt - dù sao họ cũng sẽ sử dụng trình biên dịch C ++ việc dịch ngược khó khăn có vẻ thú vị hơn nhiều đối với tôi so với việc biên dịch khó.
Kaiserludi
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.