Semakin banyak gim yang menempuh rute yang didorong data yang berarti perlu ada lapisan keamanan di sekitar manipulasi yang mudah. Saya telah melihatnya di mana game benar-benar mengumpulkan aset mereka (audio, seni, data) dan saya bertanya-tanya bagaimana mereka mengelola itu? Apakah ada aplikasi / perpustakaan yang akan membundel dan membantu Anda mengelola aset di dalamnya? Jika tidak, adakah sumber daya bagus yang akan Anda tuju untuk pengemasan / pembongkaran / enkripsi?
Pertanyaan spesifik ini berkisar pada C ++, tetapi saya akan terbuka untuk mendengar bagaimana ini dikelola dalam C # / XNA juga.
Untuk lebih jelasnya - saya tidak merencanakan solusi untuk mencegah peretasan. Pada level fundamental kita semua memanipulasi 0 dan 1. Namun, kami ingin menjaga 99% orang yang memainkan game dari hanya memodifikasi file XML yang digunakan untuk membangun dunia game. Saya telah melihat banyak game menggabungkan semua sumber dayanya bersama. Saya hanya ingin tahu tentang metode yang mereka gunakan.
sumber
Jawaban:
Strategi yang baik adalah membuat format arsip Anda sendiri dari awal, dan menjadikannya format indeks dengan tabel yang menunjuk ke potongan data alih-alih menyimpan seluruh file berurutan dalam arsip Anda, kemudian mengenkripsi tabel indeks Anda dan mengkompres setiap potongan secara terpisah menggunakan LZMA / Bzip2.
Pendekatan lain adalah menggunakan bit generator data prosedural di sana-sini (Jika Anda ingin pergi sejauh itu Anda bahkan bisa mendapatkan 'parameter' untuk generator tersebut dari server on-line sebagai ukuran tambahan), Dan dengan membongkar beberapa pekerjaan ke GPU Anda juga dapat mencegah dump memori penuh dan menebus beberapa kinerja yang hilang.
Namun saya menemukan teknik seperti itu untuk secara umum menghambat kinerja dan membuang waktu pengembangan, sementara itu tidak menawarkan apa pun kepada pengguna akhir tetapi masalah potensial dan bug yang tidak dibutuhkan.
Namun demikian, tidak ada yang 100% aman.
sumber
Jangan kirimkan data sensitif.
Tidak ada cara untuk mengirimkan data terenkripsi sehingga hanya game yang dapat mengaksesnya. Anda dapat berusaha sangat keras tetapi Anda dengan cepat masuk ke masalah DRM.
Jika Anda ingin menjaga aset gim Anda jauh dari mencongkel mata.
xor
berkasmy_level.zip.xor
, gunakanmy_level.map
).Itu akan menghentikan 95% pengguna nakal. 5% lainnya akan mendapatkannya tidak peduli apa yang Anda lakukan.
Anda tidak perlu benar-benar membuka zip dan
xor
. Anda bisa menggunakan lzma dan menggunakan AES dengan kunci yang dikenal. Intinya adalah untuk tidak menghabiskan banyak waktu untuk itu.sumber
That will stop 95% of mischeivieous users.
keluar dari menerobos masuk, sementara saya percaya masih ada orang yang benar-benar akan mendapatkannya saya akan menghargai jika tidak semua dan masing-masing mampu. Saat ini sebagian besar anak-anak berusia 10 tahu cara membuka file di notepad dan mengganti nama ...Menghabiskan banyak waktu untuk hal ini mungkin bodoh. Ada alat untuk mengambil tekstur dan memodelkan data langsung dari GPU, dan suara dapat dengan mudah diarahkan ke perangkat loopback virtual. Apa pun yang perlu benar-benar aman harus hidup di server dan hanya berfungsi melalui tantangan / respons. Melakukan validasi data klien adalah cerita lain, sesuatu yang lebih seperti Valve's -verify_all. Itu masih sulit, karena Anda tidak bisa mempercayai executable lokal untuk menegakkannya (atau setidaknya Anda tidak bisa mempercayainya lebih dari Anda mempercayai sistem anti-cheat titik akhir Anda, yang juga merupakan ide konyol).
sumber
Pekerjaan saya adalah perangkat lunak antitamper. Saya kenal seseorang yang seorang cracker game jadul. Dia memecahkan game seperti bernafas. Anda tidak dapat menghentikan orang seperti dia. Jika game Anda cukup populer, beberapa versi cracked game Anda akan mengenai situs torrent hanya beberapa hari setelah rilis, apa pun yang Anda lakukan. Saran saya adalah lakukan saja seminimal mungkin untuk mencegah rata-rata joe yang berpikir dia mungkin ingin memberikan teknik menusuk terbalik ini.
sumber
Pertanyaan yang bagus tapi ini masih jauh dari pertanyaan mudah untuk dijawab.
Dari pengalaman saya dengan keamanan data, Anda harus memikirkan hal-hal berikut:
1) Apa yang Anda amankan, dari siapa dan apa dampaknya jika data tersebut tidak aman - keamanan jauh lebih banyak tentang penilaian risiko daripada solusi teknis sistematis
2) Saya menganggap platform Anda adalah desktop (misalnya Windows / OSX) dalam hal ini Anda memiliki ruang masalah yang berbeda dari perangkat keras berpemilik seperti PS3 / Xenon yang memiliki upaya sendiri pada tingkat keamanan kernel (apakah ini merupakan solusi yang valid terbuka untuk diperdebatkan)
3) Enkripsi! = keamanan. Enkripsi hanya menjamin bahwa data Anda tidak dapat dibaca , itu tidak menjamin bahwa data Anda tidak dapat ditulis atau diputar ulang / diproksikan.
Jika persyaratan Anda adalah untuk membuat bukti kerusakan data Anda, maka Anda perlu memikirkan hashing data Anda (lebih disukai dengan SHA-256 atau SHA-512) sistem.
Perlu juga diketahui bahwa menambahkan teknologi enkripsi ke produk Anda mungkin memiliki implikasi hukum karena pembatasan ekspor (teknologi enkripsi digolongkan sebagai teknologi kelas senjata terbatas, percaya atau tidak) jadi disarankan untuk menggunakan perpustakaan yang telah mengatasi masalah hukum ini.
Terakhir - tidak pernah menggulung teknologi enkripsi Anda sendiri - gunakan algoritma yang terkenal, terdokumentasi, diteliti seperti AES, Blowfish, RSA, dll.
ps Kunci Publik / Privat tidak cocok atau praktis untuk mengenkripsi data dalam jumlah besar maka DRM / PGP dll. menggunakan sistem RSA + simetris hybrid yaitu mengamankan kunci simetris dengan RSA kemudian melakukan enkripsi simetris standar menggunakan kunci itu
Ini adalah subjek kompleks yang sangat besar dan saya pasti tidak melakukannya dengan adil
Semoga itu bisa membantu
sumber
Jika Anda menginginkan contoh format yang dirancang dan dibuat (mungkin overengineered) karena ukurannya kecil (dapat dikompres), sangat aman dan fleksibel, Anda harus melihat ke format MPQ Blizzard.
http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format
Tata letak arsip umum adalah sebagai berikut:
Arsip File File Data File - File Khusus Tabel Hash Tabel Blok Extended Tabel Blok Kuat Tanda tangan digital
Format ini memiliki SEMUA. Blocktable, extended blocktable, data dipecah menjadi beberapa sektor (untuk streaming mudah), dukungan untuk 7 (!) Algoritma kompresi (jika Anda menghitung kompresi suara) yang dapat dikombinasikan secara sewenang-wenang, tanda tangan digital yang lemah, tanda tangan digital yang kuat dan sebagainya.
Jika Anda membeli API dari Blizzard yang berkaitan dengan arsitektur file, Anda akan mendapatkan semua yang Anda butuhkan dan banyak lagi.
sumber
Karena ini baru-baru ini dibangkitkan, pertanyaan Anda (dan oleh karena itu semua jawaban sejauh ini) tampaknya hanya berurusan dengan memuat file, yang hanya seaman dieksekusi yang ingin memuatnya. Pada PC tidak ada yang benar-benar aman (Anda hanya menunda orang), Anda dapat memeriksa hal-hal di server, tetapi bahkan pemeriksaan itu dapat dihapus sehingga exe modded dapat dijalankan tidak peduli apa. Konsol masih "cukup" aman sehingga dalam kebanyakan kasus di sana saya menghasilkan hash file penting, kemudian menandatangani hash dengan kunci pribadi, embed kunci publik dalam kode dan memverifikasi hash aman terhadap file.
Saya pikir saya akan melemparkan serangan lain ke dalam percakapan, sesuatu yang hanya saya temui tahun lalu karena saya tidak cenderung mengirim banyak pada PC. Cheat Engine adalah program kecil yang sangat rapi yang hampir secara otomatis membuat peretasan Anda sendiri (yang berarti siapa pun dapat menggunakannya). Cukup canggih dalam apa yang bisa dilakukannya, banyak hacks / cheat yang saya lihat orang jual dibuat oleh ini atau sesuatu yang sangat menyukainya dari apa yang saya lihat (semua yang pasar massal). Dengan beberapa pekerjaan Anda dapat melindungi terhadap hal-hal seperti ini lagi, saya kira itu semua tergantung pada seberapa populer permainan itu dan jika seseorang cukup peduli untuk mengganggu.
Opps, lupa menyebutkan lib yang baik untuk enkripsi (dalam C ++) adalah LibTomCrypt .
sumber