Bagaimana cara menghasilkan dan memvalidasi kunci lisensi perangkat lunak?

236

Saat ini saya terlibat dalam pengembangan produk (dikembangkan dalam C #) yang akan tersedia untuk diunduh dan dipasang secara gratis tetapi dalam versi yang sangat terbatas. Untuk mendapatkan akses ke semua fitur, pengguna harus membayar biaya lisensi dan menerima kunci. Kunci itu kemudian akan dimasukkan ke dalam aplikasi untuk "membuka" versi lengkap.

Seperti menggunakan kunci lisensi seperti itu biasa, saya bertanya-tanya:

  1. Bagaimana itu biasanya diselesaikan?
  2. Bagaimana saya bisa menghasilkan kunci dan bagaimana itu dapat divalidasi oleh aplikasi?
  3. Bagaimana saya bisa menghindari agar kunci tidak dipublikasikan di Internet dan digunakan oleh orang lain yang belum membayar lisensi (kunci yang pada dasarnya bukan "milik mereka").

Saya kira saya juga harus mengikat kunci ke versi aplikasi entah bagaimana sehingga akan mungkin untuk menagih untuk kunci baru di versi fitur.

Ada lagi yang harus saya pikirkan dalam skenario ini?

Riri
sumber

Jawaban:

127

Peringatan: Anda tidak dapat mencegah pengguna dari pembajakan, tetapi hanya membuatnya lebih mudah bagi pengguna yang jujur ​​untuk melakukan hal yang benar.

Dengan asumsi Anda tidak ingin melakukan build khusus untuk setiap pengguna, maka:

  • Buat sendiri kunci rahasia untuk produk
  • Ambil nama pengguna
  • Menyatukan nama pengguna dan kunci rahasia dan hash dengan (misalnya) SHA1
  • Buka kemasan hash SHA1 sebagai string alfanumerik. Ini adalah "Kunci Produk" pengguna individu
  • Di dalam program, lakukan hash yang sama, dan bandingkan dengan kunci produk. Jika sama, OKE.

Tapi, saya ulangi: ini tidak akan mencegah pembajakan


Baru-baru ini saya membaca bahwa pendekatan ini tidak terlalu kriptografis. Tetapi solusi ini sudah lemah ( karena perangkat lunak itu sendiri harus menyertakan kunci rahasia di suatu tempat ), jadi saya tidak berpikir penemuan ini membatalkan solusi sejauh ini.

Hanya berpikir saya benar-benar harus menyebutkan ini; jika Anda berencana untuk mendapatkan sesuatu yang lain dari ini, waspadalah.

Brent.Longborough
sumber
13
jika program menyertakan kunci rahasia (sebagaimana tersirat pada langkah-langkah di atas), memecahkannya sepele
Steven A. Lowe
2
diedit agar lebih jelas; tidak bisa terlalu menekankan sesuatu yang mendasar ;-)
Steven A. Lowe
23
Gunakan metode kriptografi asimetris (seperti RSA) untuk menghasilkan dan mendekode kunci produk untuk menghindari penyisipan rahasia dalam kode.
Amir Moghimi
6
Saya akan berpikir bahwa pada saat seseorang meretas kode Anda (mungkin pada tingkat perakitan) untuk menemukan kunci rahasia Anda, mereka mungkin juga pada tingkat yang mereka dapat melewati cek Anda sepenuhnya. Saya tidak berpikir ada metode registrasi yang sangat aman sehingga dapat bertahan dari hacker yang baik yang menjalankan program secara lokal. Seperti kata komentar asli, itu benar-benar semua tentang apa pun yang membuatnya satu langkah lebih sulit daripada hanya menyalin file. Banyak game hari ini telah menyerah pada perlindungan salinan dan hanya mengambil konten game secara online, dalam hal ini kode itu keluar dari tangan peretas.
JamieB
1
Apakah biasa memasukkan batasan dalam kunci lisensi? Misalnya, pembatasan waktu, jumlah pengguna bersamaan, modul yang akan dipasang, dll.?
Carlo
97

Ada banyak cara untuk menghasilkan kunci lisensi, tetapi sangat sedikit cara yang benar-benar aman. Sangat disayangkan, karena bagi perusahaan, kunci lisensi memiliki nilai yang hampir sama dengan uang tunai nyata.

