Bir yazılım lisans anahtarı nasıl oluşturulur ve doğrulanır?


236

Şu anda ücretsiz ve çok sınırlı bir sürümde indirilebilecek ve yüklenebilecek bir ürün (C # ile geliştirilmiş) geliştirmeye katılıyorum. Tüm özelliklere erişmek için kullanıcının lisans ücreti ödemesi ve bir anahtar alması gerekir. Bu tuş daha sonra tam sürümün kilidini açmak için uygulamaya girilecektir.

Böyle bir lisans anahtarı kullanmak gibi her zamanki gibi merak ediyorum:

  1. Bu genellikle nasıl çözüldü?
  2. Anahtarı nasıl oluşturabilirim ve uygulama tarafından nasıl doğrulanabilir?
  3. Ayrıca, bir anahtarın İnternet'te yayınlanmasını ve lisansı ödememiş olan başkaları tarafından kullanılmasını da önleyebilirim (temelde "onların" olmayan bir anahtar).

Ayrıca, özellik sürümlerinde yeni anahtarlar için ücret almak mümkün olacak şekilde anahtarı uygulamanın sürümüne de bağlamalıyım.

Bu senaryoda düşünmem gereken başka bir şey var mı?

Yanıtlar:


126

Dikkat: kullanıcıların korsanlık yapmasını engelleyemezsiniz, ancak yalnızca dürüst kullanıcıların doğru şeyi yapmasını kolaylaştırırsınız.

Her kullanıcı için özel bir yapı oluşturmak istemediğinizi varsayarsak, o zaman:

  • Kendinize ürün için gizli bir anahtar oluşturun
  • Kullanıcının adını al
  • Kullanıcı adını ve gizli anahtarı ve karmayı (örneğin) SHA1 ile birleştirin
  • SHA1 karmasını alfasayısal bir dize olarak paketinden çıkarın. Bu, bireysel kullanıcının "Ürün Anahtarı" dır
  • Program içinde aynı karmayı yapın ve ürün anahtarıyla karşılaştırın. Eşitse, tamam.

Ama tekrarlıyorum: bu korsanlığı engellemeyecek


Son zamanlarda bu yaklaşımın kriptografik olarak çok sağlam olmadığını okudum. Ancak bu çözüm zaten zayıftır ( yazılımın gizli anahtarı bir yere dahil etmesi gerektiği için ), bu yüzden bu keşfin çözümü olabildiğince geçersiz kıldığını düşünmüyorum.

Yine de bundan bahsetmem gerektiğini düşündüm; bundan başka bir şey türetmeyi planlıyorsanız, dikkatli olun.


13
program gizli anahtarı içeriyorsa (yukarıdaki adımlarda da belirtildiği gibi), çatlamak önemsiz
Steven A. Lowe

2
daha açık olacak şekilde düzenlendi; temel bir şeyi fazla vurgulayamaz ;-)
Steven A. Lowe

23
Sırrı koda gömmemekten kaçınmak için ürün anahtarını oluşturmak ve kodunu çözmek için asimetrik bir şifreleme yöntemi (RSA gibi) kullanın.
Amir Moghimi

6
Birisi gizli anahtarınızı bulmak için kodunuzu (muhtemelen montaj düzeyinde) hack ettiğinde, muhtemelen aynı zamanda çeklerinizi tamamen atlayabilecek düzeyde olduklarını düşünürdüm. Programın yerel olarak çalıştığı iyi bir bilgisayar korsanından kurtulabilmesi için o kadar güvenli bir kayıt yöntemi olduğunu sanmıyorum. Orijinal yorumun söylediği gibi, gerçekten sadece dosyayı kopyalamaktan bir adım zorlaştıran her şeyle ilgilidir. Bu günlerde birçok oyun kopya korumasından vazgeçti ve oyun içeriğini çevrimiçi olarak ele aldı, bu durumda kod hacker'ın elinden çıktı.
JamieB

1
Lisans anahtarına kısıtlama eklemek yaygın mıdır? Örneğin, zaman sınırlamaları, eşzamanlı kullanıcı sayısı, kurulacak modüller vs.?
Carlo

97

Lisans anahtarları oluşturmanın birçok yolu vardır, ancak bu yollardan çok azı gerçekten güvenlidir. Yazık, çünkü şirketler için lisans anahtarları gerçek nakitle neredeyse aynı değere sahip.

