Bạn dùng gì để bó / mã hóa dữ liệu?


14

Ngày càng có nhiều trò chơi đi theo lộ trình điều khiển dữ liệu, điều đó có nghĩa là cần phải có một lớp bảo mật xung quanh việc thao tác dễ dàng. Tôi đã thấy nó khi các trò chơi kết hợp hoàn toàn tài sản của họ (âm thanh, nghệ thuật, dữ liệu) và tôi tự hỏi làm thế nào họ quản lý điều đó? Có ứng dụng / thư viện nào sẽ đóng gói và hỗ trợ bạn quản lý tài sản bên trong không? Nếu không có bất kỳ tài nguyên tốt nào mà bạn sẽ chỉ đến để đóng gói / giải nén / mã hóa?

Câu hỏi cụ thể này xoay quanh C ++, nhưng tôi sẽ mở để nghe cách điều này được quản lý trong C # / XNA.

Chỉ cần rõ ràng - Tôi không đưa ra một giải pháp để ngăn chặn hack. Ở cấp độ cơ bản, tất cả chúng ta đều thao túng 0 và 1. Nhưng, chúng tôi muốn giữ 99% số người chơi trò chơi không chỉ sửa đổi các tệp XML được sử dụng để xây dựng thế giới trò chơi. Tôi đã thấy rất nhiều trò chơi kết hợp tất cả các tài nguyên của họ lại với nhau. Tôi chỉ đơn giản là tò mò về các phương pháp họ đang sử dụng.


Câu hỏi hay, trong khi tôi không tin có một cách để bảo vệ nó 100%, tôi tin rằng có cách gọn gàng và che giấu nó và tôi muốn biết thêm về nó ...
Prix

Thật đáng để đặt câu hỏi liệu tài sản nghệ thuật / âm thanh của bạn thậm chí có nên được coi là "nhạy cảm" hay không. Nhiều trò chơi cố tình tiết lộ tài sản của họ cho người chơi, để hỗ trợ cộng đồng mod lành mạnh, điều này có thể tăng thêm giá trị cho trò chơi (thậm chí hầu như không mất phí cho nhà phát triển).
Ian Schreiber

Tôi chủ yếu quan tâm đến dữ liệu nhạy cảm điều khiển một trò chơi dựa trên dữ liệu (ví dụ: tệp xml). Tôi vừa thấy các trò chơi kết hợp mọi thứ lại với nhau thành một hoặc hai tệp.
David McGraw

4
Có gì sai khi người chơi đùa giỡn với dữ liệu đó?
jsimmons

để đánh trống của riêng tôi .. CFL: iki.fi/sol/cfl
Jari Komppa

Câu trả lời:


8

Một chiến lược tốt là tạo định dạng lưu trữ của riêng bạn từ đầu và biến nó thành một bảng được lập chỉ mục với một bảng chỉ vào các khối dữ liệu thay vì lưu trữ toàn bộ các tệp tuần tự trong kho lưu trữ của bạn, sau đó mã hóa bảng chỉ mục của bạn và nén từng đoạn riêng biệt bằng LZMA / Bzip2.

Một cách tiếp cận khác là sử dụng các bit của trình tạo dữ liệu thủ tục ở đây và ở đó (Nếu bạn muốn đi xa đến mức bạn thậm chí có thể lấy 'tham số' cho các trình tạo đã nói từ máy chủ trực tuyến như một biện pháp bổ sung), và bằng cách giảm tải một số công việc với GPU, bạn cũng có thể ngăn chặn các bộ nhớ đầy và bù cho một số hiệu năng bị mất.

Tuy nhiên, tôi thấy các kỹ thuật như vậy thường cản trở hiệu suất và lãng phí thời gian phát triển, trong khi vẫn không cung cấp gì cho người dùng cuối nhưng các vấn đề tiềm ẩn và các lỗi không cần thiết.

Tuy nhiên, không có gì là an toàn 100%.