Idealnya, Anda ingin kunci lisensi Anda memiliki properti berikut:

  1. Hanya perusahaan Anda yang dapat membuat kunci lisensi untuk produk Anda, bahkan jika seseorang benar-benar merekayasa ulang produk Anda (yang AKAN terjadi, saya berbicara dari pengalaman). Mengacaukan algoritma atau menyembunyikan kunci enkripsi dalam perangkat lunak Anda benar-benar keluar dari pertanyaan jika Anda serius mengendalikan lisensi. Jika produk Anda berhasil, seseorang akan membuat generator utama dalam beberapa hari setelah rilis.

  2. Kunci lisensi harus dapat digunakan hanya pada satu komputer (atau setidaknya Anda harus dapat mengendalikan ini dengan sangat ketat)

  3. Kunci lisensi harus pendek dan mudah diketik atau didikte melalui telepon. Anda tidak ingin setiap pelanggan memanggil dukungan teknis karena mereka tidak mengerti jika kunci berisi "l" atau "1". Departemen dukungan Anda akan berterima kasih untuk ini, dan Anda akan memiliki biaya lebih rendah di bidang ini.

Jadi bagaimana Anda mengatasi tantangan ini?

  1. Jawabannya sederhana tetapi secara teknis menantang: tanda tangan digital menggunakan kriptografi kunci publik. Kunci lisensi Anda sebenarnya harus ditandatangani "dokumen", berisi beberapa data yang berguna, ditandatangani dengan kunci pribadi perusahaan Anda. Tanda tangan harus menjadi bagian dari kunci lisensi. Produk harus memvalidasi kunci lisensi dengan kunci publik yang sesuai. Dengan cara ini, bahkan jika seseorang memiliki akses penuh ke logika produk Anda, mereka tidak dapat membuat kunci lisensi karena mereka tidak memiliki kunci pribadi. Kunci lisensi akan terlihat seperti ini: BASE32 (CONCAT (DATA, PRIVATE_KEY_ENCRYPTED (HASH (DATA)))) Tantangan terbesar di sini adalah bahwa algoritma kunci publik klasik memiliki ukuran tanda tangan yang besar. RSA512 memiliki tanda tangan 1024-bit. Anda tidak ingin kunci lisensi Anda memiliki ratusan karakter. Salah satu pendekatan yang paling kuat adalah dengan menggunakan kriptografi kurva eliptik (dengan implementasi yang cermat untuk menghindari paten yang ada). Kunci ECC seperti 6 kali lebih pendek dari kunci RSA, untuk kekuatan yang sama. Anda selanjutnya dapat mengurangi ukuran tanda tangan menggunakan algoritma seperti algoritme tanda tangan digital Schnorr (paten kedaluwarsa pada 2008 - bagus :))

  2. Ini dapat dicapai dengan aktivasi produk (Windows adalah contoh yang baik). Pada dasarnya, untuk pelanggan dengan kunci lisensi yang valid, Anda perlu membuat beberapa "data aktivasi" yang merupakan pesan yang ditandatangani yang menyematkan id perangkat keras komputer sebagai data yang ditandatangani. Ini biasanya dilakukan melalui internet, tetapi hanya SEKALI: produk mengirim kunci lisensi dan id perangkat keras komputer ke server aktivasi, dan server aktivasi mengirim kembali pesan yang ditandatangani (yang juga dapat dibuat singkat dan mudah untuk didikte melalui telepon). Sejak saat itu, produk tidak memeriksa kunci lisensi saat startup, tetapi data aktivasi, yang membutuhkan komputer agar sama untuk memvalidasi (jika tidak, DATA akan berbeda dan tanda tangan digital tidak akan divalidasi).

  3. Nah, cukup singkirkan karakter yang berlebihan seperti "1", "l", "0", "o" dari kunci Anda. Pisahkan string kunci lisensi menjadi grup karakter.

