Kebingungan adalah salah satu cara, tetapi tidak dapat melindungi dari melanggar keamanan perlindungan pembajakan aplikasi. Bagaimana saya memastikan bahwa aplikasi tersebut tidak dirusak, dan bagaimana saya memastikan bahwa mekanisme pendaftaran tidak dapat direkayasa balik?
Juga dimungkinkan untuk mengonversi aplikasi C # ke kode asli, dan Xenocode terlalu mahal.
C # menyediakan banyak fitur, dan merupakan bahasa yang ideal untuk kode saya, jadi menulis seluruh basis kode lagi di C ++ tidak mungkin.
Sertifikat aman dapat dengan mudah dihapus dari majelis yang ditandatangani di .NET.
c#
.net
obfuscation
reverse-engineering
Peter Mortensen
sumber
sumber
Jawaban:
Kamu tidak bisa
Ada langkah-langkah yang dapat Anda ambil untuk membuatnya sedikit lebih sulit, tetapi pada akhirnya semua executable pada mesin lokal dapat dipecahkan. Akhirnya, kode itu harus dikonversi menjadi kode mesin asli dan setiap aplikasi yang dapat dijalankan rentan.
Yang ingin Anda lakukan hanyalah membuatnya cukup sulit untuk retak sehingga tidak sepadan dengan masalah orang.
Beberapa saran yang saya miliki agar Anda membantu melindungi aplikasi Anda:
Pada akhirnya, jika orang ingin aplikasi Anda retak, mereka akan melakukannya. Lihatlah semua perangkat lunak komersial di luar sana yang memiliki sejumlah besar sumber daya untuk melindungi aplikasi mereka, namun mereka retak sebelum aplikasi bahkan dirilis ke publik.
Seorang insinyur balik yang terampil dapat menjalankan IDA-Pro dan mengiris aplikasi Anda seperti mentega apa pun yang Anda lakukan. Aplikasi yang dikemas dapat dibongkar dan kebingungan hanya mencegahnya berjalan-jalan di taman. Semua kerja keras Anda dengan kode lisensi kompleks Anda dapat dibatalkan dengan tambalan byte tunggal.
Anda hanya perlu menerima bahwa ada kemungkinan orang akan membajak perangkat lunak Anda. Ada beberapa orang yang tidak akan pernah membayar untuk aplikasi Anda tidak peduli apa dan ini adalah orang-orang yang tidak perlu Anda khawatirkan.
Namun ada, banyak bisnis di luar sana yang tidak akan pernah mengambil risiko gugatan dan dengan senang hati membeli lisensi perangkat lunak dan banyak pengguna komputer yang tidak ingin mengambil risiko, menemukan kesalahan atau tidak cukup teknologi untuk bajak laut. Ini adalah pelanggan sejati Anda, dan Anda harus memfokuskan upaya Anda untuk memberi mereka pengalaman pengguna yang baik dan mengabaikan orang-orang yang meretas perangkat lunak Anda.
Saya sudah memiliki aplikasi saya bajakan sebelumnya, dan saya menganggapnya sebagai penghinaan pribadi. Di sinilah saya, seorang pengembang kecil-kecilan, mencurahkan hati dan jiwa saya ke dalam sebuah aplikasi dan orang-orang ini memiliki keberanian untuk membajak dariku ?! Mereka mengambil uang langsung dari sakuku!
Saya segera menambahkan banyak kode DRM yang kejam dan berusaha menyabot orang menggunakan salinan yang tidak sah atau retak. Tentu saja saya seharusnya bekerja untuk membuat aplikasi saya lebih baik daripada mencoba menghentikan yang tak terhindarkan. Bukan hanya itu, tetapi saya telah menyakiti pelanggan sejati saya akan semua perlindungan ekstra yang saya lakukan.
Setelah pertempuran panjang, saya menyadari bahwa saya berjuang melawan arus dan selama ini terbuang sia-sia. Saya mengeluarkan semua kode telepon-rumah kecuali untuk fungsi lisensi barebones dan tidak pernah melihat ke belakang.
sumber
Anda tidak dapat sepenuhnya mengamankan aplikasi apa pun (dikelola atau tidak). Jika sistem seperti Playstation dan iPad bisa retak - di mana vendor bahkan mengontrol perangkat keras - harapan apa yang dimiliki aplikasi Anda? Untungnya, Anda tidak benar-benar menginginkannya. Menurut pendapat saya, Anda hanya perlu mengamankan aplikasi Anda sehingga seseorang tidak dapat secara tidak sengaja membajak produk Anda, dan tidak lebih.
Misalnya, jika Anda menggunakan lisensi per-mesin, itu tidak seharusnya hanya berfungsi ketika Anda menginstalnya pada mesin kedua yang baru. Anda akan menginginkan pesan kesalahan yang baik untuk mencegah panggilan dukungan tambahan, tetapi jangan menghabiskan waktu ekstra membuatnya terlalu sulit untuk bekerja di sekitar dan jangan memukul pengguna di atas kepala dengan itu.
Contoh lain adalah uji coba terbatas waktu. Bahkan jangan khawatir tentang hal-hal sederhana seperti jika pengguna dapat memutar kembali jam sistem. Seseorang yang mengetahui bahwa mereka melanggar lisensi Anda, dan selama seorang pengguna tahu kapan mereka melakukan pelanggaran, Anda sudah cukup melakukannya.
Anda harus melakukan ini karena pengguna tidak peduli dengan lisensi Anda. Lisensi adalah hal-hal yang dibuat-buat yang tidak ada yang dipedulikan sampai mereka perlu. Tidak ada yang membacanya, dan mereka seharusnya tidak perlu. Oleh karena itu cara terbaik untuk memberi tahu pengguna di mana batasannya adalah jika perilaku out-of-the-box untuk aplikasi Anda sesuai dengan lisensi. Dalam kasus pertama ini berarti gagal menginstal atau menginstal dalam mode versi percobaan untuk kedua kalinya. Untuk yang terakhir, itu mungkin hanya berarti memeriksa tanggal teks biasa dalam file konfigurasi. Bagaimanapun, pastikan Anda menanganinya dengan cara yang elegan, membantu, dan penuh hormat.
Jadi itu menjelaskan apa artinya melakukan sebanyak itu. Tapi mengapa tidak melangkah lebih jauh? Mengapa tidak pasang setiap lubang kecil yang bisa Anda temukan? Jawabannya ada dalam dua bagian. Pertama, jika seseorang akan menyeberangi ambang etis sadar melanggar persyaratan lisensi Anda - bahkan dengan cara yang sederhana - mereka juga akan bersedia melakukan sesuatu yang lebih sulit atau berbahaya seperti pull aplikasi Anda dari torrentsitus - dan ada sejumlah bahaya yang terlibat dalam menjalankan aplikasi yang diunduh dari sumber yang tidak terpercaya. Membuatnya semakin sulit hanyalah gangguan kecil bagi para pengguna ini dan berisiko menyebabkan masalah dengan pelanggan Anda yang membayar. Menjaga tetap sederhana dapat mencegah seseorang menggali aplikasi Anda dan melepaskan celah yang lebih komprehensif. Kedua, Anda hanya memiliki sedikit mata untuk mencari kekurangan; peretas memiliki banyak, dan mereka lebih banyak berlatih menemukan mereka. Anda hanya perlu kehilangan satu kesalahan kecil, dan aplikasi Anda akan memiliki distribusi yang sama di situs bajak laut seolah-olah Anda tidak melakukan apa pun. Anda harus benar setiap saat; mereka hanya harus beruntung sekali. Jadi upaya yang diperlukan sangat tinggi, dan kemungkinan ukuran keberhasilan sangat rendah.
Pada akhirnya, jika seseorang ingin membajak aplikasi Anda (bukan hanya menggunakannya), dan itulah tujuan utama mereka, mereka akan melakukannya. Tidak ada yang bisa Anda lakukan untuk menghentikan mereka. Ini adalah sifat perangkat lunak; sekali file yang membentuk produk Anda ada di komputer pengguna, mereka akan dapat melakukannya dengan yang mereka inginkan. Ini sangat relevan di lingkungan yang dikelola seperti Java atau .NET , tetapi jelas berlaku untuk kode asli juga. Waktu ada di pihak mereka, dan diberi waktu yang cukup keamanan digital apa pun bisa dipatahkan.
Karena Anda tidak dapat menghentikan pengguna dari membajak produk Anda, tindakan terbaik Anda adalah melibatkan kelas pengguna ini dengan cara menggunakannya untuk keuntungan Anda. Seringkali mungkin membuat mereka bekerja untuk Anda daripada melawan Anda. Dengan mengingat hal itu, apa pun aplikasi Anda, mungkin ada baiknya menyimpan versi gratis yang hampir sepenuhnya berfungsi dan tidak kedaluwarsa. Perbedaan bahkan antara label harga US $ 1 dan gratis sangat besar, jika tanpa alasan lain selain itu pelanggan tidak perlu mempercayai Anda dengan kartu kredit mereka. Edisi gratis produk Anda tidak hanya akan secara efektif membunuh distribusi bajakan (mengapa harus mengambil risiko versi bajakan ketika Anda bisa mendapatkan harga yang sama?), Tetapi berpotensi untuk memperluas audiensi Anda secara dramatis.
Hasilnya adalah bahwa Anda mungkin perlu menaikkan harga edisi berbayar, sehingga pada akhirnya alih-alih 2.000 pengguna dengan $ 20 masing-masing Anda memiliki 100.000 pengguna gratis, di mana 500 bersedia membayar $ 99 untuk edisi "profesional" . Ini memberi Anda lebih banyak uang daripada jika Anda menghabiskan banyak waktu mengunci produk Anda. Lebih dari itu, Anda dapat melibatkan pengguna gratis ini dan meningkatkan hubungan dengan beberapa cara penting.
Salah satunya adalah dukungan. Seorang pesimis akan mengambil kesempatan ini untuk mengeluh tentang peningkatan biaya mendukung 100.000 pengguna gratis, tetapi sesuatu yang luar biasa terjadi: produk Anda menjadi mandiri. Anda melihat ini sepanjang waktu dengan proyek open source besar yang tidak memiliki uang untuk biaya dukungan. Pengguna akan melangkah dan mewujudkannya.
Pengguna gratis umumnya telah mengurangi harapan dukungan untuk memulai, dan untuk alasan yang baik. Yang perlu Anda lakukan adalah menandai edisi gratis karena hanya memenuhi syarat untuk dukungan komunitas dan memasang forum online yang dimoderasi pengguna untuk tujuan itu. Basis pengetahuan dukungan Anda bersifat swasembada, dan pengguna tingkat lanjut akan menggembalakan mereka yang membutuhkan pegangan tangan atas nama Anda. Yang lebih penting lagi, ini akan memungkinkan Anda untuk mengidentifikasi dan memperbaiki bug lebih cepat, pada akhirnya meningkatkan kualitas produk Anda dan menurunkan total biaya dukungan. Ini tidak mungkin dilakukan sebelumnya karena basis pengguna Anda tidak cukup besar, tetapi ketika Anda memperlakukan pengguna gratis sebagai pelanggan itu bisa bekerja dengan sangat baik.
Lainnya adalah umpan balik. Dengan menonton forum Anda, Anda mempelajari ide-ide peningkatan penting yang mungkin tidak pernah Anda pertimbangkan sebelumnya. Ini memungkinkan Anda untuk akhirnya mengubah lebih banyak pengguna gratis Anda menjadi pengguna berbayar dan menciptakan produk yang lebih menarik yang akan menarik lebih banyak audiens.
Akhirnya, Anda perlu mempertimbangkan pemasaran. Semua pengguna gratis ini sekarang adalah penggemar, bukan musuh, dan mereka akan bertindak sesuai. Bukan hanya itu, tetapi ketika tiba saatnya untuk merilis versi Anda berikutnya, para pengguna ini semua akan pergi melalui saluran distribusi yang Anda setujui, daripada beberapa mekanisme lain yang tidak diketahui. Itu berarti untuk versi Anda berikutnya, Anda mulai terhubung dengan audiens yang lebih besar, sangat tertarik dan mendukung.
Fitur terbaik untuk dicadangkan untuk edisi profesional adalah alat yang ditujukan untuk memudahkan penerapan dan manajemen perusahaan. Seorang cracker tidak akan melihat ini sebagai alasan yang cukup kuat untuk meretasnya untuk penggunaannya sendiri, tetapi untuk bisnis yang ingin membeli 300 lisensi dan mendorongnya ke seluruh perusahaan, ini adalah must-have. Tentu saja, edisi profesional akan tetap dibajak, tetapi sekali lagi: jangan berkeringat karena Anda mungkin tidak akan dapat menjual produk tersebut kepada para perompak itu apa pun yang Anda lakukan, jadi itu tidak membebani Anda pendapatan apa pun .
Meskipun secara psikologis mungkin sulit untuk memberikan produk Anda sebanyak ini, semoga Anda dapat memahami bagaimana itu benar-benar cara terbaik untuk pergi. Tidak hanya itu, itu satu-satunya cara untuk pergi dalam jangka panjang. Saya tahu seseorang di luar sana berpikir bahwa mereka tidak ingin melakukannya dengan cara ini. Lagipula, mereka berhasil menjual produk $ 20 yang terkunci selama bertahun-tahun. Tapi itu terlalu buruk, karena jika Anda tidak melakukannya dengan cara ini, pada akhirnya orang lain akan melakukannya . Dan produk mereka akan sama baiknya dengan milik Anda, atau cukup dekat sehingga mereka dapat mengklaim hal itu. Lalu tiba-tiba harga Anda terlihat keterlaluan, penjualan menurun drastis, dan tidak ada lagi yang bisa Anda lakukan. Anda dapat memilih tingkat menengah tambahan jika harus, tetapi tidak mungkin membantu Anda.
sumber
Dalam pengalaman saya, membuat aplikasi atau pustaka Anda lebih sulit untuk dirusak akan menyakiti pelanggan jujur Anda sementara hanya sedikit menunda yang tidak jujur. Berkonsentrasilah untuk membuat produk gesekan yang hebat dan rendah alih-alih berusaha keras untuk menunda hal yang tak terhindarkan.
sumber
Rahasia yang Anda bagikan dengan banyak orang bukanlah rahasia. Jika Anda memiliki hal-hal rahasia dalam kode Anda, mengaburkannya bukan perlindungan; itu hanya harus didobobekan sekali . Jika Anda memiliki rahasia yang tidak ingin Anda bagikan dengan pelanggan Anda, maka jangan membaginya dengan pelanggan Anda . Tulis kode Anda sebagai layanan web dan simpan kode super rahasia Anda di server Anda sendiri, di mana hanya Anda yang dapat melihatnya.
sumber
Secara garis besar, ada tiga kelompok orang di luar sana.
Mereka yang tidak akan membeli perangkat lunak Anda dan menggunakan celah, atau jika mereka tidak menemukan, tidak menggunakan perangkat lunak Anda sama sekali. Jangan berharap menghasilkan uang dari grup ini. Mereka bergantung pada keterampilan mereka sendiri atau pada cracker (yang cenderung memprioritaskan waktu mereka tergantung pada kegunaan Anda dan seberapa besar audiens Anda. Semakin bermanfaat, semakin cepat crack akan tersedia).
Kelompok pengguna yang sah yang akan membeli (membayar) perangkat lunak Anda, terlepas dari mekanisme perlindungan apa yang Anda gunakan. Jangan membuat hidup susah bagi pengguna sah Anda dengan menggunakan mekanisme perlindungan yang rumit karena mereka akan membayar untuk hal apa pun. Mekanisme perlindungan yang kompleks dapat dengan mudah merusak pengalaman pengguna dan Anda tidak ingin ini terjadi pada grup ini. Secara pribadi, saya akan menentang solusi perangkat keras apa pun, yang menambah biaya perangkat lunak Anda.
Minoritas yang akan menggunakan crack "tidak etis" dan hanya akan membayar perangkat lunak Anda karena fitur-fiturnya dilindungi oleh mekanisme lisensi. Anda mungkin tidak ingin membuatnya sangat mudah bagi grup ini untuk menghindari perlindungan Anda. Namun, semua upaya yang Anda habiskan untuk melindungi perangkat lunak Anda akan membayar kembali, tergantung pada seberapa besar kelompok orang ini. Ini sepenuhnya tergantung pada jenis perangkat lunak yang Anda buat.
Mengingat apa yang Anda katakan, jika Anda berpikir ada minoritas yang cukup besar yang dapat didorong untuk membeli perangkat lunak Anda, silakan dan terapkan beberapa bentuk perlindungan. Pikirkan tentang berapa banyak uang yang dapat Anda hasilkan dari minoritas ini dibandingkan dengan waktu yang Anda habiskan untuk perlindungan, atau jumlah yang Anda habiskan untuk API / alat perlindungan pihak ketiga.
Jika Anda ingin menerapkan solusi Anda sendiri, menggunakan kriptografi kunci publik adalah cara yang baik (bukan algoritma simetris) untuk mencegah peretasan yang mudah. Misalnya Anda dapat menandatangani lisensi Anda secara digital (no seri, atau file lisensi). Satu-satunya cara untuk menyiasatinya adalah dengan mendekompilasi, mengubah, dan mengkompilasi ulang kode (yang dapat membuat Anda lebih sulit menggunakan teknik seperti yang disarankan dalam jawaban Simucal).
sumber
Anda tidak dapat mencegah orang lain dari merusak perangkat lunak Anda.
Namun, Anda dapat membuatnya membuat retakan yang akan mengurangi penjualan Anda. Pembuat kunci yang dapat mengeluarkan kode registrasi yang valid untuk perangkat lunak Anda jauh lebih buruk daripada tambalan sederhana yang menghapus insentif pendaftaran dari perangkat lunak Anda. Itu karena celah hanya akan berfungsi untuk satu versi perangkat lunak, dan akan berhenti bekerja dengan pembaruan perangkat lunak berikutnya yang Anda rilis. Pembuat kunci akan terus bekerja sampai Anda mengubah algoritma kunci pendaftaran Anda dan itu adalah sesuatu yang tidak ingin Anda lakukan sering karena itu akan menunda klien jujur Anda.
Jadi, jika Anda mencari metode untuk melawan pembuat kunci ilegal untuk perangkat lunak Anda dan Anda tidak ingin menggunakan enkripsi asimetri karena kode registrasi panjang yang dihasilkan ini, Anda mungkin melihat Verifikasi Kunci Parsial.
Verifikasi Kunci Sebagian memastikan bahwa setiap pembuat kunci ilegal hanya berfungsi untuk satu rilis perangkat lunak Anda. Pada dasarnya yang Anda lakukan adalah memastikan bahwa setiap rilis perangkat lunak Anda hanya terhubung dengan kode untuk memeriksa BEBERAPA digit kode registrasi. Digit mana yang sebenarnya acak, sehingga cracker harus merekayasa balik banyak versi berbeda dari perangkat lunak Anda dan menggabungkan semua ini menjadi satu keygenerator untuk merilis keygenerator yang berfungsi untuk semua versi perangkat lunak Anda.
Jika Anda merilis versi perangkat lunak baru secara teratur, ini menyebabkan sejumlah keygenerator tersebar di semua jenis arsip pembajakan perangkat lunak yang tidak berfungsi lagi. Pembajak perangkat lunak potensial biasanya mencari celah atau keygen untuk versi terbaru, sehingga mereka kemungkinan akan mencoba beberapa dari mereka dan akhirnya menyerah.
Saya telah menggunakan Verifikasi Kunci Sebagian dalam game shareware (C ++) saya yang lebih baru dan sangat efektif. Sebelumnya kami punya banyak masalah dengan keygenerator yang tidak bisa kami lawan. Setelahnya ada banyak celah dan beberapa keygenerator yang hanya berfungsi untuk versi tertentu dari permainan, tetapi tidak ada generator kunci yang akan bekerja dengan semua versi. Kami secara teratur merilis pembaruan game yang sangat kecil dan membuat semua retakan yang ada sebelumnya tidak berguna.
Tampaknya ada open source .NET framework untuk Verifikasi Kunci Parsial , meskipun saya belum mencobanya.
sumber
Gunakan pembaruan online untuk memblokir salinan yang tidak berlisensi itu.
Verifikasi nomor seri dari berbagai modul aplikasi Anda dan jangan gunakan panggilan fungsi tunggal untuk melakukan verifikasi (sehingga cracker tidak dapat mem-bypass verifikasi dengan mudah).
Tidak hanya memeriksa nomor seri saat startup, lakukan verifikasi sambil menyimpan data, lakukan setiap Jumat malam, lakukan ketika pengguna menganggur ...
Verifikasi jumlah pemeriksaan file aplikasi, simpan jumlah pemeriksaan keamanan Anda di tempat yang berbeda.
Jangan melangkah terlalu jauh dengan trik semacam ini, pastikan aplikasi Anda tidak pernah crash / mengalami kegagalan fungsi saat memverifikasi kode registrasi.
Membangun aplikasi yang bermanfaat bagi pengguna jauh lebih penting daripada membuat
biner yang tidak bisa dipecahkan untuk cracker.
sumber
Kamu bisa..
Microsoft SLP ServicesPotensi Perangkat Lunak InishTech menawarkan kemampuan untuk membantu melindungi kode tanpa memengaruhi fungsionalitas aplikasi Anda.UPDATE: (Pengungkapan: Saya bekerja di Eazfuscator.NET) Apa yang membuat Potensi Perangkat Lunak
Layanan SLP Microsoftberbeda adalah kemampuan untuk mengotomatiskan kode, sehingga Anda pasti bisa . Beberapa tahun berlalu sejak pertanyaan awalnya diajukan; hari ini ada lebih banyak produk yang tersedia yang juga bekerja dengan dasar yang sama seperti:sumber
.NET Reflector hanya dapat membuka "kode terkelola" yang pada dasarnya berarti ".NET code". Jadi Anda tidak dapat menggunakannya untuk membongkar file COM DLL, asli C ++, kode Visual Basic 6.0 klasik , dll. Struktur kode .NET yang dikompilasi membuatnya sangat nyaman, portabel, dapat ditemukan, dapat diverifikasi, dll. NET Reflector mengambil keuntungan dari ini untuk memungkinkan Anda mengintip ke dalam kumpulan yang dikompilasi tetapi dekompiler dan disassembler sama sekali tidak spesifik untuk .NET dan telah ada selama kompiler ada.
Anda dapat menggunakan obfuscator untuk membuat kode lebih sulit dibaca, tetapi Anda tidak bisa mencegahnya dari dekompilasi tanpa membuatnya tidak dapat dibaca oleh .NET. Ada beberapa produk di luar sana (biasanya mahal) yang mengklaim untuk "menautkan" aplikasi kode terkelola Anda ke dalam aplikasi kode asli, tetapi bahkan jika ini benar-benar berfungsi, orang yang gigih akan selalu menemukan jalan.
Namun ketika menyangkut kebingungan, Anda mendapatkan apa yang Anda bayar. Jadi, jika kode Anda sangat eksklusif sehingga Anda harus berusaha keras untuk melindunginya, Anda harus bersedia menginvestasikan uang dalam obfuscator yang bagus.
Namun, dalam 15 tahun pengalaman saya dalam menulis kode, saya menyadari bahwa menjadi terlalu protektif terhadap kode sumber Anda adalah buang-buang waktu dan memiliki sedikit manfaat. Hanya mencoba membaca kode sumber asli tanpa mendukung dokumentasi, komentar, dll. Bisa sangat sulit untuk dipahami. Tambahkan ke nama-nama variabel tidak masuk akal yang muncul dengan dekompiler dan kode spageti yang dibuat oleh obfuscator modern - Anda mungkin tidak perlu terlalu khawatir tentang orang yang mencuri kekayaan intelektual Anda.
sumber
Apakah ini benar-benar layak? Setiap mekanisme perlindungan dapat dipatahkan dengan tekad yang memadai. Pertimbangkan pasar Anda, harga produk, jumlah pelanggan, dll.
Jika Anda menginginkan sesuatu yang lebih dapat diandalkan maka turunkan kunci perangkat keras, tapi itu agak menyusahkan (bagi pengguna) dan lebih mahal. Solusi perangkat lunak mungkin hanya akan membuang-buang waktu dan sumber daya, dan satu-satunya hal yang akan mereka berikan kepada Anda adalah perasaan 'keamanan' yang salah.
Lebih banyak ide (tidak ada yang sempurna, karena tidak ada yang sempurna).
Dan jangan buang terlalu banyak waktu karena kerupuk memiliki banyak pengalaman dengan teknik-teknik khas dan beberapa langkah di depan Anda. Kecuali Anda ingin menggunakan banyak sumber daya, mungkin ubah bahasa pemrograman (lakukan dengan cara Skype).
sumber
Jika Anda ingin orang lain dapat menjalankan kode Anda (dan jika tidak, lalu mengapa Anda menulisnya?), Maka CPU mereka harus dapat mengeksekusi kode Anda. Agar dapat menjalankan kode, CPU harus dapat memahaminya .
Karena CPU bodoh, dan manusia tidak, ini berarti bahwa manusia dapat memahami kode juga.
Hanya ada satu cara untuk memastikan bahwa pengguna Anda tidak mendapatkan kode Anda: jangan berikan kode Anda.
Ini dapat dicapai dengan dua cara: Perangkat lunak sebagai layanan (SaaS), yaitu, Anda menjalankan perangkat lunak di server Anda dan hanya membiarkan pengguna Anda mengaksesnya dari jarak jauh. Ini adalah model yang menggunakan Stack Overflow, misalnya. Saya cukup yakin bahwa Stack Overflow tidak mengaburkan kode mereka, namun Anda tidak dapat mendekompilasinya.
Cara lainnya adalah model alat: alih-alih memberikan kode kepada pengguna Anda, Anda memberi mereka komputer yang berisi kode tersebut. Ini adalah model yang digunakan konsol game, sebagian besar ponsel dan TiVo . Perhatikan bahwa ini hanya berfungsi jika Anda "memiliki" seluruh jalur eksekusi: Anda perlu membangun CPU Anda sendiri, komputer Anda sendiri, menulis sistem operasi Anda sendiri dan implementasi CLI Anda sendiri . Kemudian, dan hanya dengan begitu Anda dapat melindungi kode Anda. (Tetapi perhatikan bahwa kesalahan sekecil apa pun akan membuat semua perlindungan Anda tidak berguna. Microsoft, Apple, Sony, industri musik, dan industri film dapat membuktikannya.)
Atau, Anda bisa saja tidak melakukan apa pun, yang berarti bahwa kode Anda akan secara otomatis dilindungi oleh undang-undang hak cipta.
sumber
Sayangnya, Anda tidak akan lari dari ini. Taruhan terbaik Anda adalah menulis kode Anda dalam C dan P / Panggil saja.
Ada tangkapan kecil-22, seseorang bisa saja mendekompilasi aplikasi Anda ke CIL dan mematikan kode verifikasi / aktivasi (misalnya, panggilan ke perpustakaan C Anda). Ingatlah bahwa aplikasi yang ditulis dalam C juga direkayasa ulang oleh peretas yang lebih gigih (lihat saja seberapa cepat gim yang retak sekarang ini). Tidak ada yang akan melindungi aplikasi Anda.
Pada akhirnya itu berfungsi seperti rumah Anda, lindungi dengan cukup baik sehingga terlalu banyak usaha (kode spaghetti akan membantu di sini) dan sehingga penyerang hanya pindah ke tetangga sebelah Anda (kompetisi :)). Lihatlah Windows Vista, harus ada 10 cara berbeda untuk memecahkannya.
Ada paket di luar sana yang akan mengenkripsi file EXE Anda dan mendekripsi ketika pengguna diizinkan untuk menggunakannya, tetapi sekali lagi, itu menggunakan solusi generik yang tidak diragukan lagi telah retak.
Mekanisme aktivasi dan registrasi ditujukan pada 'rata-rata Joe:' orang yang tidak memiliki cukup pengetahuan teknologi untuk memintasnya (atau dalam hal ini tahu bahwa mereka dapat memintasnya). Jangan repot-repot dengan kerupuk, mereka memiliki terlalu banyak waktu di tangan mereka.
sumber
Selain perlindungan pembelian, Anda (atau pengembang Anda) dapat belajar untuk melindungi dari penyalinan.
Ini adalah ide-ide:
Pada awalnya, cobalah untuk menulis program yang menulis sendiri ke konsol. Itu masalah yang terkenal. Tujuan utama dari tugas ini adalah berlatih menulis kode referensi-sendiri.
Kedua, Anda perlu mengembangkan teknologi yang akan menulis ulang beberapa kode dengan cara yang dapat diandalkan pada CIL metode lain .
Anda dapat menulis mesin virtual (belum dalam . NET ). Dan taruh beberapa kode di sana. Pada akhirnya, mesin virtual menjalankan mesin virtual lain yang menjalankan kode. Itu untuk bagian dari fungsi yang jarang disebut untuk tidak terlalu memperlambat kinerja.
Tulis ulang beberapa logika menjadi C ++ / CLI, dan campur kode terkelola dengan tidak terkelola. Ini akan mengeraskan pembongkaran. Dalam hal ini, jangan lupa untuk menyediakan binari x64 juga.
sumber
Iya. Itu benar. .NET code sangat mudah untuk melakukan reverse engineer jika kodenya tidak dikaburkan.
Kebingungan akan menambah lapisan gangguan pada orang yang mencoba merekayasa balik perangkat lunak Anda. Tergantung pada versi mana yang Anda dapatkan, Anda akan mendapatkan berbagai tingkat perlindungan.
Visual Studio menyertakan versi Dotfuscator . Karena ini adalah versi yang dibundel, Anda pasti tidak mendapatkan kebingungan terkuat yang mungkin. Jika Anda melihat daftar fitur mereka, Anda akan melihat dengan tepat apa yang Anda lewatkan (dan apa yang akan dilakukan aplikasi untuk membuat kode Anda lebih aman).
Ada beberapa obfuscator .NET atau sumber terbuka gratis lainnya di luar sana (tapi saya tidak dapat mengomentari kualitas atau berbagai metode yang mereka gunakan):
Pada akhirnya, tidak ada yang sempurna. Jika seseorang benar-benar ingin melihat cara kerja perangkat lunak Anda, mereka akan melakukannya.
sumber
Yah, Anda tidak bisa sepenuhnya melindungi produk Anda dari keretakan, tetapi Anda dapat memaksimalkan / meningkatkan tingkat keamanan dan membuatnya sedikit terlalu sulit untuk di-crack oleh pemula dan cracker menengah.
Tetapi ingatlah bahwa tidak ada yang tidak dapat dipecahkan, hanya perangkat lunak di sisi server yang terlindungi dengan baik dan tidak dapat dipecahkan. Bagaimanapun, untuk meningkatkan tingkat keamanan dalam aplikasi Anda, Anda dapat melakukan beberapa langkah sederhana untuk mencegah beberapa cracker "tidak semua" dari cracking aplikasi Anda. Langkah-langkah ini akan membuat kerupuk ini menjadi gila dan mungkin putus asa:
Itu hanya metode sederhana untuk mencegah pemula dan cracker menengah dari cracking aplikasi Anda. Jika Anda memiliki lebih banyak ide untuk melindungi aplikasi Anda, jangan malu untuk mengimplementasikannya. Itu hanya akan membuat cracker hidup lebih keras, dan mereka akan frustrasi, dan akhirnya mereka akan meninggalkan aplikasi Anda, karena itu tidak sepadan dengan waktu mereka.
Terakhir, Anda juga perlu mempertimbangkan menghabiskan waktu Anda pada pengkodean aplikasi yang bagus dan berkualitas. Jangan buang waktu Anda pada pengkodean lapisan keamanan yang rumit. Jika seorang cracker yang baik ingin memecahkan aplikasi Anda ia akan melakukan apa pun yang Anda lakukan ...
Sekarang pergi dan laksanakan beberapa mainan untuk kerupuk ...
sumber
Ada Salamander , yang merupakan kompiler dan penghubung .NET asli dari Remotesoft yang dapat menggunakan aplikasi tanpa kerangka .NET. Saya tidak tahu seberapa baik itu sesuai dengan klaimnya.
sumber
Jika Microsoft dapat menemukan solusi, kami tidak akan memiliki versi Windows bajakan, jadi tidak ada yang sangat aman. Berikut adalah beberapa pertanyaan serupa dari Stack Overflow dan Anda dapat menerapkan cara Anda sendiri untuk melindunginya. Jika Anda merilis versi yang berbeda maka Anda dapat mengadopsi teknik yang berbeda untuk versi yang berbeda sehingga pada saat yang pertama retak, yang kedua dapat mengambil alih.
Mengelola fitur berdasarkan lisensi untuk aplikasi C ++
Amankan file DLL dengan file lisensi
Perangkat lunak perizinan / perlindungan?
sumber
.NET Reactor
Memperbarui
Jared menunjukkan bahwa de4dot mengklaim dapat mendekompilasi itu.
sumber
Berikut ini satu ide: Anda dapat memiliki server yang dihosting oleh perusahaan Anda sehingga semua instance perangkat lunak Anda perlu terhubung. Meminta mereka terhubung dan memverifikasi kunci pendaftaran tidak cukup - mereka hanya akan menghapus cek. Selain pemeriksaan kunci, Anda juga perlu meminta server melakukan beberapa tugas penting yang tidak dapat dilakukan klien, sehingga tidak mungkin dihapus. Ini tentu saja mungkin berarti banyak proses berat pada server Anda, tetapi itu akan membuat perangkat lunak Anda sulit untuk dicuri, dan dengan asumsi Anda memiliki skema kunci yang baik (periksa kepemilikan, dll.), Kunci juga akan sulit untuk mencuri. Ini mungkin lebih invasif daripada yang Anda inginkan, karena ini akan mengharuskan pengguna Anda untuk terhubung ke internet untuk menggunakan perangkat lunak Anda.
sumber
Apa pun yang berjalan pada klien dapat didekompilasi dan di-crack. Kekaburan hanya membuatnya lebih sulit. Saya tidak tahu aplikasi Anda, tetapi 99% dari waktu saya hanya tidak berpikir itu sepadan dengan usaha.
sumber
Tidak mungkin untuk sepenuhnya mengamankan aplikasi, maaf.
sumber
Mengaburkan kodenya! Ada contoh di Obfuscating C # Code .
sumber
Ingatlah bahwa 99% pengguna Anda tidak akan tertarik untuk memeriksa executable Anda untuk melihat cara kerjanya.
Mengingat begitu sedikit orang yang akan repot mencoba dan bahwa kebanyakan obfuscator dapat dikerjakan, apakah itu sepadan dengan waktu dan usaha Anda?
Anda akan lebih baik menginvestasikan waktu untuk meningkatkan produk Anda sehingga lebih banyak orang ingin menggunakannya.
sumber
Hanya untuk menambahkan peringatan: jika Anda akan menggunakan kebingungan, periksa apakah semuanya masih berfungsi! Kebingungan mungkin mengubah hal-hal seperti nama kelas dan metode. Jadi jika Anda menggunakan refleksi untuk memanggil metode dan / atau kelas tertentu (seperti dalam arsitektur plugin) aplikasi Anda bisa gagal setelah dikaburkan. Juga stacktraces mungkin tidak berguna untuk melacak kesalahan.
sumber
Jika ditulis dalam .NET dan dikompilasi ke CIL , itu dapat tercermin. Jika keamanan menjadi masalah dan kebingungan harus dihindari, maka saya sarankan untuk menulis aplikasi Anda menggunakan bahasa yang tidak dikelola, yang, pada dasarnya, lebih sulit untuk dibalik insinyur.
sumber
Keduanya memiliki jawaban yang sangat sederhana: jangan membagikan kode objek ke pihak yang tidak dipercaya, seperti (tampaknya) pelanggan Anda. Apakah layak untuk meng-host aplikasi pada mesin Anda hanya tergantung pada apa fungsinya.
Jika itu bukan aplikasi web , mungkin Anda dapat mengizinkan masuk SSH dengan penerusan X ke server aplikasi (atau Remote Desktop Connection , saya kira, untuk Windows).
Jika Anda memberikan kode objek ke orang tipe kutu buku, dan mereka pikir program Anda mungkin menyenangkan untuk di-crack, itu akan menjadi retak. Tidak ada jalan lain.
Jika Anda tidak percaya kepada saya, tunjukkan aplikasi profil tinggi yang belum retak dan bajakan.
Jika Anda menggunakan kunci perangkat keras, itu akan membuat produksi lebih mahal dan pengguna Anda akan membenci Anda karenanya. Sungguh menyebalkan untuk merangkak di lantai dengan mencolokkan dan mencabut 27 USB yang berbeda karena pembuat perangkat lunak tidak mempercayai Anda (saya bayangkan).
Tentu saja, cara mengatasinya adalah dengan memecahkan tes "bisa-saya-gunakan-itu" sehingga selalu kembali benar.
Trik jahat mungkin dengan menggunakan nilai byte dari opcodes yang melakukan tes di tempat lain dalam program dengan cara yang kotor yang akan membuat program crash dengan probabilitas tinggi kecuali nilainya tepat. Itu membuat Anda terhubung ke arsitektur tertentu, meskipun :-(
sumber
Buat saja aplikasi yang baik dan kode sistem perlindungan yang sederhana. Tidak masalah perlindungan apa yang Anda pilih, itu akan terbalik ... Jadi jangan buang waktu / uang terlalu banyak.
sumber
Ketika datang ke .NET, jika Anda merilis aplikasi Windows Forms (atau aplikasi mana pun di mana klien memiliki file Portable Executable), itu bisa di-crack.
Jika Anda ingin tetap menggunakan .NET dan ingin meminimalkan kemungkinan diambilnya kode sumber, maka Anda mungkin ingin mempertimbangkan untuk menggunakannya sebagai aplikasi ASP.NET di server web, alih-alih menjadikannya aplikasi Windows Forms.
sumber
Terus terang, kadang-kadang kita perlu mengaburkan kode (misalnya, mendaftar kelas lisensi dan sebagainya). Dalam hal ini, proyek Anda tidak gratis. IMO, Anda harus membayar obfucator yang bagus.
Dotfuscator menyembunyikan kode Anda dan .NET Reflector menunjukkan kesalahan saat Anda mencoba mendekompilasinya.
sumber
Saya dapat merekomendasikan menggunakan Obfuscator .
sumber