+1 cho điều này. Nén đáp ứng cả nhu cầu che giấu, và sẽ cải thiện thời gian tải và dấu chân ứng dụng. Lưu trữ / đóng gói dữ liệu sẽ yêu cầu một lớp trừu tượng, vì vậy, kết hợp nó với một cái gì đó có thể tải / giải nén tại chỗ không nên quá nhiều kỹ thuật. Nếu bạn thực hiện nén, tôi chắc chắn sẽ tách logic nén / giải nén khỏi các công cụ tải / lưu trữ. Bằng cách đó, bạn có thể trao đổi trong một thuật toán tốt hơn vào một ngày sau đó, cơ sở hạ tầng cần thiết không thay đổi giữa các thuật toán.
MrCranky

@MrCranky: Nếu bạn nhìn vào cách EA thực hiện với định dạng lưu trữ .package (DBPF) của họ (được sử dụng trong các trò chơi SPORE và The Sims), bạn sẽ thực sự thấy điều này trong thực tế. Công cụ của họ có một trường bổ sung trong bảng chỉ mục cho "loại nén", một mã nội bộ để sử dụng thuật toán nào. Họ sử dụng các thuật toán nén khác nhau dựa trên loại khối (ví dụ đoạn văn bản sử dụng một nén đặc biệt) Hệ thống phiên bản mà họ sử dụng cũng cho phép tích hợp các mod và khả năng tương thích ngược. Thông tin thêm về định dạng DBPF tại đây: simswiki.info/DatabasePackedFile
voodooattack

Điều thú vị: Tôi chỉ từng thực hiện nó vào thời gian biên dịch với #define, nhưng thời gian chạy mở ra một số khả năng hay (chẳng hạn như có thể thay đổi loại nén của bạn mà không phải xây dựng lại mọi tệp cho trò chơi của bạn).
MrCranky

11

Không gửi dữ liệu nhạy cảm.

Không có cách nào để gửi dữ liệu được mã hóa để chỉ trò chơi có thể truy cập nó. Bạn có thể cố gắng rất nhiều nhưng bạn nhanh chóng gặp vấn đề về DRM.

Nếu bạn muốn giữ tài sản trò chơi của bạn tránh xa con mắt tò mò.

  1. nén nó lên
  2. xor tập tin
  3. thay đổi phần mở rộng thành một cái gì đó nhàm chán (tức là không my_level.zip.xor, sử dụng my_level.map).

Điều đó sẽ ngăn chặn 95% người dùng sai lầm. 5% còn lại sẽ nhận được nó bất kể bạn làm gì.
Bạn không cần phải thực sự zip và xor. Thay vào đó, bạn có thể sử dụng lzma và sử dụng AES với một khóa đã biết. Vấn đề là không dành nhiều thời gian cho nó.


Đó là những gì tôi thường thấy xung quanh từ hầu hết các trò chơi ... cookie cho bạn.
Giải thưởng

2
Thực sự chỉ cần zip + đổi tên có lẽ là đủ.
coderanger

1
Tôi không nghĩ vậy, tôi thích That will stop 95% of mischeivieous users.phá vỡ nó, trong khi tôi tin rằng vẫn có những người thực sự sẽ nhận được nó tôi sẽ đánh giá cao nếu không phải tất cả và mỗi người đều có thể. Ngày nay, hầu hết trẻ em 10 tuổi đều biết cách mở tệp trong notepad và đổi tên nó ...
Prix

1
Biết làm thế nào, vâng. Sẽ không bao giờ quan tâm, không.
coderanger

zip + đổi tên là không đủ. Linux hiếm khi sử dụng phần mở rộng tệp để xác định loại tệp. Thay vào đó, nó nhìn vào một vài byte đầu tiên và sử dụng nó để xác định loại của nó. Một zip được đổi tên vẫn hiển thị dưới dạng zip trong Linux. Windows XP không làm điều này, nó vẫn sử dụng các phần mở rộng. Tôi không biết Windows7 làm như thế nào, nhưng tôi hy vọng rằng trong tương lai Windows sẽ sử dụng một kỹ thuật tương tự.
deft_code

4

Dành bất kỳ số lượng lớn thời gian cho việc này có lẽ là ngu ngốc. Có các công cụ để lấy dữ liệu kết cấu và mô hình trực tiếp từ GPU và âm thanh có thể dễ dàng được chỉ vào một thiết bị loopback ảo. Bất cứ điều gì cần phải thực sự an toàn đều cần phải sống trên một máy chủ và chỉ hoạt động thông qua thử thách / phản hồi. Thực hiện xác thực dữ liệu khách hàng là một câu chuyện khác, giống như -verify_all của Valve. Điều đó vẫn còn khó khăn, vì bạn không thể tin tưởng vào cơ quan thực thi tại địa phương để thực thi nó (hoặc ít nhất bạn không thể tin tưởng nó hơn là bạn tin vào hệ thống chống gian lận điểm cuối của mình, đây cũng là một ý tưởng ngớ ngẩn).