Catalin S.
sumber
8
Tidak bisakah mereka hanya mengedit perangkat lunak menambahkan / menghapus kode sedemikian rupa sehingga pemeriksaan dilewati sepenuhnya?
Pacerier
Apakah jawaban ke nomor 1 mengharuskan layanan aktivasi / deaktivasi online pada dasarnya?
Dan W
2
Saya ingin menunjukkan betapa unggulnya jawaban ini untuk hal hash lainnya.
Erik Aronesty
1
@ Peracerier Ada banyak hal dari kunci lisensi yang melindungi perusahaan perangkat lunak. Memodifikasi exe bukan salah satunya.
Erik Aronesty
1
Perlu dicatat bahwa bahkan dengan kriptografi privat / publik asimetri kunci, masih mungkin untuk menghasilkan lisensi palsu, dengan hanya mengganti kunci publik yang dikirimkan dalam perangkat lunak dengan kunci publik lain, dan menggunakan kunci pribadi terkait untuk menandatangani lisensi palsu. Inilah sebabnya kami memiliki dan membutuhkan Otoritas Sertifikat BTW tepercaya, yang mengikat kunci publik untuk identitas. Jadi, sementara ini mungkin menambahkan satu simpai lagi untuk dilewati, itu tidak dengan sendirinya menjamin # 1.
Saeb Amini
76

Jawaban sederhana - Tidak peduli skema apa yang Anda gunakan, bisa dipecahkan.

Jangan menghukum pelanggan yang jujur ​​dengan sistem yang dimaksudkan untuk mencegah peretas, karena peretas akan memecahkannya.

Kode hash sederhana yang diikat ke email atau sejenisnya mungkin cukup baik. ID berbasis perangkat keras selalu menjadi masalah ketika orang perlu menginstal ulang atau memperbarui perangkat keras.

Utas bagus tentang masalah ini: http://discuss.joelonsoftware.com/default.asp?biz.5.82298.34

sekunar
sumber
2
setuju, Anda tidak ingin mengecewakan pengguna yang benar-benar membeli produk Anda! (Bayar m $, apel, dll ...)
Jason
2
MS, Apple, dll dapat lolos begitu saja karena mereka besar dan menyediakan produk inti yang sulit didapat di tempat lain atau memiliki bayangan pasar besar yang dapat mereka gunakan untuk memaksa orang. Dev kecil tidak bisa.
sekunar
1
skema penandatanganan kunci pub / priv tidak dapat "dipecahkan" untuk menghasilkan kunci yang valid baru bagi pengguna yang ingin menjalankan kode yang ditandatangani yang diunduh dari situs penerbit, alih-alih perangkat lunak yang dipecah. sedangkan skema hash / simetris dapat dipecahkan untuk menghasilkan kunci lisensi baru yang valid yang tidak dapat dibedakan dari yang tidak valid. Perbedaan besar
Erik Aronesty
Tautan rusak ....
stigzler
56

Saat membuat kunci, jangan lupa untuk menyatukan versi dan membangun nomor ke string yang Anda hitung. Dengan begitu tidak akan ada satu tombol pun yang membuka semua yang pernah Anda lepaskan.

Setelah Anda menemukan beberapa kunci atau tambalan melayang di astalavista.box.sk Anda akan tahu bahwa Anda berhasil membuat sesuatu yang cukup populer sehingga seseorang mau repot-repot memecahkannya. Bersuka cita!

shoosh
sumber
8
"jangan lupa untuk menyatukan versi dan membangun nomor ke string yang Anda hitung dengan hash" - tetapi bukankah itu akan membuat kunci istirahat ketika pengguna memperbarui ke rilis patch kecil?
thomthom
1
@thomthom Bagaimana kalau mengaitkan versi maksimum ke kunci? Gagasan versi itu sendiri masuk akal dan menambah lebih banyak keamanan
Marvin Thobejane
@MarvinThobejane untuk mengaitkan max ver Anda dapat menandatangani max ver diizinkan, dan memiliki kode iterate versinya sedikit. tetapi tidak ada> = ops yang diizinkan dalam sigs.
Erik Aronesty
22

Selain apa yang telah dinyatakan ....

Setiap penggunaan aplikasi .NET secara inheren dapat dipecahkan karena masalah bahasa perantara. Pembongkaran sederhana dari kode .NET akan membuka produk Anda kepada siapa pun. Mereka dapat dengan mudah mem-bypass kode lisensi Anda pada saat itu.

Anda bahkan tidak bisa menggunakan nilai perangkat keras untuk membuat kunci lagi. Mesin virtual sekarang memungkinkan seseorang untuk membuat gambar mesin 'berlisensi' dan menjalankannya pada platform apa pun yang mereka pilih.

Jika perangkat lunak mahal ada solusi lain. Jika tidak, buat saja itu cukup sulit bagi peretas biasa. Dan terima fakta bahwa pada akhirnya akan ada salinan tanpa izin.

Jika produk Anda rumit, masalah dukungan yang melekat akan membuat beberapa perlindungan untuk Anda.


