Saya baru-baru ini membaca sebuah artikel tentang cara pintar programmer melindungi game mereka dari bajak laut, seperti pencipta Game Dev Tycoon . Ini membuat saya penasaran: bagaimana mereka mendeteksi bahwa salinan permainan yang berjalan sebenarnya adalah versi bajakan pada tingkat teknis? Jawaban terdekat yang dapat saya temukan melalui beberapa penelitian adalah bagaimana SNES cartridges dapat mendeteksi jika mereka bajakan , tetapi taktik itu jelas tidak berlaku untuk PC.
27
Jawaban:
Hal pertama yang pertama: tidak ada cara bagi komputer untuk mengetahui apakah suatu file bajakan atau tidak. Pembajakan adalah istilah hukum / moral, dan karena itu, tidak memiliki arti pada file, yang hanya terdiri dari satu dan nol.
Yang mengatakan, pencegahan pembajakan dan penanggulangan biasanya fokus pada mencari tahu apakah pengguna memiliki sesuatu (biasanya objek) yang hanya dapat diperoleh jika salinan permainan dibeli, dan membuatnya sulit untuk diduplikasi. Ada banyak cara untuk melakukan ini, masing-masing dengan kelebihan dan kekurangan. Saya akan menyebutkan beberapa:
Game awal meminta pengguna untuk memasukkan kata dari manual game, yang seharusnya hanya Anda dapatkan jika Anda membeli kotak game. Mesin fotokopi atau pemindai dengan mudah mengalahkan teknik ini.
Baru-baru ini, pemeriksaan media lebih umum. Idenya adalah bahwa Anda memerlukan CD game untuk berada di drive untuk menjalankan game. Untuk mengimplementasikan ini, misalnya Anda dapat mengakses file data penting dari CD yang tanpanya game tidak dapat berjalan, atau cukup periksa keberadaan file dalam CD. Ini bekerja cukup baik ketika CD sulit untuk ditiru, tetapi mesin fotokopi CD, dan baru-baru ini penggerak emulator dapat digunakan untuk dengan mudah mengalahkan teknik ini.
Namun, salinan CD tidak sempurna, banyak teknik lain yang berfokus pada mendeteksi apakah CD tersebut adalah CD yang asli, atau salinan. Untuk mengimplementasikan ini, sebuah game dapat memeriksa elemen-elemen non-standar yang dimasukkan pada disc game selama waktu tekan, tetapi tidak dapat dengan mudah dan andal direplikasi oleh pembakar CD, pada CD-R. Beberapa cara umum untuk melakukan ini adalah:
Membuat file "ghost" dummy dalam CD selama mastering, yang tidak dapat diakses dari filesystem CD, tetapi memang ada, dan dapat dibaca jika Anda tahu di mana menemukannya. Data ini tidak ada di salinan disk file-demi-file. Menyalin seluruh gambar disk akan menyalin file-file ini.
Cara lain adalah dengan sengaja memasukkan kesalahan ke dalam disk. CD berisi kode koreksi kesalahan. Dengan memasukkan kesalahan dalam data, yang dapat secara transparan dikoreksi oleh pembaca disk, disk akan bekerja secara normal, tetapi kesalahan tidak akan disalin ke CD-R. Dengan mencari kesalahan yang disengaja ini, sebuah game dapat menganggap CD sebagai salinan asli yang ditekan. Salinan gambar disk RAW mengalahkan ini sekalipun.
Memasukkan sektor kembar, dengan alamat yang sama tetapi data yang berbeda akan menghasilkan hasil yang berbeda ketika mencari data maju dan mundur. Memeriksa keberadaan ini dimungkinkan, dan menduplikasi CD dengan sektor kembar ini sangat sulit.
Mengukur posisi lubang yang sebenarnya dalam CD. Sekali lagi, menduplikasi CD dengan lubang-lubang di posisi yang sama sangat sulit.
Namun, banyak emulator CD, seperti Daemon Tools , atau Alcohol 120% sebenarnya dapat meniru fitur ini. Karena itu, banyak penerbit memilih untuk memasukkan langkah pendeteksian emulator CD, dan mencegah permainan berjalan jika emulator terdeteksi. Implementasi detektor emulator berada di luar cakupan jawaban ini.
Alih-alih, atau sebagai tambahan untuk memeriksa CD fisik, game dapat meminta pengguna untuk memasukkan beberapa data, seperti kunci produk . Beberapa cara untuk menggunakan kunci produk adalah:
Memeriksa fitur matematika di tombol. Namun, ini tidak mencegah duplikasi kunci, dan jika algoritma pengecekan ditemukan atau direkayasa ulang, seorang bajak laut mungkin dapat membuat kunci baru sesuka hati yang tampaknya sah untuk permainan. Perangkat lunak yang membuat kunci sesuka disebut " keygens ".
Menghasilkan hash berdasarkan perangkat keras pengguna, kirim hash ini dan kunci produk (biasanya kombinasi, disebut "kunci instalasi") ke server yang dimiliki oleh perusahaan game, dan berdasarkan hash dan serial, buat kunci aktivasi . Menggunakan metode numerik satu arah (seperti aritmatika modular, atau beberapa metode dengan kurva eliptik), permainan dapat melihat apakah kunci aktivasi cocok dengan hash dan kode seri, dan hanya berjalan jika cocok. Teknik ini disebut "aktivasi".
Dengan aktivasi, server dapat menolak untuk memberikan kunci aktivasi untuk beberapa hash perangkat keras dengan kode seri yang sama. Karena itu, bahkan jika kode serial, dan kunci aktivasi disalin, kunci aktivasi tidak akan cocok dan permainan tidak akan berjalan di komputer lain.
Semua tindakan ini dimaksudkan untuk mengetahui apakah pengguna memiliki salinan game yang dibeli atau tidak. Namun, menerapkannya memerlukan kode program yang memeriksa ini. Adalah mungkin bagi seorang bajak laut untuk memodifikasi kode gim untuk menonaktifkan atau memintas pemeriksaan alih-alih menyerang mekanisme perlindungan salinan itu sendiri. Tindakan memodifikasi binari game untuk menghapus pemeriksaan anti-pembajakan disebut "cracking".
Cracking dapat terdiri dari pembongkaran game yang dapat dieksekusi, menemukan tempat di mana pemeriksaan yang relevan dilakukan, memodifikasinya untuk menonaktifkan pemeriksaan, atau mengabaikan hasilnya, dan menyusun kembali. Beberapa cara untuk mengatasi retak adalah:
Memeriksa biner dengan beberapa hash. Namun, harus ada program yang memeriksa hash, yang pada gilirannya dapat di-crack juga.
Enkripsi program, atau hanya pemeriksaan rutin, dan mendekripsi dalam runtime. Ini membuat pembongkaran menjadi lebih sulit, karena melibatkan satu atau lebih langkah dekripsi tambahan. JIKA kunci dekripsi dimasukkan dalam program (sebagaimana mestinya, karena tanpa itu, permainan tidak dapat didekripsi), maka bajak laut dapat merekayasa balik dekripsi, menemukan rutinitas, dan memecahkan perlindungan salinan.
Karena itu, sebagai penerbit game, Anda ingin membuat kunci sesulit mungkin untuk menemukan, dan secara opsional membuat algoritma dekripsi sulit dimengerti. Beberapa cara untuk membuat kunci sulit ditemukan adalah:
Mengaburkannya dengan membuatnya dengan cara yang aneh. Ini hanya memperlambat proses retak.
Buat kunci master per-mesin yang mirip dengan perlindungan serial yang disebutkan di atas.
Namun, terlepas dari metode yang Anda gunakan untuk membuat kunci Anda, kunci itu sendiri akan ada di memori saat dekripsi sedang berlangsung. Inspektur memori, debugger, dan emulator dapat membantu bajak laut menemukan dan menyalin kunci saat berada dalam memori. Memori mengintip dapat diserang dengan beberapa cara:
Memiliki layanan istimewa yang mendeteksi akses memori di wilayah yang ditentukan, dan mengarahkan pengalamatan di tempat lain. Karena ini memerlukan akses dering 0, dan program yang melakukan ini lebih umum digunakan untuk tujuan yang tidak sah , perangkat lunak antivirus biasanya memblokirnya. (Inilah sebabnya mengapa banyak game dan perangkat lunak lain meminta untuk mematikan perlindungan virus saat menjalankan). Menulis perangkat lunak yang melakukan ini dengan benar sangat sulit, dan dapat dengan mudah membahayakan stabilitas dan keamanan OS host. The skandal XCP adalah contoh yang baik dari sebuah implementasi dari metode ini pergi salah.
Perangkat keras dan sistem operasi modern menyediakan beberapa alat, seperti tirai memori , jalur media yang aman dan modul TP , untuk membuatnya lebih mudah untuk membuat program yang mendekripsi data, sekaligus tahan terhadap inspeksi memori.
Ada banyak lagi teknik untuk menyerang pembajakan, mulai dari yang sepele hingga esoteris. Sayangnya, semua teknik ini mungkin gagal untuk mengenali salinan asli, dan biasanya teknik yang lebih agresif yang memiliki rasio positif palsu yang lebih tinggi.
Sebagai penerbit game, Anda biasanya ingin memilih serangkaian teknik yang biaya implementasinya, waktu cracking yang diharapkan, dan rasio positif palsu sesuai dengan harapan Anda.
Ini adalah kesalahpahaman umum bahwa perlindungan pembajakan dimaksudkan untuk sepenuhnya tidak bisa dipecahkan. Sebagian besar penjualan game terjadi dalam beberapa bulan pertama setelah rilis, sehingga skema perlindungan pembajakan biasanya dianggap efektif jika melanggar itu menghabiskan waktu yang cukup bagi penerbit game untuk mengumpulkan sejumlah besar keuntungan sebelum rusak.
Mengenai Game Dev Tycoon, mereka tidak menggunakan teknologi anti-pembajakan. Mereka hanya membuat bangunan "rusak", dan mendistribusikannya di BitTorrent, seperti yang dinyatakan di awal artikel yang Anda sebutkan.
sumber
Ini sangat mudah, Anda hanya perlu menjalankan MD5 atau SHA256 pada executable Anda sendiri, kemudian, ketika Anda mendeteksi tanda tangan telah berubah dari apa yang Anda hardcoded ke dalam biner setelah Anda membuat rilis final, maka seseorang yang jelas meretas executable Anda. Maka sebagian besar perusahaan, jangan hanya menampilkan munculan lagi (itu terjadi sebelumnya) yang mengatakan "rusak PE" atau "virus terdeteksi" dan kemudian keluar dari permainan, karena ini akan menjadi retasan sangat cepat menjadi peretas. Karena permainan dijeda pada loop pesan dari dialog sehingga segera untuk melihat karena cabang apa dialog itu muncul, dan hanya memotong cabang dengan mengubah kode pada kondisi cek.
Saat ini, perusahaan menggunakan perubahan gameplay yang sangat halus, seperti melipatgandakan kehidupan monster untuk membuat game tidak dapat dimainkan, atau sangat cerdas diintegrasikan dalam game manajemen ini, di mana Anda menjalankan sebuah perusahaan game dan Anda akhirnya kalah karena terlalu banyak pemain membajak game Anda. Nice mise en abyme dalam hal ini. Kadang-kadang itu hanya membuat Anda bendera merah diunggah di server perusahaan, dan ketika Anda ingin memanggil mereka untuk dukungan Anda mendapat pidato, atau terjebak untuk mengungkapkan identitas Anda.
tapi ini semua topik, tekniknya hashing. dan pemeriksaan ini dapat dijalankan di banyak tempat dalam biner sehingga jika peretas menemukan satu dan menghapusnya, itu tidak cukup.
EDIT: Jika Anda hanya menyalin game apa adanya, itu dapat bekerja jika game tidak memiliki tindakan anti-pembajakan sama sekali. Itu bekerja dengan game yang sangat lama, era pembakar CD pra. Itulah sebabnya, sebagian besar waktu, permainan harus diinstal untuk menjalankan, bukan hanya folder instalasi yang disalin. Ini melibatkan file-file tersembunyi yang diletakkan sedikit di mana-mana dalam sistem, dan kunci registri. Gim memeriksa keberadaan hal-hal ini, yang hanya dapat dibuat oleh penginstal. Dan installer, hanya dapat dijalankan dari CD, yang tidak dapat disalin karena bit yang tidak menentu yang tidak menghormati sistem kode koreksi kesalahan pada byte pertama dari disk, yang membunuh sebagian besar driver pemutar CD. Beberapa perangkat lunak salinan, seperti alkohol, mengusulkan Anda untuk mengabaikan kesalahan tetapi apa yang mereka bakar kemudian merupakan salinan yang diperbaiki, penginstal mendeteksi hal itu dan kemudian Anda melanjutkan lagi.
EDIT2:
@ Byte56: Sialan kita mendapatkan komentar yang cerdas di sini :) Ya itu sebuah paradoks dan tidak bisa diselesaikan. Jadi hash harus dibuat pada bagian biner yang tidak mengandung hash. Dan kode cek harus tahu itu, untuk mengecualikan zona itu ketika hashing untuk memeriksa sendiri. Saya telah melihat orang menggunakan tag, seperti ~~ #### [masukkan hash di sini] #### ~~ untuk melampirkan hash mereka dan melakukan pengecualian. Tetapi memiliki kelemahan karena mudah dikenali oleh para peretas, sehingga hash harus diacak, dan tersebar di berbagai lokasi. Bahkan dienkripsi mengapa tidak, dan operasi penyamaran yang sama berlaku untuk menyimpan kunci pribadi.
sumber
mereka tidak bisa hanya meletakkan partisi ext pada permainan mac
mac tidak bisa membaca ext
sumber