4

Công việc của tôi là trong phần mềm chống độc. Tôi biết ai đó là một cracker trò chơi trường học cũ. Anh ta bẻ khóa các trò chơi như thở. Bạn không thể ngăn những người như anh ấy. Nếu trò chơi của bạn đủ phổ biến, nhiều phiên bản bẻ khóa của trò chơi của bạn sẽ tấn công các trang web torrent chỉ vài ngày sau khi phát hành bất kể bạn làm gì. Lời khuyên của tôi là chỉ làm tối thiểu để tránh những kẻ thù bình thường nghĩ rằng anh ta có thể muốn cho thứ kỹ thuật đảo ngược này đâm.


1
Đó là mục tiêu. Tôi hoàn toàn không có mong muốn chống lại tin tặc.
David McGraw

1

Câu hỏi hay nhưng đây là một câu hỏi xa dễ trả lời.
Từ kinh nghiệm của tôi với bảo mật dữ liệu, bạn phải suy nghĩ về những điều sau đây:

1) Bạn đang bảo mật cái gì, từ ai và tác động gì nếu dữ liệu đó không an toàn - bảo mật đánh giá rủi ro nhiều hơn các giải pháp kỹ thuật có hệ thống
2) Tôi cho rằng nền tảng của bạn là máy tính để bàn (ví dụ: Windows / OSX) trong trường hợp bạn có một không gian vấn đề khác với phần cứng độc quyền như PS3 / Xenon có nỗ lực riêng của họ về bảo mật cấp nhân (cho dù đây là một giải pháp hợp lệ được mở để tranh luận)
3) Mã hóa! = bảo mật. Mã hóa chỉ đảm bảo rằng dữ liệu của bạn không thể được đọc , nó không đảm bảo rằng dữ liệu của bạn không thể được ghi hoặc phát lại / ủy quyền.

Nếu yêu cầu của bạn là làm cho bằng chứng giả mạo dữ liệu của bạn thì bạn cần phải suy nghĩ về việc băm dữ liệu của mình (tốt nhất là với SHA-256 hoặc SHA-512) Để lặp lại mặc dù, hãy nghĩ về lý do tại sao nó quan trọng và bạn đạt được gì khi thêm bảo mật vào hệ thống.
Cũng đáng để biết rằng việc thêm công nghệ mã hóa vào sản phẩm của bạn có thể có ý nghĩa pháp lý do hạn chế xuất khẩu (công nghệ mã hóa được phân loại là công nghệ cấp vũ khí hạn chế có tin hay không) vì vậy nên sử dụng các thư viện khắc phục các vấn đề pháp lý này.
Cuối cùng - không bao giờ, bao giờ công nghệ mã hóa của riêng bạn - sử dụng các thuật toán được nghiên cứu, tài liệu, nổi tiếng như AES, Blowfish, RSA, v.v.

ps Public / Private Key không phù hợp hoặc không thực tế để mã hóa một lượng lớn dữ liệu do đó DRM / PGP, v.v ... sử dụng hệ thống đối xứng RSA +, tức là bảo mật khóa đối xứng với RSA, sau đó thực hiện mã hóa đối xứng tiêu chuẩn bằng khóa đó

Đây là một chủ đề phức tạp rất lớn và tôi chắc chắn không thực hiện nó công lý

Mong rằng sẽ giúp


1

Nếu bạn muốn một ví dụ về định dạng được thiết kế và xây dựng (có thể bị áp đảo) vì nhỏ (có thể nén), an toàn và linh hoạt một cách lố bịch, bạn nên tìm đến định dạng MPQ của Blizzard.

http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format

Bố cục lưu trữ chung như sau:

Lưu trữ Tiêu đề Tệp Dữ liệu Tệp Dữ liệu - Các tệp đặc biệt Bảng khối bảng Bảng khối mở rộng Chữ ký số mạnh

