Memikirkan hal ini, ada beberapa jenis kebingungan. Mari kita mulai dengan kebingungan kode sumber, yang merupakan buang-buang waktu; cukup sulit untuk dipahami tanpa itu! Jadi mari kita fokus pada kebingungan dari paket pengiriman, tentang bagaimana kode dikirimkan kepada pengguna.
Kebingungan kecil
Kebingungan kecil ada untuk mencegah pengguna biasa dari menjulurkan jari mereka dan memecahkan barang dengan mudah. Itu tidak menghalangi hacker yang ditentukan, tetapi memiliki nilai dalam membantu memastikan bahwa hal-hal yang Anda dukung untuk mendukung adalah apa yang sebenarnya Anda sampaikan. Tingkat perlindungan yang diperlukan untuk hal semacam ini benar-benar sangat rendah; paket pengiriman hanya harus tidak terlihat dapat dibaca dan diedit (tanpa alat khusus) dan itu cukup bagus.
Minifikasi Javascript adalah contohnya, meskipun tidak dipasarkan seperti itu. Tidak ada orang waras yang ingin membaca dan mengedit file JS yang diperkecil, bahkan jika secara teknis dimungkinkan untuk melakukannya jika Anda sudah bertekad / cukup gigih.
Demikian pula dengan pengiriman aplikasi Java. Hanya mengemas kode menjadi JAR yang dapat dieksekusi akan menghentikan sebagian besar kebodohan, meskipun itu memiliki semua kekuatan tanda "Tolong Jauhi Rumput" yang sopan di taman kota.
Bahkan ketika memberikan kode C ++, menghilangkan simbol yang tidak perlu dari executable akan cukup untuk memenuhi syarat sebagai kebingungan kecil. Kuncinya adalah canggung untuk membaca hasilnya sebagai pengguna, tetapi tidak masalah untuk mengeksekusinya sebagai komputer.
Kebingungan besar
Kebingungan utama adalah menjaga pengguna yang bertekad dan berpengetahuan luas . Ini juga merupakan kekalahan total; jika sebuah komputer dapat menjalankannya, seseorang dapat mengambilnya secara terpisah dan mencari tahu apa yang dilakukannya. Cara terdekat yang bisa Anda dapatkan adalah membuat program mendekripsi sendiri secara terus-menerus, mengubah apa yang dilakukannya pada satu waktu menjadi hal yang sama sekali berbeda dengan yang dilakukannya di waktu lain. Menciptakan hal seperti itu akan agak sulit dan masih tidak akan membuat hacker yang sangat baik keluar (meskipun mereka akan benar-benar sangat marah dengan Anda pada akhir itu pada jumlah upaya yang diperlukan untuk mendekripsi semua kode yang memodifikasi sendiri).
Jauh lebih baik untuk berpikir dalam hal solusi lain. Misalnya, Anda dapat menyimpan "mahkota perhiasan" dari kode di server yang Anda kontrol dan hanya mengizinkan panggilan layanan untuk itu, membuat klien pada dasarnya adalah hadiah gratis yang merupakan ujung depan dari bit-bit berharga. Atau Anda bisa pergi lebih banyak kontrak / jalur hukum, dan hanya menyerahkan yang dapat dieksekusi ke organisasi yang secara resmi setuju untuk tidak mencari-cari di dalam kode Anda atau memberikan kompensasi kepada Anda jika mereka melakukannya (sehingga itu akan menjadi semacam NDA). Tujuannya adalah untuk menciptakan insentif kuat bagi peretas untuk tidak meretas, dan bagi pengguna untuk menjaga kode dari peretas yang tidak terikat oleh perjanjian.
Tetapi Anda tidak boleh berasumsi bahwa kode Anda tidak pernah dapat di-crack. Dengan virtualisasi, setiap keadaan program dari suatu eksekusi dapat diperiksa dan dilacak, dan apa pun yang mencoba untuk mengalahkan itu (misalnya, pelacakan jam ke sumber waktu eksternal) akan jauh lebih mungkin menyebabkan masalah bagi pengguna yang sah daripada peretas. (Lihat riwayat DRM untuk mengetahui bagaimana bahkan penerbit informasi yang sangat bertekad tidak dapat menjaga keamanan sistem mereka begitu kode ada di tangan lawan mereka.) Adalah jauh lebih baik untuk fokus pada benar-benar membuat pengguna yang sah bahagia. Kerugian dari retakan sesekali tidak akan dibandingkan dengan uang ekstra yang dibawa melalui pelanggan yang puas dengan benar.