sumber
9
+1 untuk mencegah kelemahan pada nilai Perangkat Keras karena Mesin Virtual.
Rubens Mariuzzo
3
Untuk itulah penamaan yang kuat untuk .NET dan Authenticode for PE. Jika seseorang telah mendekompilasi, memodifikasi dan membangun kembali perpustakaan Anda, itu tidak akan ditandatangani dan aplikasi tidak akan berjalan. Mesin virtual .NET tidak akan mengizinkannya.
Stephen Tunney
2
Penandatanganan adalah untuk memvalidasi asal program yang akan Anda jalankan. Jika pengguna tidak peduli dengan asal karena dia tahu itu dimodifikasi dan retak, cracker akan menghapus tanda tangan, atau bahkan menandatanganinya dengan tanda tangannya sendiri. Penandatanganan tidak berhenti mencampur rakitan yang dapat dipercaya dengan rakitan yang tidak dapat dipercaya.
jesusduarte
aplikasi seluler dapat digunakan sebagai dongle perangkat keras yang disesuaikan dengan juri untuk perangkat lunak yang mahal .... cukup bayar menggunakan aplikasi tersebut, dan sematkan kunci penandatanganan pada elemen aman aplikasi. maka Anda dapat mengaktifkan menggunakan aplikasi desktop + ... menonaktifkan desktop lain. menempatkan beberapa area kode bagian kritis dalam aplikasi dan / atau dalam layanan perhitungan homomorfik online dapat membantu mencegah dekompilasi sepele.
Erik Aronesty
12

Mesin C # / .NET yang kami gunakan untuk pembuatan kunci lisensi sekarang dikelola sebagai sumber terbuka:

https://github.com/appsoftware/.NET-Licence-Key-Generator .

Ini didasarkan pada sistem "Partial Key Verification" yang berarti hanya sebagian dari kunci yang Anda gunakan untuk menghasilkan kunci yang harus dikompilasi ke dalam didistribusikan Anda. Anda membuat kunci sendiri, sehingga penerapan lisensi unik untuk perangkat lunak Anda.

Seperti yang dinyatakan di atas, jika kode Anda dapat didekompilasi, relatif mudah untuk menghindari sebagian besar sistem lisensi.

gb2d
sumber
Apakah Anda bersedia melakukan tutorial untuk menggunakan produk ini? Saya menemukan wiki mereka agak kurang.
Anthony Ruffino
Proyek sekarang telah bersumber terbuka di GitHub jika itu membantu (jawaban diedit dengan tautan).
gb2d
11

Saya salah satu pengembang di belakang platform lisensi perangkat lunak Cryptolens dan telah bekerja pada sistem lisensi sejak usia 14 tahun. Dalam jawaban ini, saya telah memasukkan beberapa tips berdasarkan pengalaman yang diperoleh selama bertahun-tahun.

Cara terbaik untuk memecahkan masalah ini adalah dengan membuat server kunci lisensi yang akan dipanggil oleh setiap instance aplikasi untuk memverifikasi kunci lisensi.

Manfaat server kunci lisensi

Keuntungan dengan server kunci lisensi adalah:

  1. Anda selalu dapat memperbarui atau memblokir kunci lisensi dengan segera.
  2. setiap kunci lisensi dapat dikunci ke sejumlah mesin tertentu (ini membantu mencegah pengguna menerbitkan kunci lisensi online untuk digunakan orang lain).

Pertimbangan

Meskipun memverifikasi lisensi online memberi Anda lebih banyak kontrol atas setiap instance aplikasi, koneksi internet tidak selalu ada (terutama jika Anda menargetkan perusahaan yang lebih besar), jadi kami memerlukan cara lain untuk melakukan verifikasi kunci lisensi.

Solusinya adalah untuk selalu menandatangani respons kunci lisensi dari server menggunakan cryptosystem kunci publik seperti RSA atau ECC (mungkin lebih baik jika Anda berencana untuk berjalan pada sistem embedded). Aplikasi Anda hanya boleh memiliki kunci publik untuk memverifikasi respons kunci lisensi.

Jadi seandainya tidak ada koneksi internet, Anda dapat menggunakan respons kunci lisensi sebelumnya. Pastikan untuk menyimpan tanggal dan pengidentifikasi mesin dalam respons dan periksa bahwa tanggal tersebut tidak terlalu lama (mis. Anda mengizinkan pengguna offline paling lama 30 hari, dll) dan bahwa respons kunci lisensi milik perangkat yang benar.