İdeal olarak, lisans anahtarlarınızın aşağıdaki özelliklere sahip olmasını istersiniz:

  1. Birisi ürünlerinizi tamamen tersine çevirse bile (şirket OLACAK, deneyimden söz ediyorum), yalnızca şirketiniz ürünleriniz için lisans anahtarları oluşturabilmelidir. Lisansı kontrol etme konusunda ciddiyseniz, algoritmayı gizlemek veya yazılımınızdaki bir şifreleme anahtarını gizlemek gerçekten söz konusu değildir. Ürününüz başarılı olursa, piyasaya sürüldükten sonraki birkaç gün içinde birisi anahtar üreteci yapacak.

  2. Bir lisans anahtarı yalnızca bir bilgisayarda kullanılabilir olmalıdır (veya en azından bunu çok sıkı bir şekilde kontrol edebilmeniz gerekir)

  3. Bir lisans anahtarı kısa olmalı ve telefona yazması veya dikte etmesi kolay olmalıdır. Her müşterinin teknik desteği aramasını istemezsiniz çünkü anahtarın "l" veya "1" içerip içermediğini anlamıyorlar. Destek departmanınız bunun için size teşekkür eder ve bu alanda daha düşük maliyete sahip olursunuz.

Peki bu zorlukları nasıl çözersiniz?

  1. Cevap basit ama teknik açıdan zor: açık anahtarlı kriptografi kullanan dijital imzalar. Lisans anahtarlarınız aslında şirketinizin özel anahtarıyla imzalanmış bazı yararlı veriler içeren imzalı "belgeler" olmalıdır. İmzalar lisans anahtarının bir parçası olmalıdır. Ürün, lisans anahtarlarını ilgili ortak anahtarla doğrulamalıdır. Bu şekilde, birisi ürününüzün mantığına tam erişime sahip olsa bile, özel anahtarları olmadığı için lisans anahtarları oluşturamazlar. Bir lisans anahtarı şuna benzer: BASE32 (CONCAT (DATA, PRIVATE_KEY_ENCRYPTED (HASH (DATA)))) Buradaki en büyük zorluk, klasik ortak anahtar algoritmalarının büyük imza boyutlarına sahip olmasıdır. RSA512'nin 1024 bit imzası vardır. Lisans anahtarlarınızın yüzlerce karaktere sahip olmasını istemezsiniz. En güçlü yaklaşımlardan biri eliptik eğri kriptografisini kullanmaktır (mevcut patentlerden kaçınmak için dikkatli uygulamalar ile). ECC anahtarları, aynı güç için RSA anahtarlarından 6 kat daha kısadır. Schnorr dijital imza algoritması gibi algoritmaları kullanarak imza boyutlarını daha da azaltabilirsiniz (patentin 2008'de süresi doldu - iyi :))

  2. Bu, ürün etkinleştirmesiyle elde edilebilir (Windows iyi bir örnektir). Temel olarak, geçerli bir lisans anahtarına sahip bir müşteri için, bilgisayarın donanım kimliğini imzalanmış veri olarak gömen imzalı bir mesaj olan bazı "etkinleştirme verileri" oluşturmanız gerekir. Bu genellikle internet üzerinden yapılır, ancak yalnızca BİR KEZ: ürün lisans anahtarını ve bilgisayar donanım kimliğini bir etkinleştirme sunucusuna gönderir ve etkinleştirme sunucusu imzalı iletiyi geri gönderir (bu da kısa ve kolayca dikte edilebilir) telefon). O andan itibaren, ürün başlangıçta lisans anahtarını kontrol etmez, ancak doğrulamak için bilgisayarın aynı olması gereken etkinleştirme verileri (aksi takdirde, VERİ farklı olur ve dijital imza doğrulanmaz).

  3. Sadece "1", "l", "0", "o" gibi gereksiz karakterleri anahtarlarınızdan kaldırın. Lisans anahtarı dizesini karakter gruplarına ayırın.


8
Yazılım ekleme / kaldırma kodunu kontrolün tamamen atlanacağı şekilde düzenleyemezler miydi?
Pacerier

1 numaralı sorunun cevabı esasen bir çevrimiçi aktivasyon / deaktivasyon servisini gerektiriyor mu?
Dan W

2
Bu cevabın diğer karmaşasına ne kadar üstün olduğunu belirtmek isterim.
Erik Aronesty

