Apa pun yang Anda lakukan, Anda perlu menyimpan kunci enkripsi di suatu tempat, yang kemudian dapat dipulihkan. Jika Anda memerlukan server lisensi, ini dapat diselesaikan dengan mengaitkan atau menambal aplikasi. Anda dapat melakukan hal seperti ini untuk memperlambat musuh, tetapi itu tidak akan menjadi perlindungan penuh. Jika Anda benar-benar tidak ingin memberikan perangkat lunak Anda, gunakan arsitektur klien-server dengan sebagian besar logika di sisi server dan minta otentikasi dari pengguna berbayar/resmi (walaupun kemudian Anda tidak dapat mencegah perangkat lunak klien dari disalin atau dimodifikasi, tetapi biasanya itu adalah risiko yang dapat diterima).
Misalkan saya ingin memberikan komputer kepada seseorang yang menjalankan aplikasi. Saya ingin menghindari agar program tidak dapat disalin ke komputer lain atau dirusak.
Ada alat yang tersedia secara komersial yang akan melakukan ini untuk Anda. Seperti yang Anda duga, tidak ada solusi antipeluru yang tidak dapat dipatahkan oleh musuh yang berdedikasi. Namun, dalam praktiknya, ada penyamar yang tersedia secara komersial yang mungkin "cukup baik" untuk tujuan Anda.
Alat yang tersedia secara komersial juga dapat mengikat perangkat lunak ke perangkat keras tertentu dengan mengambil "sidik jari" dari perangkat keras tersebut. Sekali lagi, ini mungkin bisa dipalsukan dengan kerja yang cukup, tetapi bisa "cukup baik" untuk tujuan Anda.
Salah satu contoh alat yang tersedia secara komersial adalah ".NET Reactor," (https://www.eziriz.com/dotnet_reactor.htm) yang digunakan dengan perangkat lunak Windows .NET. Ini dapat menyamarkan perangkat lunak untuk menggagalkan rekayasa balik dan dapat mengikat perangkat lunak ke perangkat keras tertentu menggunakan metode sidik jari perangkat keras.
Salah satu strategi yang saya lihat bukanlah bukti bodoh, tetapi jika Anda membaca ID perangkat keras yang unik dan menggunakannya sebagai kunci untuk mendekripsi perangkat lunak, jika dipindahkan ke komputer lain, itu tidak akan didekripsi.
Satu-satunya masalah dengan ini adalah sebagian besar dari nilai tersebut dapat ditimpa dan jika penyerang mengetahui dari perangkat keras mana nilai ini berasal, dan mereproduksinya untuk secara efektif 'membuka'/mendekripsi perangkat lunak.
Selain itu, Anda mengalami masalah jika salah satu dari perangkat keras tersebut gagal dan diganti, Anda sekarang harus memotong perangkat lunak baru--dienkripsi dengan kombinasi baru ID perangkat keras untuk perangkat keras yang diganti/baru.