Catatan Anda harus selalu memeriksa sertifikat tanggapan kunci lisensi, bahkan jika Anda terhubung ke internet), untuk memastikan bahwa itu tidak berubah sejak meninggalkan server (ini masih harus dilakukan bahkan jika API Anda ke server kunci lisensi menggunakan https)

Melindungi algoritma rahasia

Sebagian besar aplikasi .NET dapat direkayasa ulang dengan cukup mudah (ada diassembler yang disediakan oleh Microsoft untuk mendapatkan kode IL dan beberapa produk komersial bahkan dapat mengambil kode sumber dalam mis. C #). Tentu saja, Anda selalu dapat mengaburkan kodenya, tetapi tidak pernah 100% aman.

Saya kebanyakan kasus, tujuan dari solusi lisensi perangkat lunak adalah untuk membantu orang jujur ​​menjadi jujur ​​(yaitu bahwa pengguna jujur ​​yang bersedia membayar jangan lupa untuk membayar setelah masa percobaan berakhir, dll).

Namun, Anda mungkin masih memiliki beberapa kode yang tidak ingin Anda bocorkan ke publik (mis. Algoritma untuk memprediksi harga saham, dll). Dalam hal ini, satu-satunya cara untuk pergi adalah membuat titik akhir API yang akan dipanggil aplikasi Anda setiap kali metode ini harus dijalankan. Ini memerlukan koneksi internet tetapi memastikan bahwa kode rahasia Anda tidak pernah dijalankan oleh mesin klien.

Penerapan

Jika Anda tidak ingin menerapkan semuanya sendiri, saya akan merekomendasikan untuk melihat tutorial ini (bagian dari Cryptolens )

Artem
sumber
Satu pertanyaan tentang membatasi kunci lisensi yang disimpan agar tidak terlalu tua: Karena PC mungkin tidak terhubung ke internet, tanggal dan waktu mereka selalu dapat diubah kembali agar tetap pada tanggal yang sama?
Amir Mahdi Nassiri
Tidak bisakah pengguna mem-bypass server lisensi online dengan mendefinisikan host loopback di Windows? Saya telah melihat banyak aplikasi yang dibajak seperti itu, Resharper dan Matlab adalah yang bisa saya ingat.
Amir Mahdi Nassiri
1
@AmirMahdiNassiri Untuk pertanyaan 1: Jika PC offline secara permanen, Anda dapat menggunakan dongle real-time clock (RTC) sebagai sumber tepercaya untuk waktu. Untuk pertanyaan 2: Karena responsnya ditandatangani dengan kunci pribadi vendor (dan diverifikasi dengan kunci publik di dalam aplikasi), musuh harus menandatangani ulang file tersebut tanpa mengetahui kunci privat, yang, pada saat penulisan, adalah tidak mungkin dengan kunci RSA 2048bit.
Artem
7

Saya telah menggunakan Crypkey di masa lalu. Ini salah satu dari banyak yang tersedia.

Anda hanya dapat melindungi perangkat lunak hingga titik tertentu dengan skema lisensi apa pun.

Mitch Wheat
sumber
6

Saya tidak tahu seberapa rumit yang ingin Anda dapatkan

tetapi saya percaya bahwa .net dapat mengakses nomor seri hard drive.

Anda dapat meminta program mengirimkannya kepada Anda dan sesuatu yang lain (seperti nama pengguna dan alamat mac nic)

Anda menghitung kode berdasarkan itu dan mengirimkannya kembali melalui email.

mereka akan mencegah mereka beralih mesin setelah mereka memiliki kunci.

Crash893
sumber
4
Dan menjaga mereka dari mengganti HD mati di antara thigns lainnya, yang mengarah ke frustrasi. Sayangnya tidak ada jawaban yang mudah, Anda perlu menyeimbangkan kepercayaan dengan mekanisme lisensi dasar.
sekunar
Bekerja bertahun-tahun sebagai insinyur perangkat lunak dengan produk yang menggunakan nomor seri dari hd, itu benar-benar tidak aman bagi mereka yang tahu cara memperbaruinya.
Oden
Saya menyiratkan untuk menggunakan nomor ini dengan hal-hal lain (alamat mac, FQDN) mungkin membuang semuanya dalam hash. Intinya adalah untuk membuatnya sedikit lebih sulit untuk memalsukan semua data ini daripada membalikkan perangkat lunak di tempat pertama dan menghapus centang karena itu selalu menjadi pilihan.
Crash893
4

Satu-satunya cara untuk melakukan semua yang Anda minta adalah dengan memerlukan akses internet dan verifikasi dengan server. Aplikasi perlu masuk ke server dengan kunci, dan kemudian Anda perlu menyimpan detail sesi, seperti alamat IP. Ini akan mencegah kunci dari digunakan pada beberapa mesin yang berbeda. Ini biasanya tidak terlalu populer di kalangan pengguna aplikasi, dan kecuali ini adalah aplikasi yang sangat mahal dan rumit, itu tidak sepadan.

Anda bisa saja memiliki kunci lisensi untuk aplikasi tersebut, dan kemudian memeriksa sisi klien apakah kuncinya baik, tetapi mudah untuk mendistribusikan kunci ini ke pengguna lain, dan dengan dekompiler kunci baru dapat dihasilkan.

Marius
sumber
5
Saya bekerja di perusahaan yang menggunakan skema lisensi berbasis internet. setiap kali program mulai online untuk memvalidasi, saya pikir perusahaan menghabiskan lebih banyak $$ pada infrastruktur dan pengembang untuk solusi lisensi mereka daripada mereka akan hilang dari pembajakan (mereka adalah produk khusus).
Jason
3
Selain itu, biaya dukungan teknis sangat besar. banyak, BANYAK kali pengguna secara sah akan menggunakan komputer lain untuk mencoba dan menjalankan perangkat lunak tetapi hash berbeda yang menyebabkan sejumlah besar dukungan teknis. singkatnya, apa yang dikatakan sekunar - jangan menghukum pengguna yang jujur.
Jason
1
Tampaknya perusahaan Anda sedikit terlalu bersemangat dengan meminta validasi saat startup setiap saat.
jugg1es
@ Jason, Yah, mereka harus menaikkan harga produk.
Pacerier
1
@Pacerier: Jawaban salah.
Lightness Races in Orbit
4

Saya telah menerapkan aktivasi satu kali berbasis internet pada perangkat lunak perusahaan saya (C # .net) yang memerlukan kunci lisensi yang merujuk pada lisensi yang disimpan dalam database server. Perangkat lunak mengenai server dengan kunci dan diberikan informasi lisensi yang kemudian dienkripsi secara lokal menggunakan kunci RSA yang dihasilkan dari beberapa variabel (kombinasi CPUID dan hal-hal lain yang tidak sering berubah) pada komputer klien dan kemudian menyimpannya di registri.

Ini memerlukan beberapa pengkodean sisi server, tetapi telah bekerja dengan sangat baik bagi kami dan saya dapat menggunakan sistem yang sama ketika kami memperluas ke perangkat lunak berbasis browser. Ini juga memberi orang-orang penjualan Anda info hebat tentang siapa, di mana, dan kapan perangkat lunak itu digunakan. Setiap sistem lisensi yang hanya ditangani secara lokal sangat rentan terhadap eksploitasi, terutama dengan refleksi dalam .NET . Tetapi, seperti yang dikatakan semua orang, tidak ada sistem yang sepenuhnya aman.

Menurut pendapat saya, jika Anda tidak menggunakan lisensi berbasis web, tidak ada gunanya melindungi perangkat lunak sama sekali. Dengan sakit kepala yang disebabkan oleh DRM, tidak adil bagi pengguna yang benar-benar membayarnya.

jugg1es
sumber
1
Tetapi masalah utama dengan perizinan web adalah bahwa layanan perizinan menjadi target utama untuk serangan DDoS. Yang melumpuhkan layanan atau meningkatkan biaya cloud.
afk5min
4
Itu seperti mengatakan bahwa tidak ada gunanya memiliki situs web karena rentan terhadap serangan DDoS ...
jugg1es
@ jugg1es Tidak dalam komentarnya dia mengatakan "tidak ada gunanya". Dia hanya menunjukkan fakta bahwa itu adalah kerentanan yang harus dipertimbangkan.
Dan Bechard
Dan cek masih bisa dihapus di klien. Tidak ada cek, tidak ada lisensi berbasis web ...
azarai
1
Apakah maksud Anda kode aplikasi aktual dengan "informasi yang diperlukan"? Kode yang diperlukan untuk menjalankan aplikasi? Kalau tidak, saya akan berpikir itu masih akan mengakibatkan memanggil metode cek isLicensed dalam kode yang.
azarai
4

Saya sangat percaya, bahwa hanya sistem lisensi berbasis kriptografi kunci publik adalah pendekatan yang tepat di sini, karena Anda tidak harus memasukkan informasi penting yang diperlukan untuk pembuatan lisensi ke dalam kode sumber Anda.

Di masa lalu, saya telah menggunakan Perpustakaan Lisensi Treek berkali-kali, karena memenuhi persyaratan ini dan menawarkan harga yang sangat bagus. Ia menggunakan perlindungan lisensi yang sama untuk pengguna akhir dan itu sendiri dan tidak ada yang memecahkannya sampai sekarang. Anda juga dapat menemukan kiat-kiat bagus di situs web untuk menghindari pembajakan dan pemecahan.

panpernicek
sumber
Apakah kriptografi kunci publik perlu menggunakan layanan aktivasi online? Maksud saya, jika tidak ada dalam kode sumber (saya kira maksud Anda juga dapat dieksekusi), di mana lagi bisa?
Dan W
Tidak, Anda tidak harus menggunakan layanan aktivasi online. Anda dapat membuat file lisensi sepenuhnya offline.
panpernicek
Kuncinya adalah pada kenyataannya, bahwa Anda hanya menempatkan kunci publik untuk kode, yang tidak dapat digunakan untuk pembuatan lisensi. Hanya untuk verifikasi.
panpernicek
3

Seperti yang disebutkan beberapa orang lainnya, secara default saya adalah lawan yang sangat memusuhi pelanggan — sesuatu yang terkenal oleh industri perizinan. Jadi saya akan memperluas solusi yang baik untuk masalah Anda yang juga menawarkan UX pelanggan yang baik .

Sebagai permulaan, Anda menyebutkan bahwa Anda memiliki versi "terbatas" dari perangkat lunak yang Anda gunakan untuk mencoba dan mengonversi pelanggan untuk "meningkatkan" untuk fitur tambahan. Jadi yang Anda cari adalah lisensi fitur untuk produk Anda, misalnya pelanggan dapat membeli lisensi untuk fitur-X atau fitur-Y .

Saya membuat Keygen dengan mempertimbangkan jenis lisensi ini. Keygen adalah API REST lisensi yang memungkinkan Anda untuk mengelola akun pengguna, lisensi, dan juga melacak penggunaan / asosiasi mesin.

Apa yang akan saya lakukan adalah menyiapkan 2 jenis lisensi ( kebijakan di dalam Keygen) di mana satu adalah kebijakan dasar untuk versi gratis terbatas, dan yang lainnya adalah kebijakan untuk versi berbayar.

Saya tidak yakin apa yang Anda gunakan untuk pembayaran, tetapi mari kita asumsikan Anda menggunakan sesuatu seperti Stripe (cukup standar saat ini) yang menawarkan webhooks . Keygen juga memiliki webhooks (apakah Anda menggunakannya atau tidak, semua ini masih berlaku). Anda dapat mengintegrasikan Keygen untuk berbicara dengan penyedia pembayaran Anda menggunakan kait web dari kedua sisi (pikirkan: customer.created-> buat lisensi dasar untuk pelanggan, license.created-> biaya pelanggan untuk lisensi baru).

Jadi dengan memanfaatkan webhooks, kami dapat mengotomatisasi pembuatan lisensi untuk pelanggan baru. Jadi bagaimana dengan validasi lisensi dalam aplikasi itu sendiri? Ini dapat dilakukan dengan berbagai cara, tetapi cara yang paling populer adalah dengan meminta pelanggan Anda untuk memasukkan kunci lisensi yang panjang ke dalam bidang input yang kemudian dapat divalidasi; Saya pikir ini adalah cara yang mengerikan untuk menangani validasi lisensi di aplikasi Anda.

Kenapa aku berpikir begitu? Pertama-tama, Anda mewajibkan pelanggan Anda untuk memasukkan kunci lisensi yang sangat panjang yang dimaksudkan untuk konsumsi mesin, dan kedua Anda mengharuskan Anda dan pelanggan Anda untuk melacak kunci lisensi yang panjang dan membosankan itu .

Oke, jadi apa alternatifnya? Saya pikir alternatif terbaik adalah melakukan sesuatu yang biasa digunakan oleh pelanggan Anda: memungkinkan mereka membuat akun untuk produk Anda menggunakan email / kata sandi . Anda kemudian dapat mengaitkan semua lisensi dan mesin mereka dengan akun itu. Jadi sekarang alih-alih memasukkan kunci lisensi, mereka dapat masuk menggunakan kredensial mereka.

Apa manfaatnya bagi Anda? Pertama, ini menghilangkan kebutuhan Anda dan pelanggan Anda untuk melacak kunci lisensi, karena semuanya ditangani di belakang layar di dalam akun pengguna mereka dan yang paling penting: Anda sekarang dapat menawarkan pelanggan Anda lisensi dan mesin swalayan pengaktifan! yaitu karena semua lisensi dan mesin mereka terkait dengan akun pengguna mereka, Anda dapat meminta mereka untuk membeli lisensi ketika mereka menjalankan aplikasi Anda pada mesin yang tidak dikenal.

Sekarang ke validasi lisensi : setiap kali pelanggan Anda masuk ke aplikasi Anda dengan email / kata sandi mereka, Anda dapat meminta akun pengguna mereka untuk lisensi yang mereka miliki untuk menentukan apakah mereka dapat menggunakan fitur-X atau fitur-Y . Dan karena aplikasi Anda sekarang melayani sendiri , Anda dapat memungkinkan pelanggan Anda untuk membeli fitur tambahan langsung dari dalam aplikasi Anda!

Jadi kami telah memperkenalkan satu ton otomatisasi ke sistem lisensi kami, kami dapat melisensikan fitur individual (yaitu versi terbatas vs lengkap), kami telah menawarkan UX yang luar biasa bagi pelanggan kami dan kami juga mengurangi salah satu alasan terbesar untuk permintaan dukungan: pemulihan kunci lisensi.

Ngomong-ngomong, ini lama sekali tapi mudah-mudahan ini membantu seseorang!

ezekg
sumber
Tidak dapat membayangkan DLL dilisensikan seperti ini dalam situasi pengembangan perusahaan apa pun. Pikirkan skenario pembuatan dan penerapan otomatis, misalnya. Atau cukup menambahkan langkah ini ke banyak yang biasanya diperlukan untuk menyiapkan mesin pengembang. Bagi saya, kunci lisensi harus dikeluarkan terlebih dahulu, dan tidak didasarkan pada mesin individual, agar praktis
DvS
2

Tidak mungkin untuk mencegah pembajakan perangkat lunak sepenuhnya. Anda dapat mencegah pembajakan biasa dan itulah yang dilakukan oleh semua solusi lisensi.

Lisensi simpul (mesin) terkunci adalah yang terbaik jika Anda ingin mencegah penggunaan kembali kunci lisensi. Saya telah menggunakan Cryptlex selama sekitar satu tahun sekarang untuk perangkat lunak saya. Ini juga memiliki paket gratis , jadi jika Anda tidak berharap terlalu banyak pelanggan, Anda dapat menggunakannya secara gratis.

adnan kamili
sumber
2

Anda dapat menggunakan solusi pihak ketiga gratis untuk menangani ini untuk Anda seperti Quantum-Key.Net Gratis dan menangani pembayaran melalui paypal melalui halaman penjualan web yang dibuatnya untuk Anda, penerbitan kunci melalui email dan kunci penggunaan kunci ke komputer tertentu untuk mencegah pembajakan.

Anda juga harus berhati-hati untuk mengaburkan / mengenkripsi kode Anda atau dapat dengan mudah direkayasa balik menggunakan perangkat lunak seperti De4dot dan .NetReflector. Obfuscator kode gratis yang bagus adalah ConfuserEx yang cepat dan mudah digunakan dan lebih efektif daripada alternatif mahal.

Anda harus menjalankan perangkat lunak yang sudah selesai melalui De4Dot dan .NetReflector untuk merekayasa balik dan melihat apa yang akan dilihat oleh cracker jika mereka melakukan hal yang sama dan untuk memastikan Anda tidak membiarkan kode penting apa pun terbuka atau tidak disembunyikan.

Perangkat lunak Anda masih dapat di-crack, tetapi untuk cracker biasa mungkin cukup untuk menunda dan langkah-langkah sederhana ini juga akan mencegah kode Anda diekstraksi dan digunakan kembali.

https://quantum-key.net

Bagaimana cara menggunakan ConfuserEx?

https://github.com/0xd4d/de4dot

https://www.red-gate.com/dynamic/products/dotnet-development/reflector/download

Damo
sumber