1
@Pacerier Lisans anahtarlarının yazılım şirketlerini koruduğu birçok şey vardır. Exe'yi değiştirmek bunlardan biri değil.
Erik Aronesty

1
Asimetrik şifreleme özel / genel anahtarlarında bile, yazılımda gönderilen genel anahtarı başka bir genel anahtarla değiştirerek ve sahte lisansı imzalamak için karşılık gelen özel anahtarı kullanarak sahte lisanslar üretmenin hala mümkün olduğunu belirtmek gerekir. Bu nedenle, ortak anahtarları kimliklere bağlayan güvenilir Sertifika Yetkilileri BTW'ye sahibiz ve buna ihtiyacımız var. Bu, atlamak için bir kasnak daha ekleyebilse de, kendi başına # 1 garanti etmez.
Saeb Amini

76

Basit cevap - Kullandığınız şema ne olursa olsun kırılabilir.

Bilgisayar korsanları ne olursa olsun kırılacağı için dürüst müşterileri bilgisayar korsanlarını önlemek için tasarlanmış bir sistemle cezalandırmayın.

E-postalarına veya benzerlerine bağlı basit bir karma kod muhtemelen yeterince iyidir. Donanım tabanlı kimlikler, insanların donanımı yeniden kurmaları veya güncellemeleri gerektiğinde her zaman sorun haline gelir.

Bu konuda iyi bir ipucu: http://discuss.joelonsoftware.com/default.asp?biz.5.82298.34


2
kabul ettiyseniz, ürününüzü satın alan kullanıcıları üzmek istemezsiniz! (dikkat kulak m, elma, vb ...)
Jason

2
MS, Apple, vb. Büyük olduklarından ve başka yerlere ulaşmak zor olan veya insanları zorlamak için kullanabilecekleri büyük bir pazar gölgesine sahip olan temel ürünler sağlayabilirler. Küçük geliştirici yapamaz.
Gemici

1
pub / priv anahtar imzalama düzeni, çatlak yazılım yerine yayıncılar sitesinden indirilen imzalı kodu çalıştırmak isteyen kullanıcılar için yeni geçerli anahtarlar üretmek üzere "kırılamaz". oysa karma / simetrik bir şema geçersiz olanlardan ayırt edilemeyen yeni geçerli lisans anahtarları üretmek için kırılabilir. Büyük farklılık.
Erik Aronesty

Kırık bağlantı ....
stigzler

56

Anahtarı oluştururken, karmayı hesapladığınız dizeye sürümü ve derleme numarasını birleştirmeyi unutmayın. Bu şekilde, serbest bıraktığınız her şeyin kilidini açan tek bir anahtar olmayacak.

Astalavista.box.sk içinde yüzen bazı anahtarlar veya yamalar bulduktan sonra , birinin çatlamak için rahatsız ettiği kadar popüler bir şey yapmayı başardığınızı bileceksiniz. Sevinin!


8
"sürümü birleştirmeyi ve karmayı hesapladığınız dizeye sayı eklemeyi unutmayın" - ancak kullanıcı küçük bir yama sürümüne güncellediğinde anahtarın bozulmasına neden olmaz mı?
thomthom

1
@thomthom Peki bir maksimum sürümü bir anahtarla ilişkilendirmeye ne dersiniz? Versiyon fikri kendisi makuldür ve daha fazla güvenlik ekler
Marvin Thobejane

@MarvinThobejane bir max ver ilişkilendirmek için izin verilen max ver imzalamak ve kod sürümü biraz yinelemek. ancak siglarda> = op'lara izin verilmez.
Erik Aronesty

22

Zaten belirtilenlerin yanı sıra ....

.NET uygulamalarının her türlü kullanımı, ara dil sorunları nedeniyle doğası gereği kesilebilir. .NET kodunun basit bir şekilde sökülmesi, ürününüzü herkese açacaktır. Bu noktada lisans kodunuzu kolayca atlayabilirler.

Artık bir anahtar oluşturmak için donanım değerlerini bile kullanamazsınız. Sanal makineler artık birisinin 'lisanslı' bir makinenin görüntüsünü oluşturmasına ve seçtikleri herhangi bir platformda çalıştırmasına izin veriyor.

Pahalı bir yazılımsa başka çözümler de var. Değilse, sıradan hackerlar için yeterince zor hale getirin. Ve sonunda orada lisanssız kopyaların olacağı gerçeğini kabul edin.