Định dạng này có MỌI THỨ. Blocktable, blocktable mở rộng, dữ liệu được chia thành các ngành (để truyền phát dễ dàng), hỗ trợ thuật toán nén 7 (!) (Nếu bạn tính nén âm thanh) có thể được kết hợp tùy ý, chữ ký số yếu, chữ ký số mạnh, v.v.

Nếu bạn định mua API từ Blizzard liên quan đến kiến ​​trúc tệp, bạn sẽ nhận được mọi thứ bạn cần và hơn thế nữa.


Cảm ơn về liên kết, tôi chưa bao giờ nghĩ sẽ tìm hiểu thêm về các chi tiết của MPQ (và thường cho rằng chúng không có sẵn)
Bill

Nếu nó an toàn như vậy, tại sao nó lại được thiết kế ngược đến mức độ như vậy và thậm chí có thư viện bên thứ 3 để tương tác với nó? ;-)
coderanger

Hầu hết (đọc: tất cả) các công cụ để tương tác với các tệp * .mpq phụ thuộc vào Stormlib, được viết và duy trì bởi một anh chàng.

Theo như tôi biết, Stormlib yêu cầu bạn phải có trò chơi gốc mà kho lưu trữ bắt nguồn từ đó, vì các khóa để giải mã được lưu trữ trong tệp thực thi. Lý do lớn nhất tại sao nó rất an toàn, mặc dù, không phải vì không thể đột nhập. Nhưng đối với dữ liệu nhanh chóng được gửi qua mạng, nó là không ai sánh kịp. Dữ liệu được mã hóa mạnh đến mức sẽ vô ích khi bên thứ ba giải mã nhanh chóng.

Và trên thực tế với 'World of Warcraft', Blizzard đã đi tiên phong trong công nghệ phát trực tuyến, cho phép bạn chơi trò chơi chỉ với một vài phần trăm toàn bộ dữ liệu được tải xuống ổ cứng của bạn. Định dạng * .mpq vượt trội ở loại công việc này. Chưa kể rằng khi trình cài đặt Starcraft 2 được Blizzard phát hành vài ngày trước khi phát hành chính thức trò chơi, tài liệu lưu trữ của nó đã được mã hóa mạnh đến mức chúng không thể mở được cho đến khi trò chơi được phát hành. : P

0

Vì điều này gần đây đã được phục hồi, câu hỏi của bạn (và do đó tất cả các câu trả lời cho đến nay) dường như chỉ giải quyết việc tải tệp, nó chỉ an toàn như thực thi muốn tải nó. Trên PC không có gì thực sự an toàn (bạn chỉ trì hoãn mọi người), bạn có thể kiểm tra nội dung trên máy chủ, nhưng ngay cả kiểm tra đó cũng có thể được gỡ bỏ để exe có thể được sửa đổi bất kể điều gì. Các bảng điều khiển vẫn bảo mật "khá", vì vậy, trong hầu hết các trường hợp, tôi tạo ra một hàm băm của các tệp quan trọng, sau đó ký mã băm bằng khóa riêng, nhúng khóa chung vào mã và xác minh hàm băm an toàn đối với tệp.

Tôi nghĩ rằng tôi đã ném một cuộc tấn công khác vào cuộc trò chuyện, điều mà tôi chỉ gặp phải vào năm ngoái vì tôi không có xu hướng giao hàng nhiều trên PC. Cheat Engine là một chương trình nhỏ rất gọn gàng, gần như tự động hóa việc tạo các bản hack của riêng bạn (có nghĩa là bất kỳ ai cũng có thể sử dụng nó). Nó khá tiên tiến trong những gì nó có thể làm, rất nhiều hack / cheat mà tôi thấy người ta bán được tạo ra bởi cái này hoặc một cái gì đó rất giống với những gì tôi đã thấy (tất cả những cái trên thị trường đại chúng). Với một số công việc bạn có thể bảo vệ chống lại những thứ như thế này một lần nữa, tôi đoán tất cả phụ thuộc vào mức độ phổ biến của trò chơi và nếu ai đó quan tâm đủ để làm phiền.

Opps, đã quên đề cập đến một lib tốt cho mã hóa (trong C ++) là LibTomCrypt .

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.