Đảm bảo rằng dữ liệu đã lưu chưa được chỉnh sửa trong trò chơi có cả thành phần ngoại tuyến và trực tuyến


8

Tôi đang trong giai đoạn lên kế hoạch trước khi đưa ra một thiết kế trò chơi và tôi đã tự hỏi liệu có cách nào hợp lý để ngăn mọi người chỉnh sửa các bản lưu trong trò chơi với các thành phần ngoại tuyến và trực tuyến hay không.

Thành phần ngoại tuyến sẽ cho phép người chơi chơi qua trò chơi và thành phần trực tuyến sẽ cho phép họ chơi với những người chơi khác, vì vậy tôi cần đảm bảo rằng mọi người đã không chỉnh sửa mã nguồn / lưu tệp trong khi ngoại tuyến để có được lợi thế trong khi trực tuyến

Trò chơi có khả năng được phát triển bằng .Net hoặc Java, cả hai đều không may dễ dịch ngược.

Câu trả lời:


10

Có thể dịch ngược / thiết kế ngược mã khách hàng một cách dễ dàng thực sự chỉ là một trở ngại nhỏ. Các tin tặc táo bạo đã bẻ cong các thực thi theo ý muốn của chúng (độc hại và không) trong nhiều năm trước khi các ngôn ngữ cấp cao, tầm thường để dịch ngược như C # xuất hiện. Bảo mật thông qua che khuất một mình là không có bảo mật nào cả.

Mọi dữ liệu trên máy của người dùng (mã hoặc dữ liệu tài sản thông thường) về cơ bản đã bị xâm phạm. Bạn thực sự không thể tự bảo vệ mình trước điều đó - nếu bạn không muốn mọi người chỉnh sửa dữ liệu, đừng đưa nó vào máy của họ, hãy lưu nó trên máy chủ của bạn. Tương tự như vậy nếu bạn không muốn họ sửa đổi mã trong máy khách, hãy đảm bảo máy khách không có quyền kiểm soát đối với bất kỳ thứ gì hữu ích.

Nếu đó không phải là một tùy chọn (ví dụ: nhiều người chơi của bạn hoàn toàn ngang hàng), bạn có thể thực hiện những việc như băm tính toán các tài sản có liên quan và chỉ cho phép mọi người chơi với nhau nếu băm khớp. Có, ai đó có thể cẩn thận tạo một bản chỉnh sửa cho tệp thực thi sao cho nó trả về một hàm băm khác, nhưng tất cả điều đó có nghĩa là người chơi vi phạm sẽ đồng bộ hóa và ngắt kết nối khỏi trò chơi một cách tương đối nhanh chóng vì tài sản của họ không khớp với phần còn lại của những người chơi'.

Bạn cũng có thể sử dụng loại thử nghiệm "quy tắc đa số" cho phép bạn ngắt kết nối những người chơi có mô phỏng không đồng bộ với những người chơi khác, cho người chơi "chủ nhà" (bất cứ ai bắt đầu trò chơi) bỏ phiếu thắng.


3

Nếu dữ liệu là tất cả phía máy khách, bạn không thể làm gì về việc này. Bạn không thể phân biệt sự khác biệt giữa chỉnh sửa được thực hiện bởi phần mềm của bạn và chỉnh sửa được thực hiện bởi ai đó hoặc người khác giả danh là phần mềm của bạn.

Một cách ngăn chặn bạn có thể thử là mã hóa tệp lưu, sử dụng khóa trong phần mềm. Thật không may, nếu người dùng đủ tốt để chỉnh sửa tệp lưu, họ cũng đủ tốt để tìm khóa trong phần mềm của bạn.

Bạn có thể ngăn mọi người chỉnh sửa các bản lưu bằng cách không lưu trữ chúng trên máy của khách hàng, vd. bằng cách tải chúng lên máy chủ - nhưng điều đó không ngăn họ tải lên một bản lưu bị hack ngay từ đầu! Trò chơi trực tuyến giải quyết vấn đề này bằng cách giữ trạng thái trò chơi có thẩm quyền trên máy chủ của họ mọi lúc, nhưng điều đó sẽ không hoạt động cho chế độ ngoại tuyến của bạn.

Vì vậy, thực sự, câu trả lời là không - bất cứ điều gì trò chơi của bạn có thể làm để chỉnh sửa, che khuất hoặc mã hóa dữ liệu cũng có thể được thực hiện bởi một tin tặc.


Tôi nhận ra đây là khá nhiều những gì Josh đã nói, nhưng tôi đã bị cúp internet và không thể đăng bài này cách đây 30m khi tôi lần đầu tiên gõ nó!
Kylotan

1

Khi chúng tôi mới bắt đầu phát triển trò chơi hiện tại, chúng tôi cũng muốn có chế độ chơi ngoại tuyến. Ý tưởng là để cho người chơi chơi qua các cấp trò chơi khi ngoại tuyến và sau đó bằng cách nào đó đồng bộ hóa tiến trình của họ khi họ trực tuyến. Vì vậy, chúng tôi đã suy nghĩ rất lâu về cách chúng ta có thể ngăn chặn gian lận. Kết luận là: chúng ta không thể. Thực sự KHÔNG có cách nào để cho phép người chơi chơi ngoại tuyến và chắc chắn 100% họ không gian lận.


1

Một giải pháp đơn giản được sử dụng với tải tập tin là băm. Băm tập tin lưu và lưu trữ "dấu vân tay" này ở đâu đó. Khi bạn tải nó, hãy băm tập tin và kiểm tra nó dựa vào dấu vân tay. Nếu chúng không khớp, tập tin đã được sửa đổi.

Tất nhiên, nếu ai đó dịch ngược mã của bạn, bạn không thể làm gì được. Đối với câu trả lời này, điều này có nghĩa là họ cũng có thể lưu trữ hàm băm của tệp lưu được sửa đổi.

Một tùy chọn khác là gửi dấu vân tay đến máy chủ ở đâu đó, nơi người dùng cuối không thể sửa đổi thủ công nếu họ đã sửa đổi tệp lưu. Điều này tương tự như những gì iTunes làm khi khôi phục hình ảnh iPhone.

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.