Ürününüz karmaşıksa, doğal destek sorunları sizin için bir miktar koruma oluşturacaktır.


9
Sanal Makineler nedeniyle Donanım değerlerindeki zayıflığı önlemek için +1.
Rubens Mariuzzo

3
PE imzalama için .NET ve Authenticode için güçlü adlandırma budur. Birisi kitaplığınızı kodunu çözdüyse, değiştirdiyse ve yeniden oluşturduysa imzalanmaz ve uygulama çalışmaz. .NET sanal makinesi buna izin vermiyor.
Stephen Tunney

2
İmzalama, çalıştıracağınız programın kaynağını doğrulamak içindir. Kullanıcı değiştirildiğini ve kırıldığını bildiği için orijini umursamıyorsa, kraker imzayı kaldırır, hatta kendi imzasıyla imzalar. İmzalama, güvenilir montajların güvenilir olmayan montajlarla karıştırılmasını durdurur.
jesusduarte

bir mobil uygulama pahalı yazılım için jüri donanım donanım dongle olarak kullanılabilir .... sadece uygulamayı kullanarak ödeme ve uygulamanın güvenli öğesinde bir imza anahtarı gömmek. masaüstü + uygulamasını kullanarak etkinleştirebilirsiniz ... diğer masaüstünü devre dışı bırakabilirsiniz. uygulamada ve / veya çevrimiçi homomorfik hesaplama hizmetlerinde bazı kritik bölüm kodu alanlarının konumlandırılması, önemsiz ayrışmayı önlemeye yardımcı olabilir.
Erik Aronesty

12

Lisans anahtarı üretimi için kullandığımız C # / .NET motoru artık açık kaynak olarak korunuyor:

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

Bir "Kısmi Anahtar Doğrulaması" sistemine dayanır, bu da sadece anahtarı oluşturmak için kullandığınız anahtarın bir alt kümesinin dağıtılabilecek şekilde derlenmesi gerektiği anlamına gelir. Anahtarları kendiniz oluşturursunuz, böylece lisans uygulaması yazılımınıza özgüdür.

Yukarıda belirtildiği gibi, kodunuzun kodu çözülebilirse, çoğu lisans sistemini atlatmak nispeten kolaydır.


Bu ürünü kullanmak için bir eğitim yapmak ister misiniz? Onların wiki biraz eksik buldum.
Anthony Ruffino

Proje, yardımcı olursa (Git bağlantısına göre düzenlenmiş yanıt) GitHub'da açık kaynaklı olarak sağlanmıştır.
gb2d

10

Cryptolens'ın arkasındaki geliştiricilerden biriyim yazılım lisanslama platformunun ve 14 yaşından beri lisanslama sistemleri üzerinde çalışıyorum. Bu cevapta, yıllar boyunca edinilen deneyime dayalı bazı ipuçları ekledim.

Bunu çözmenin en iyi yolu, uygulamanın her örneğinin bir lisans anahtarını doğrulamak için arayacağı bir lisans anahtarı sunucusu kurmaktır.

Lisans anahtarı sunucusunun faydaları

Lisans anahtar sunucusunun avantajları:

  1. anında geçerli olacak şekilde bir lisans anahtarını her zaman güncelleyebilir veya engelleyebilirsiniz.
  2. her lisans anahtarı belirli sayıda makineye kilitlenebilir (bu, kullanıcıların lisans anahtarını başkalarının kullanması için çevrimiçi yayınlamasını önlemeye yardımcı olur).

hususlar

Çevrimiçi lisansları doğrulamak, uygulamanın her örneği üzerinde daha fazla kontrol sahibi olmanıza rağmen, internet bağlantısı her zaman mevcut değildir (özellikle daha büyük işletmeleri hedefliyorsanız), bu nedenle lisans anahtarı doğrulamasını gerçekleştirmenin başka bir yoluna ihtiyacımız var.

Çözüm, RSA veya ECC gibi ortak anahtarlı bir şifreleme sistemi kullanarak sunucudan gelen lisans anahtarı yanıtını her zaman imzalamaktır (gömülü sistemlerde çalışmayı planlıyorsanız muhtemelen daha iyi). Başvurunuzda yalnızca ortak anahtar bulunmalıdır lisans anahtarı yanıtını doğrulamak için .

