Memastikan bahwa data yang disimpan belum diedit dalam game dengan komponen offline dan online


8

Saya berada dalam tahap pra-perencanaan untuk membuat desain game dan saya bertanya-tanya apakah ada cara yang masuk akal untuk menghentikan orang dari mengedit save dalam game dengan komponen offline dan online.

Komponen offline akan memungkinkan pemain untuk bermain melalui permainan dan komponen online akan memungkinkan mereka untuk bermain melawan pemain lain, jadi saya perlu memastikan bahwa orang tidak mengedit kode sumber / menyimpan file saat offline untuk mendapatkan keuntungan saat online.

Game sepertinya akan dikembangkan di .Net atau Java, yang sayangnya mudah diurai.

Jawaban:


10

Mampu mendekompilasi / merekayasa ulang kode klien dengan mudah sebenarnya hanya sedikit kendala. Peretas yang giat telah membengkokkan file yang dapat dieksekusi sesuai kehendak mereka (jahat dan non-) selama bertahun-tahun sebelum bahasa tingkat tinggi, sepele hingga dekompilasi seperti C # muncul. Keamanan melalui ketidakjelasan saja tidak ada keamanan sama sekali.

Setiap data pada mesin pengguna (kode atau data aset reguler) pada dasarnya sudah dikompromikan. Anda tidak dapat benar-benar melindungi diri terhadap hal itu - jika Anda tidak ingin orang mengedit data, jangan letakkan di mesin mereka, simpan di server Anda. Demikian pula jika Anda tidak ingin mereka memodifikasi kode di klien, pastikan klien tidak memiliki kendali atas apa pun yang bermanfaat.

Jika itu bukan opsi (misalnya multipemain Anda sepenuhnya peer-to-peer), Anda dapat melakukan hal-hal seperti menghitung hash dari aset yang relevan dan hanya memungkinkan orang untuk bermain dengan satu sama lain jika hash cocok. Ya, seseorang dapat dengan hati-hati menyunting hasil edit ke executable sehingga mengembalikan hash yang berbeda, tetapi semua yang seharusnya berarti bahwa pemain yang melanggar akan melakukan sinkronisasi dan terputus dari permainan secara relatif cepat karena asetnya tidak cocok dengan sisa dari yang lain. para pemain'.

Anda juga bisa menggunakan jenis tes "aturan mayoritas" yang memungkinkan Anda untuk memutuskan pemain yang simulasinya tidak sinkron dengan pemain lain, memberikan pemain "tuan rumah" (siapa pun yang memulai permainan) dengan suara imbang.


3

Jika semua data yang dihasilkan sisi klien, tidak ada yang dapat Anda lakukan tentang ini. Anda tidak dapat membedakan antara pengeditan yang dilakukan oleh perangkat lunak Anda dan pengeditan yang dilakukan oleh seseorang atau sesuatu yang berpura-pura menjadi perangkat lunak Anda.

Satu penghalang yang dapat Anda coba adalah mengenkripsi file simpan, menggunakan kunci dalam perangkat lunak. Sayangnya, jika pengguna cukup baik untuk mengedit file simpan, mereka juga cukup baik untuk menemukan kunci dalam perangkat lunak Anda.

Anda dapat menghentikan orang mengedit simpanan dengan tidak menyimpannya di mesin klien, misalnya. dengan mengunggahnya ke server - tetapi itu tidak menghentikan mereka mengunggah save yang diretas terlebih dahulu! Game online menyelesaikan masalah ini dengan menjaga status game otoritatif di server mereka setiap saat, tetapi itu tidak akan berfungsi untuk mode offline Anda.

Jadi sungguh, jawabannya tidak - apa pun yang bisa dilakukan permainan Anda untuk mengedit, mengaburkan, atau mengenkripsi data juga dapat dilakukan oleh peretas.


Saya menyadari ini adalah apa yang sudah dikatakan Josh, tetapi saya mengalami gangguan internet dan tidak dapat memposting 30m yang lalu ketika saya pertama kali mengetiknya!
Kylotan

1

Ketika kami baru memulai pengembangan game kami saat ini, kami juga ingin memiliki mode bermain offline. Idenya adalah membiarkan pemain bermain melalui level permainan saat offline, dan kemudian entah bagaimana menyinkronkan kemajuan mereka ketika mereka online. Jadi, kami berpikir panjang dan keras tentang bagaimana kami bisa mencegah kecurangan. Kesimpulannya adalah: kita tidak bisa. Benar-benar TIDAK ada cara untuk membiarkan pemain bermain offline dan 100% yakin mereka tidak curang.


1

Salah satu solusi sederhana yang digunakan dengan mengunduh file adalah hashing. Hash file save dan simpan "sidik jari" ini di suatu tempat. Saat Anda memuatnya, hash file tersebut, dan periksa dengan sidik jari. Jika tidak cocok, file telah dimodifikasi.

Tentu saja, jika seseorang mendekompilasi kode Anda, tidak ada yang dapat Anda lakukan. Untuk jawaban ini, ini berarti mereka dapat menyimpan hash dari file simpan yang dimodifikasi juga.

Pilihan lain adalah mengirim sidik jari ke server di suatu tempat, di mana pengguna akhir tidak dapat memodifikasinya secara manual jika mereka telah memodifikasi file simpan. Ini mirip dengan apa yang dilakukan iTunes saat memulihkan gambar iPhone.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.