Merhabalar, c# Lisanslama Sistemi – C# Program Lisanslama dersi ile C# eğitim setime devam ediyorum. Bu dersimizde her proje geliştiren yazılımcıların merak ettiği ve türlü türlü sıkıntılar çektiği bir konudur. Elbette bende bu konuda çok sıkıntılar çektim. Birçok lisanslama yöntemi denedim ve neredeyse denediğim kadar başarısız oldum
Elbette bu başarısızlık lisanların birileri tarafından kırılması değil. Dünyadaki ya da en azından Türkiye’deki bilgisayar hatta daha da doğrusu cihaz çeşitliliğini düşündüğümüzde yazılımcıların aklına gelen ilk birkaç lisanslama yöntemi başarısızlıkla sonuçlanıyor. Bu yazının konusu da benim yaşadığım başarısızlıklar ve sonunda başarıya nasıl ulaştığımdır. Bu yazıda C# Program Lisanslama hakkında bir kaç c# lisanslama örneği yer almaktadır.
C# Lisanslama Sistemi – C# Program Lisanslama
C# Lisanslama Sistemi
Yazılımla ilgilenenlerin geliştirdikleri bir c# uygulama lisanslama istemesi çok mantıklı bir karardır. Belki yıllarca emek verdikleri projelerini belirli bir ücret karşılığında sattıkları için elbette ücretini ödemeyenler tarafından kullanılmasını istemeyeceklerdir.
Bunu kim ister ki?
Şu anda piyasa işlerimizi kolaylaştıran neredeyse tüm uygulamaların belirli bir ücreti vardır. Belki yıllık ödeme modeli belki de tek seferlik ödeme yolu ile satışa sunulurlar. Bazı uygulamaların bir kısım özellikleri ücretsiz sunulurken en can alıcı özelliklerinin ücretli satılması gibi birçok ücret modeli vardır.
İnternette araştırmalar yaparsanız “Programımız asla kırılamaz” diye iddia edilen tüm programların en geç bir hafta içerisinde kırıldığını görebilirsiniz. Yani demek istediğim kırılmak istenirse kırılmayacak bir program yoktur diye cesur bir iddia da bulunabiliriz bence.
Şimdi asıl konumuza gelelim ve bir projenin kırılmasına değil nasıl lisanslanacağı hakkında konuşmaya başlayalım.
Aşağıda bahsedeceğim konular lisanslama ve proje her açıldığında lisansın kontrol edilmesi ve lisans doğru ile çalışmaya devam etmesi konuludur. Lisanslamanın yöntemini ve o yöntemin sorunlarını açıklayacağım. En sorunsuz yöntemi yazının sonunda vereceğim.
Gelen yorumlardan sonra bu açıklamayı ekleme gereği duydum. :D
Bu yazı size en doğru lisanslama yöntemini vermez. Kaldı ki öyle bir yöntem zaten yok. Kırılamayacak hiçbir yazılımın olmadığını düşünürsek temelde lisanslama yöntemlerinin de pek bir esprisi yok. Biz sadece uygulamalarımızın elimizden geldiğince kırılmaması ve kolayca kopyalanmaması için çabalıyoruz…
Bütün yazılarımın temelinde yatan şey kendi deneyimlerimdir. Bu, bu yazı da değişmiyor. Daha önce deneyip fayda görmediğim ve deneyip fayda gördüğüm yönelimlerden bahsediyorum. Bahsediyorum ki sizler benim gibi gereksiz belki de saçma yöntemleri deneyip vakit kaybetmeyin.
Bazı konular vardır size sunulmuş olanı aynen kullanırsınız. Bazı konular da vardır ki size fikir vermesi için yazılmıştır. Bu yazı da fikir verme amacı taşımaktadır. Sizin geliştirdiğiniz yazılımı bilemeyeceğim gibi lisanslama yöntemi hakkında da fikir vermem kesinlikle mümkün değildir. Ben yaptıklarımı yazdım ki siz yapmanız ya da yapmamanız gerekenleri anlayın diye…
Umarım bu açıklamam faydalı olmuştur.
Bilgisayar Parça Bilgileri İle Uygulama Lisanslama Örneği
Yazılımcıların genellikle aklına ilk gelen yöntem budur. Bilgisayardaki HDD, İşlemci gibi parçaların ID numaralarını alarak lisanslama girişiminde bulunurlar. Söylemeliyim ki bunu bende birçok projemde uygulamıştım.
Hatta kırılmasının (kendimce) imkânsız hale gelmesi için HDD, İşlemci, MAC Adresi ile birlikte geliştirdiğim uygulamanın satıldığı tarihinin üzerinde çeşitli matematiksel işlemler yaparak ve ek olarak kafamdan sıktığım birkaç harf öbeği (Örn ASDKF ) ile harmanlamıştım.
Projelerimde ilk 6 ay boyunca bir sorun çıkmamıştı. Sonradan sorunlar yaşanmaya başladı. Neden sorun çıkıyor diye yaptığım araştırmalar sonucunda sorunların neden çıktığını çözdüm.
Sorun 1:
Bilgisayar Parçalarının Değişmesi: ID’si alınan bilgisayarların parçaları değiştiğinde doğal olarak ID’si değişiyor. Aynı marka ve model parça alınsa bile ID’ler asla aynı olmuyor.
Sorun 2:
HDD ID Sorunu: Bilgisayara yeni bir HDD takılması. Bilgisayarda HDD listesi alınmak istendiğinde bir döngü ile mevcut HDD listesi alınarak ID numarası elde edilir. Yeni takılan HDD bu alınan listede ilk sırada geliyor olması lisans çözümlemesinde sorun çıkartıyor. Çünkü Lisanstaki HDD ID’si eski HDD’nin ID’si olduğundan dolayı ve yeni takılan HDD’nin ilk sırada dönmesi sebebi ile alınan HDD ID’si lisanstaki ID ile uyuşmuyor.
Sorun 3:
İşlemci ID Sorunu: Biliyorsunuz işlemciler artık iki çekirdek, dört çekirdek gibi farklı çekirdeklere sahip olarak üretiliyor. Tahmin edersiniz ki her çekirdeğin ID’si de farklı oluyor. Lisanlama anında uygulamanın çalıştığı çekirdeğin ID’si alındığından, uygulama başka bir çekirdekte çalıştırılmaya çalışıldığında alından ID farklı olduğundan lisans doğrulanamıyor.
Sorun 4:
Mac Adresinin Değişmesi: Ben lisedeyken, öğretmenlerimiz bize ethernet kartlarının MAC adreslerinin asla değişmeyeceğini söylerdi. Tabi bunun daha sonra yanlış olduğunu anladım. Özellikle MAC adresi değiştiren uygulamaların yanı bazı uygulamalarda MAC adreslerini değiştirebiliyor. Hatta kendi kendine değişen MAC adresine bile şahit oldum. Nasıl olduğunu anlamadığım bir şekilde bir müşterimin MAC adresi değişmişti.
Bu sorunlar sıklıkla karşılaşacağınız sorunlar arasındadır. Bu sebeple bu yöntem geçersizdir. Belki yıllarca bu sorunlarla karşılaşmadınız ancak gelecekte karşılaşmayacağınız anlamına gelmez.
Buna ek olarak müşterini bilgisayarının işlemci, HDD ve Ethernet kartını çeşitli sebepler yüzünden değiştirmek zorunda kalabilir. Müşterilerinizin tekrar tekrar lisans sorunu ile uğraşmayı şahsen hiç istemem. Bir kere lisans vereyim olsun bitsin. Tabi bazı yazılımcıların bu durum hoşuna gidebilir. Her lisanslama da ücret alıyorsa ne kadar da tatlı bir sorun olur değil mi? Bu yöntemi asla ve asla tasvip etmiyorum. Sürekli sürekli müşterilerle yüzgöz olmaya gerek yok bence.
Regedit Kullanarak Uygulama Lisanslama Örneği
Burası başlı başına bir sorun zaten. En basit olarak bilgisayarın formatlanması veya Regeditten anlamayan kişilerin kurcalamaları yüzünden lisans uçabilir. Bu kısmı fazla açıklamaya gerek yok. Düşünmeyin bile derim ben. Uğraşıyorsanız yol yakınken vazgeçin. Zararın neresinden dönerseniz kardır.
İnternet Üzerinden Lisanslama Örneği
Bu konu üzerine de çok konuşmaya gerek yoktur. Her seferinde internetten lisans kontrol ettirmek sıkıntıdır. Uygulamanızın türüne göre, kurulan bilgisayarda internet olmayabilir. Bu da sorun demektir. İnternetten kontrol ettirmekte bir çözüm olmuyor maalesef.
Uygulamanın kurulduğu bilgisayarda internet olsa bile, internetin gittiği durumlarda düşülmelidir. Müşteri o anda internet olmayan bir konumda olabilir, internet hızı çok düşük olabilir, telefonundaki interneti kullanmak istese de telefonu çekmiyor olabilir, faturasını ödememiş olabilir, taşınması dolayısı ile interneti olmayabilir, yakın çevresinde alt yapı çalışması olabilir vs. vs. sebepleri düşünülmelidir. Neredeyse her tür uygulamanın muadilinin olduğunu düşünürsek müşterinin sizi bırakmasına neden olabilirsiniz.
Şimdi gelelim (şahsen) doğru yönteme…
Doğru Lisanslama Sistemi Örneği
C# uygulama lisans deyince aklınıza ASDFG-GHJKL-12345 şeklinde bir format gelmesine gerek yok. Yani illa böyle lisans kod formatı yapmak zorunda değilsiniz.
Lisans kodu üretirken bilgisayar üzerindeki bir parçanın ya da yazılımın ID gibi değerlerini kullanmayın. Bunların hepsi değişebilir. En basitinden adam yeni sürüm işletim sistemli yeni bilgisayar alabilir.
Lisans kodunu oluşturacak verileri maddeler haline vermek istiyorum. Maddelerden sonra bu lisans kodunu nasıl kullanacağımızı da anlatacağım. İşte şahsen en doğru C# lisanslama sistemi
- Yeni lisanslama modellerini dikkate aldığımızda kullanıcı sayısının da ek ücrete tabi olduğunu söylemem gerekir. Programın ücretinin yanı sıra programı kullanacak kullanıcı başı da ücret alınır. Bu düşünüldüğünde lisan içerisinde yer alması gereken ilk değeri elde ediyoruz. Lisan kodunuzun içerisinde programı aynı anda kullanabilecek kullanıcı sayısını ekleyebiliriz.
- Müşteriye programı sattığınız tarihi ve verilen lisansın süresini ekleyebilirsiniz. Sonuçta yeni lisans modelinde programın bir kere satılması değil, satıldıktan sonra da yıllık kullanım ücreti talep etmek vardır.
- Örneğin program normalde 10.000 TL dir. Bu fiyatı 3500 TL’ye çekerler ilk satış için. Satış yapıldıktan sonra yıllık olarak da 1.000 TL kullanım ve destek ücreti isterler. Bu durumda lisans koduna bitiş tarihinin lisans içerisinde yer alması normal olarak düşünülebilir.
- Uygulamanız birden fazla modül içeriyorsa, yani yukarıda bahsettiğim gibi basit özelliklerin ücretsiz, birkaç farklı özelliğin ücretli ve daha fazla özelliğin daha çok ücretli olması gibi durumu varsa, lisans kodunuza uygulamanın satış türü hakkında bilgi ekleyebilirsiniz. Örneğin Free, Semi-Pro, Pro gibi…
- Uygulamanız için daha farklı bir kavram var ise o kavramı temsil edecek bir ifadeyi de lisans kodunuza ekleyebilirsiniz. Tabi ki bunda bir sınır yok. İstediğiniz kadar bilgiyi aralarında bir ayraç koyarak uç uça ekleyin gitsin.
Evet, lisans kodu nasıl üretilir? C# süreli lisans nasıl verilir? Sorusuna cevap verdik. Zaten anlamışsınızdır ama şimdi bu lisans kodunu nasıl kullanacağımıza geçelim.
C# Lisanslama Sistemi İnceleyelim
Yukarıdaki lisanslama sistemine göre üretilen lisans kodu takribi şöyle bir görüntüsü olması gerekiyor.
10-13.06.2021-PRO-INTERNETLI
10-13.06.2099-FREE-INTERNETSIZ
Şimdi lisans kodlarını yorumlayalım.
Programımızı aynı anda 10 kişi kullanabilir. Lisans süresi 13.06.2021 tarihinde sona erecek. Program PRO sürümü olarak satılmış. Program sadece internet üzerinden çalışabilir.
Programımızı aynı anda 10 kişi kullanabilir. Lisans süresi belirtilememiş. Program FREE sürümü olarak satılmış. Program sadece internet üzerinden çalışamaz.
Elbette lisans kodlarını böyle açık açık saklamayacağız. Yoksa bir anlamı kalmaz. Programı kullanan kişilerin bu verilerin ne anlama geldiğini anlaması demek istediği gibi hükmetmesi demek olur.
Bu noktada işin içine bir şifreleme yöntemi giriyor. Bu şifreleme konusunu ister AES, HASH vs. hazır algoritmaları kullanın isterseniz kafanızda bir şifreleme yöntemi oluşturun.
Mesela karakterlerin ASCII sayısal tablosundaki numarasını alıp beş ile çarpıp art beş ekleme gibi bir formül geliştirebilirsiniz. Bilindik algoritmaları kullanın ve ya kendi formülünüzü üretin diye bir şey diyemem. Canınız hangisini istiyorsa onu kullanın.
Ama şunu söylemeliyim ki kendi kafanızda ürettiğiniz şifreleme formülleri mesela bir AES kadar zor olmayabilir. Diğer yandan AES gibi diğer şifreleme yöntemleri de işini bilen biri tarafından da çözümlenebilir. Bir diğer taraftan birileri neden sizin uygulamanızı kırmak için uğraşsın gibi gibi sorularda vardır. Elbette hangi yöntemi kullanacağınız sizin bileceğiniz bir iş.
Ben uygulamalarımda 1024 bitlik RSA Şifreleme yöntemi kullanıyorum. Çözülmesi için yıllar gereken zorlukta bir şifreleme yöntemidir. Sitemde RSA şifreleme hakkında da ders yer almaktadır. Bağlantıdan ulaşabilirsiniz.
C# Lisanslama Sistemi – C# Program Lisanslama dersimde bu kadardı arkadaşlar diğer derslerimizde görüşmek üzere…
Beni takip eden arkadaşlar fark etmiştir. Sitemin tasarımını sonunda değiştirebildim. Bu tasarım eski tasarıma göre muazzam bir tema. Umarım bu temayı beğenmişsinizdir. :)
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız. Derslerime özel olarak hazırladığım Github Projeme bu bağlantıdan ulaşabilirsiniz…
Sağlıcakla ve takipte kalın.
Yorumunuz için çok teşekkürler.
Bu yazının amacı lisanslama yöntemi vermek değil aksine lisanslama yöntemleri hakkında fikir vermektir.
Kırılamayacak hiçbir yazılımın olmadığını düşünürsek, bir açından nasıl bir lisanslama yöntemi kullandığımızın bir anlamı kalmıyor. :D Bu yazıda, benim daha önce kullandığım ve kullandıktan sonra bir fayda görmediğim ve kullandıktan sonra fayda gördüğüm yöntemlerden bahsettim. Bu yazının amacı da projelerinde lisanslama yapmak isteyenlere fikir vermesi amacı güdüyor. Denediğim yöntemleri ve sonuçlarından bahsediyorum ki bir fayda göremeyeceğiniz yöntemleri deneyerek vakit kaybetmeyin.
Benim geliştirdiğim projeler genellikle müşteri odaklı olduklarından dolayı başkalarının çalması gibi bir korkum yok ve bu sayede profesyonel lisanslama çalışması gerektirmiyor. Bu sayede bu yazıda bahsettiğim yöntem benim işime yarıyor.
Tekrar diyorum, bu yazının amacı fikir vermektir. Akıl akıldan üstündür. Belki de burada bahsettiğim şeyler sizin aklınıza bambaşka bir fikirler getirecektir. O zaman bu yazı amacını gerçekleştirmiş olacaktır.
Kırılamayacak hiçbir yazılımın olmadığını düşünürsek kimse size en doğru lisanslama yöntemini veremez. Siz sadece kırılmaması için elinizden geleni denemiş olursunuz. :D
emeğinizi için teşekkürler ama maalesef okuduklarım arasında herhangi bir doğru lisanslama yöntemi göremedim. eğer client bazlı oluşturulan bir programın yine client bazlı key kontrolü söz konusu ise çok basit bir şekilde yazılım içerisindeki eğer yapıları çıkartılıp yazılım tekrar derleniyor ve tüm şifreleme uğraşlarınız boşa gidiyor. gerçek anlamda bir şifreleme ancak yazılımınızın işlevsel olarak devam edebilmesi için gerekli tüm [string] kodlar online bir sunucudan yine online bir doğrulama aşamasından sonra çekilerek işlenmeli ve işlendikten sonra anında dispose edilmelidir. en doğru ve tek kırılamaz yöntem budur, sevgiler :)
Bu yazının amacı, lisans key üretme noktasında fikir vermektir. Projelerinizde size fikir vermesi amacı güder. Veri tabanı, merkezi bir noktada (Server) olan ve client’lerin çalışabilmek için veri tabanına bağlı olmak zorunda oldukları sistemlere yönelik bir lisanslama mantığıdır. Client, sisteme her bağlanmak istediğinde yani programı çalıştırdığında aktif kullanıcıların sayılarını kontrol edip yeni girişe izin vermek yada engellemek size bağlıdır.
Kopya kullanımın önüne geçme çalışmaları farklı bir konudur…
10 kullanıcılı örneğinizde üretilen keyi 10 mu yoksa 100 kişinin mi kullandığının nasıl takip edileceğine dair herhangi bir bilgi paylaşmamışsınız. Bu konudaki düşünceniz nedir? Üretilen bir key A kişisine verildiğinde A kişisi kurulum yaptı ve B, C, D kişileriyle paylaştıklarında onlar da kurulum yapabilecekler bu noktadaki önleminiz nedir?
Peki ya bilgisayarın tarihini geri aldığında?
Lisans kodunda tarih olduğunu gösterirseniz, insanların aklına tarihi geri almak gelebilir. Tüm bilgiler gizli olmalıdır.
Tarih bilgisi internet üzerinden kontrol edilebilir.
Program kurulurken interneti zorunlu tutarsınız ve tarih bilgisi internet üzerinden alınır. Lisans’ı da gün sayısı olarak tutarsınız. Böylece bilgisayardaki tarihin bir önemi kalmaz. Arka planda bir tabloda ilk tarihe gün eklersiniz ve 365 gün dolmuş mu ona bakarsınız.
Tabi bu yöntemlerin hepsi de kırılmaz yöntemler değil. Devasa sermayeli şirketlerin bile programları kırılıyorken, kırılamaz bir lisans üretmek mümkün görünmüyor.
Sevgili Tester arkadaşım, “en doğru ve tek kırılamaz yöntem budur” diye kendinden emin bir şekilde yorum yapmışsın fakat çok yanlış. Millet, Microsoft ürünlerini, Adobe ürünlerini kırıyor, senin programını mı kıramayacak? :)
İstediğin kadar uğraş, kırmak isteyen kıracaktır. Ufak da olsa bu işi zorlaştırmak için lisans sistemi yapıyoruz. Rockstar oyunlarının 1 haftada kırıldığı dünyada yaşıyoruz. Bırak da bizimkileri de kırmak isteyen kırsın.