2013-03-14 21 views
5

Tôi đang tạo trò chơi C++ 11 trong đó điểm số được gửi đến máy chủ. Tôi đang lưu trữ điểm số như một phao đơn giản, vì vậy mọi người sử dụng phần mềm như Cheat Engine có thể dễ dàng thay đổi giá trị của điểm số trước khi nó được gửi đến máy chủ.Bảo vệ trò chơi từ máy quét bộ nhớ (như Cheat Engine)

Tôi làm cách nào để bảo vệ trò chơi của mình chống lại loại tấn công này?

+0

Bạn không thể. Bạn cần xác thực dữ liệu đang được gửi đến máy chủ, phía máy chủ. – meagar

+0

Gửi băm muối cùng một lúc ... –

Trả lời

8

Có nhiều tùy chọn bạn có thể làm nhưng tốt nhất là không chấp nhận bất kỳ giá trị quan trọng nào từ khách hàng. Yêu cầu máy chủ thực hiện tất cả phép tính và gửi các giá trị cho máy khách.

+0

Đây không phải lúc nào cũng là một tùy chọn. – supertonsky

+0

@supertonsky Làm thế nào? Tôi không thể nghĩ ra một trò chơi nào không làm được điều này. – Caesar

+0

Có một số trò chơi thực hiện tính toán trên máy khách nhưng bất kể tôi làm gì với trò chơi bằng cách sử dụng công cụ lừa đảo, tôi không thể chỉ đơn giản là hack trò chơi. Vì lý do nào đó tôi không thể truy cập vào bộ nhớ. Bây giờ đó là một cái gì đó. Dù đó là gì, nó là rực rỡ. Có một số trò chơi bạn có thể truy cập vào bộ nhớ nhưng một khi bạn nhận được địa chỉ, "biến" dường như tiếp tục thay đổi địa chỉ bộ nhớ mà về cơ bản làm cho các ứng dụng như công cụ cheat vô ích. – supertonsky

2

Mã hóa mọi dữ liệu bạn quan tâm (hoặc tất cả dữ liệu nếu có thể) nếu bạn phải thực hiện bất kỳ điều gì ở phía máy khách ngay từ đầu.

Rất có thể sẽ tốt hơn nếu máy chủ tính toán bất kỳ điều gì quan trọng. Ví dụ, trong Call of Duty, bạn muốn máy chủ quyết định ai bị bắn để máy tính/độ trễ/etc của người chơi cá nhân. không tham gia.

Nếu bạn đang làm trò chơi chỉ dành cho máy tính cục bộ và chỉ muốn tải lên điểm số ở cuối, tính toán máy chủ không phải là một tùy chọn. Trong trường hợp đó bạn thực sự phải chỉ gắn bó với mã hóa và làm xáo trộn các giá trị quan trọng ngay từ đầu. Chỉ có rất nhiều điều bạn có thể làm; nó có lẽ sẽ không bao giờ được chống đạn nếu nó được tính toán 100% phía khách hàng.

+1

Và tôi hy vọng bạn có thể làm điều đó mà không cần mã khóa trên máy khách? ;) –

+1

Một người dùng tinh vi có thể trích xuất khóa mã hóa và sử dụng nó để mã hóa bất kỳ điểm số nào họ muốn gửi đến máy chủ –

3

Có thực sự không có cách nào mà bạn có thể đảm bảo rằng giá trị không bị giả mạo. Những gì bạn có thể làm là gửi thông tin đầy đủ đến máy chủ mà nó có thể xác định "là điều này có thể" - ví dụ: nếu trò chơi của bạn là trò chơi kiểu "Pac-Man", bạn cũng có thể cung cấp tất cả "Blobs" mà Pac- Con người ăn, hoặc số lượng cho mỗi cấp độ và thời gian cần thiết để hoàn thành mỗi cấp độ, v.v. Nó không thể lừa đảo có thể tái tạo tất cả các dữ liệu cần thiết, nhưng nó làm cho nó khó khăn hơn để làm như vậy nếu bạn đang gửi nhiều dữ liệu hơn .

Nhưng mọi dữ liệu có sẵn bất kỳ lúc nào trong phần mềm của bạn đều có thể bị sửa đổi bởi ứng dụng loại "trình gỡ lỗi". Không có gì bạn có thể làm về điều đó.

0

Nếu đó là nhiều người chơi, thì về mặt lý thuyết, bạn có thể có một số thuật toán trong đó máy chủ yêu cầu câu trả lời cho các câu hỏi cụ thể từ một nhóm người dùng ngẫu nhiên. Một kẻ lừa đảo sẽ nhận được các câu trả lời khác nhau mà không có một số thông đồng chính.

Nếu trong một trò chơi như Call of Duty, bạn có thể có 30 người chơi và cần một đa số đông để đồng ý nếu một vụ giết người xảy ra. Bằng cách đó, không một đội nào có thể lừa dối bằng các phương pháp thông đồng. Bạn vẫn sẽ phải xem ra cho các tài khoản thay thế được sử dụng để leo lên một ban lãnh đạo.

Các vấn đề liên quan