İnternet bağlantısı olmaması durumunda, bunun yerine önceki lisans anahtarı yanıtını kullanabilirsiniz. Hem tarihi hem de makine tanımlayıcısını yanıtta sakladığınızdan ve çok eski olmadığından (ör. Kullanıcıların en fazla 30 günde çevrimdışı olmalarına izin verdiğiniz gibi) ve lisans anahtarı yanıtının doğru cihaza ait olduğundan emin olun.

Not bu hala yapılması gereken (internete bağlı olsa bile, her zaman bu sunucu ayrıldığından beri o değiştirilmedi sağlamak amacıyla,), lisans anahtarı yanıtının sertifikası gerekmesine rağmen hiç API lisans anahtarı sunucusu https kullanır)

Gizli algoritmaları koruma

Çoğu .NET uygulaması oldukça kolay bir şekilde tersine mühendislik yapılabilir (hem IL kodu almak için Microsoft tarafından sağlanan bir diassembler vardır ve bazı ticari ürünler bile kaynak kodunu örneğin C # 'de alabilir). Tabii ki, kodu her zaman gizleyebilirsiniz, ancak asla% 100 güvenli değildir.

Çoğu durumda, herhangi bir yazılım lisanslama çözümünün amacı, dürüst insanların dürüst olmasına yardımcı olmaktır (yani, ödemeye istekli dürüst kullanıcıların, bir deneme süresi sona erdikten sonra ödeme yapmayı unutmayın).

Bununla birlikte, hiçbir şekilde halka sızmak istemediğiniz bazı kodlarınız olabilir (örneğin, hisse senedi fiyatlarını tahmin etmek için bir algoritma, vb.). Bu durumda, gitmenin tek yolu , yöntemin her yürütülmesi gerektiğinde uygulamanızın arayacağı bir API uç noktası oluşturmaktır . İnternet bağlantısı gerektirir, ancak gizli kodunuzun asla istemci makine tarafından yürütülmemesini sağlar.

uygulama

Her şeyi kendiniz uygulamak istemiyorsanız, ben bakmak için öneriyoruz Bu eğitimde (parçası Cryptolens )


Kaydedilen lisans anahtarının çok eski olmamasını kısıtlamakla ilgili bir soru: PC internete bağlı olmayabilir, aynı tarihte kalmak için tarih ve saatleri her zaman geri değiştirilebilir mi?
Amir Mehdi Nassiri

Kullanıcılar, Windows'ta bir geri döngü ana bilgisayarı tanımlayarak çevrimiçi lisans sunucusunu atlayamıyor mu? Birçok uygulamanın bu şekilde korsan olduğunu gördüm, Resharper ve Matlab hatırlayabildiğim uygulamalar.
Amir Mehdi Nassiri

1
@AmirMahdiNassiri Soru 1 için: Bilgisayar kalıcı olarak çevrimdışıysa, zaman için güvenilir bir kaynak olarak gerçek zamanlı bir saat (RTC) dongle'ı kullanabilirsiniz. Soru 2 için: Yanıt, satıcının özel anahtarıyla imzalandığı için (ve uygulamanın içindeki ortak anahtarla doğrulandığı için), bir rakibin dosyayı yazarken özel anahtarı bilmeden dosyayı yeniden imzalaması gerekir. 2048bit RSA anahtarlarıyla mümkün değil.
Artem

7

Geçmişte Crypkey kullandım . Mevcut birçok kişiden biri.

Yazılımı yalnızca herhangi bir lisanslama düzeniyle bir noktaya kadar koruyabilirsiniz.


6

Ne kadar ayrıntılı almak istediğini bilmiyorum

ama .net sabit sürücü seri numarasına erişebilirsiniz inanıyorum.

Programın bunu size göndermesini sağlayabilirsiniz ve bir şey (kullanıcı adı ve nic'in mac adresi gibi)

buna dayalı bir kod hesaplar ve anahtarı geri e-postayla gönderirsiniz.

anahtar olduktan sonra onları anahtarlama makinelerinden koruyacaklardır.


4
Ve onların hayal kırıklığına yol açarak diğer temalar arasında ölü bir HD'yi değiştirmelerini engelleyin. Maalesef kolay bir cevap yok, temel lisanslama mekaniği ile güveni dengelemeniz gerekiyor.
guletçi

Yıllarca hd'den seri numarasını kullanan bir ürünle yazılım mühendisi olarak çalıştı, nasıl güncelleyeceğini bilenler için tamamen güvensizdi.
oden

Bu sayıyı başka şeylerle (mac adresi, FQDN) kullanmak için hepsini bir karma olarak atmak zorunda kalıyordum. Mesele, tüm bu verileri taklit etmeyi biraz daha zor hale getirmektir, enginer yazılımını ilk etapta tersine çevirmek ve her zaman bir seçenek olduğundan kontrolü kaldırmaktır.
Çarpışma893

4

İstediğiniz her şeyi yapmanın tek yolu, bir internet erişimi ve bir sunucu ile doğrulama istemektir. Uygulamanın anahtarla sunucuda oturum açması ve ardından IP adresi gibi oturum ayrıntılarını saklamanız gerekir. Bu, anahtarın birkaç farklı makinede kullanılmasını önleyecektir. Bu genellikle uygulama kullanıcıları arasında çok popüler değildir ve bu çok pahalı ve karmaşık bir uygulama değilse buna değmez.

Uygulama için bir lisans anahtarına sahip olabilirsiniz ve daha sonra anahtarın iyi olup olmadığını istemci tarafında kontrol edebilirsiniz, ancak bu anahtarı diğer kullanıcılara dağıtmak kolaydır ve bir decompiler ile yeni anahtarlar oluşturulabilir.


5
İnternet tabanlı bir lisans programı kullanan bir şirkette çalıştım. Program her başladığında doğrulamak için çevrimiçi oldu, şirketin lisans çözümü için korsanlıktan kaybedeceklerinden daha fazla $$ ve geliştiriciler için harcadıklarını düşünüyorum (niş bir ürün).
Jason

3
dahası, teknik destek maliyetleri çok büyüktü. çoğu, bir kullanıcının yasal olarak başka bir bilgisayarı yazılımı denemek ve kullanmak için kullanması gerekir, ancak karma farklıydı ve bu da büyük miktarda teknik desteğe yol açtı. kısacası, geminin söylediği - dürüst kullanıcıları cezalandırmayın.
Jason

1
Görünüşe göre şirketiniz her seferinde başlangıçta doğrulama gerektirerek biraz fazla hevesliydi.
jugg1es

@ Jason, Peki, ürünün fiyatını yükseltmeliler.
Pacerier

1
@ Pacer: Yanlış cevap.
Yörüngedeki Hafiflik Yarışları

4

Şirketimin yazılımında (C # .net), sunucunun veritabanında depolanan bir lisansa başvuran bir lisans anahtarı gerektiren, Internet tabanlı bir kerelik etkinleştirme uyguladım. Yazılım, sunucuya anahtarla vurur ve daha sonra istemci bilgisayarda bazı değişkenlerden (CPUID ve sık değişmeyen diğer şeylerin birleşimi) oluşturulan bir RSA anahtarı kullanılarak yerel olarak şifrelenen ve daha sonra depolanan lisans bilgileri verilir. kayıt defteri.

Bazı sunucu tarafı kodlama gerektirir, ancak bizim için gerçekten iyi çalıştı ve tarayıcı tabanlı yazılımlara genişlettiğimizde aynı sistemi kullanabildim. Ayrıca, satış personelinize yazılımın kim, nerede ve ne zaman kullanıldığı hakkında harika bilgiler verir. Yalnızca yerel olarak işlenen herhangi bir lisans sistemi, özellikle .NET'deki yansımayla , sömürüye tamamen açıktır . Ancak, herkesin söylediği gibi, hiçbir sistem tamamen güvenli değildir.

Bence, web tabanlı lisanslama kullanmıyorsanız, yazılımı korumanın gerçek bir anlamı yoktur. DRM'nin neden olabileceği baş ağrısı ile, gerçekten acı çekmesi için ödeme yapan kullanıcılar için adil değildir.


1
Ancak web lisanslama ile ilgili temel sorun, lisanslama hizmetinin DDoS saldırıları için birincil hedef haline gelmesidir.
afk5min

4
Bu, bir web sitesine sahip olmanın bir anlamı olmadığını çünkü DDoS saldırılarına karşı savunmasız olduğunu
söylemek gibi

@ jugg1es Yorumunun hiçbir yerinde "anlamı yok" demedi. Sadece bunun göz önünde bulundurulması gereken bir güvenlik açığı olduğuna dikkat çekti.
Dan Bechard

Ve çekler hala istemcide kaldırılabilir. Çek yok, web tabanlı lisans yok ...
azarai

1
"Gerekli bilgiler" içeren gerçek uygulama kodunu mu kastediyorsunuz? Uygulamayı çalıştırmak için gerekli olan kod? Aksi takdirde yine de olanlar kodunda isLicensed kontrol yöntemleri çağrı sonuçlanacağını düşünürdüm.
azarai

4

Kaynak kodunuza lisans oluşturmak için gerekli temel bilgileri eklemeniz gerekmediğinden, burada yalnızca ortak anahtar şifreleme tabanlı lisanslama sisteminin doğru yaklaşım olduğuna inanıyorum.

Geçmişte, Treek'in Lisans Kütüphanesini birçok kez kullandım, çünkü bu gereksinimleri yerine getiriyor ve gerçekten iyi bir fiyat sunuyor. Son kullanıcılar ve kendisi için aynı lisans korumasını kullanıyor ve şimdiye kadar kimse bunu kırmadı. Ayrıca, korsanlık ve çatlamaları önlemek için web sitesinde iyi ipuçları bulabilirsiniz.


Ortak anahtar şifrelemesi bir çevrimiçi etkinleştirme hizmetinin kullanılmasını gerektirir mi? Yani, kaynak kodunda değilse (çalıştırılabilir de demek istediğinizi varsayalım), başka nerede olabilir?
Dan W

Hayır, çevrimiçi etkinleştirme hizmetini kullanmak zorunda değilsiniz. Tamamen çevrimdışı olarak lisans dosyaları oluşturabilirsiniz.
panpernicek

Anahtar, kod oluşturmak için kullanılamayan, yalnızca kod için genel anahtar yerleştirmenizdir. Sadece doğrulaması için.
panpernicek

3

Sözü birkaç kişi gibi ben büyük kulüpler rakip lisans sanayi tanınıyor varsayılan-şey tarafından müşterilere düşman olma. Bu yüzden , iyi bir müşteri UX'i de sunan probleminiz için iyi bir çözüm geliştireceğim .

Başlamak için, yazılımınızı müşterilerin ek özellikler için "yeni sürüme geçirmeye" dönüştürmek amacıyla kullandığınız "sınırlı" bir sürümünüz olduğunu belirtmiştiniz. Yani aradığınız ürününüz için özellik lisanslarıdır , örneğin bir müşteri X özelliği veya X özelliği için lisans satın alabilir .

Ben inşa Keygen akılda lisans bu tip. Keygen, kullanıcı hesaplarını, lisansları yönetmenizi ve makine kullanımını / ilişkilendirmelerini izlemenizi sağlayan bir lisanslama REST API'sidir.

Yapacağım, biri sınırlı ücretsiz sürüm için temel bir politika, diğeri ise ücretli sürüm için bir politika olan 2 lisans türü ( Keygen içinde bir politika ) kurmaktır.

Ödemeler için ne kullandığınızdan emin değilim, ancak webhooks sunan Stripe (günümüzde oldukça standart) bir şey kullandığınızı varsayalım . Keygen'in ayrıca web kancaları da vardır (bunu kullansanız da kullanmasanız da, tüm bunlar hala geçerlidir). Keygen'i her iki taraftan webhooks kullanarak ödeme sağlayıcınızla konuşacak şekilde entegre edebilirsiniz (düşünün: customer.created-> müşteri için temel lisans oluşturun, license.created-> yeni lisans için müşteriden ücret alın).

Böylece, web kancalarını kullanarak yeni müşteriler için lisans oluşturmayı otomatikleştirebiliriz. Peki uygulamanın kendisinde lisans doğrulaması ne olacak? Bu çeşitli yollarla yapılabilir, ancak en popüler yol, müşterinizin daha sonra doğrulayabileceğiniz bir giriş alanına uzun bir lisans anahtarı girmesini zorunlu kılmaktır; Bunun , uygulamanızdaki lisans doğrulamasını ele almanın korkunç bir yolu olduğunu düşünüyorum .

Neden böyle düşünüyorum? Öncelikle, müşterinizin makine tüketimi için tasarlanmış sıkıcı bir şekilde uzun bir lisans anahtarı girmesini ve ikinci olarak sizden ve müşterinizden söz konusu sıkıcı derecede uzun bir lisans anahtarını takip etmenizi istersiniz .

Tamam, alternatif nedir? Bence en iyi alternatif, tüm müşterilerinizin alışkın olduğu bir şey yapmaktır : bir e-posta / şifre kullanarak ürününüz için bir hesap oluşturmalarına izin vermek . Daha sonra tüm lisanslarını ve makinelerini bu hesapla ilişkilendirebilirsiniz. Şimdi bir lisans anahtarı girmek yerine, kimlik bilgilerini kullanarak giriş yapabilirler.

Bu size ne avantaj sağlıyor? Öncelikle, tüm kullanıcı hesaplarının perde arkasında ele alındığı ve en önemlisi: Artık müşterilerinize self servis lisans ve makine sunabilirsiniz. hareketlilik! yani, tüm lisansları ve makineleri kullanıcı hesaplarıyla ilişkilendirildiğinden, uygulamanızı tanınmayan bir makinede başlattıklarında lisans satın almalarını isteyebilirsiniz.

Şimdi lisans doğrulamaya başlayın: Müşteriniz uygulamanızda e-posta / şifresi ile her oturum açtığında, X -özelliği veya Y-özelliğini kullanıp kullanamayacaklarını belirlemek için kullanıcı hesaplarında sahip oldukları lisansları sorgulayabilirsiniz . Uygulamanız artık kendi kendine hizmet verdiği için, müşterilerinizin doğrudan uygulamanızdan ek özellikler satın almalarına izin verebilirsiniz!

Bu yüzden lisanslama sistemimize bir ton otomasyon getirdik, bireysel özellikleri lisanslayabiliriz (yani sınırlı ve tam sürüm), müşterilerimiz için harika bir UX sunduk ve en büyük nedenlerden birini de hafiflettik. destek istekleri için: lisans anahtarı kurtarma.

Her neyse, bu uzun sürdü ama umarım birine yardım eder!


Herhangi bir kurumsal geliştirme durumunda böyle bir lisanslı bir DLL hayal edilemez. Örneğin, otomatik derleme ve dağıtım senaryolarını düşünün. Veya bu adımı bir geliştirici makinesi kurmak için genellikle gerekli olan pek çok kişiye ekleyin. Benim için, lisans anahtarlarının pratik olması için ayrı ayrı makinelere dayanmadan önceden düzenlenmiş olması gerekir
DvS

2

Yazılım korsanlığını tamamen önlemek mümkün değildir. Sıradan korsanlığı önleyebilirsiniz ve tüm lisanslama çözümleri bunu yapar.

Lisans anahtarlarının yeniden kullanılmasını önlemek istiyorsanız, düğüm (makine) kilitli lisanslama en iyisidir. Yazılımım için yaklaşık bir yıldır Cryptlex kullanıyorum . Ayrıca ücretsiz bir planı vardır , bu yüzden çok fazla müşteri beklemiyorsanız ücretsiz olarak kullanabilirsiniz.


2

Quantum-Key.Net gibi bunu sizin için halletmek için ücretsiz bir üçüncü taraf çözümü kullanabilirsiniz. Ücretsizdir ve sizin için oluşturduğu bir web satış sayfası üzerinden paypal üzerinden ödeme yapar, e-posta yoluyla anahtar yayınlar ve belirli bir bilgisayara anahtar kullanımını kilitler korsanlığı önlemek.

Ayrıca kodunuzu gizlemeye / şifrelemeye dikkat etmelisiniz veya De4dot ve .NetReflector gibi bir yazılım kullanarak kolayca tersine mühendislik yapılabilir. İyi bir ücretsiz kod obfuscator, hızlı ve kullanımı kolay ve pahalı alternatiflerden daha etkili olan ConfuserEx'tir.

Bitmiş yazılımınızı ters mühendislik için De4Dot ve .NetReflector aracılığıyla çalıştırmalı ve bir krakerin aynı şeyi yaptıklarında ne göreceğini ve önemli bir kodu açık veya gizli bırakmadığınızdan emin olmalısınız.

Yazılımınız hala kırılabilir olacak, ancak geçici kraker için onları ertelemek yeterli olabilir ve bu basit adımlar ayrıca kodunuzun çıkarılmasını ve yeniden kullanılmasını önler.

https://quantum-key.net

ConfuserEx nasıl kullanılır?

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

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.