C# - Bilgisayara Özel Lisanslama Yapma


C# - Pcye Özel Lisanslama Yapma
Merhaba arkadaşlar bu yazımda C# programlama dilinde geliştirdiğiniz programları nasıl pc ye özel lisanslayacağınızı anlatmaya çalışacağım. Pc ye özel derken sadece o bilgisayarda çalışacak lisans kodu üreteceğiz. Peki bunu nasıl yapabiliriz? Her bilgisayarda farklı olan sabit değerlerle bilgisayara özel bir anahtar kod üreterek bunu yapabiliriz. Sabit olan değerlerden kastım cpu id , hdd serial, motherboard serial, mac adresi gibi değerler biz bu değerlerin hepsini alıp md5 le şifreleyerek anahtar kodumuzu oluşturup programımızda kullanıcıya göstereceğiz. Kullanıcıda bu anahtar kodu programımızı satın almak isterse bize gönderecek ve biz gerekli ödemelerini alıp ona özel lisans kodu oluşturarak atacağız. Temel mantığı bu şekilde tabi siz keyfinize göre bunu geliştirebilirsiniz.

Anahtar kod oluşturma projenizin başına eklemeniz gerekenler;
using System.Net.NetworkInformation;
using System.Security.Cryptography;
using System.Management;
Yukarıdakileri ekledikten sonra Public form kısmındaki InitializeComponent(); altına aşağıdaki kodlarımızı ekliyoruz.
 try
            {
                var cpuid = string.Empty;
                var hddserial = string.Empty;
                var motherboardserial = string.Empty;
                var macaddress = string.Empty;

                #region cpu id // Cpu id alma

                string sQuery = "SELECT ProcessorId FROM Win32_Processor";
                ManagementObjectSearcher oManagementObjectSearcher = new ManagementObjectSearcher(sQuery);
                ManagementObjectCollection oCollection = oManagementObjectSearcher.Get();
                foreach (ManagementObject oManagementObject in oCollection)
                {
                    cpuid = (string)oManagementObject["ProcessorId"];
                    break;
                }

                #endregion cpu id

                #region mac address// Mac adresi alma

                NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
                String sMacAddress = string.Empty;
                foreach (NetworkInterface adapter in nics)
                {
                    if (sMacAddress == String.Empty)
                    {
                        IPInterfaceProperties properties = adapter.GetIPProperties();
                        macaddress = adapter.GetPhysicalAddress().ToString();
                    }
                }

                #endregion mac address

                #region hdd serial // Harddisk serial alma

                ManagementObject dsk = new ManagementObject(@"win32_logicaldisk.deviceid=""c:""");
                dsk.Get();
                hddserial = dsk["VolumeSerialNumber"].ToString();

                #endregion hdd serial

                #region motherboard serial // Motherboard serial alma

                ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
                ManagementObjectCollection moc = mos.Get();
                foreach (ManagementObject mo in moc)
                {
                    motherboardserial = (string)mo["SerialNumber"];
                    break;
                }

                #endregion motherboard serial

                var anahtar = cpuid.Trim() + " " + hddserial.Trim() + " " + motherboardserial.Trim() + " " + macaddress.Trim();
                anahtar = Md5Sifrele(anahtar);
                txt_anahtar.Text = anahtar; // txt_anahtar adında textboxa oluşan kodu aktarıyoruz.
             
            }  
   
 
            catch (Exception ex)
            {
                MessageBox.Show("Lisans Anahtarı Oluşturulamıyor.", "Hata Oluştu", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }   
 } // public form1 kapanış
   
   public static string Md5Sifrele(string str) // Md5 Şifreleme algoritması
        {
            string result = string.Empty;
            try
            {
                MD5CryptoServiceProvider mD5CryptoServiceProvider = new MD5CryptoServiceProvider();
                byte[] bytes = Encoding.ASCII.GetBytes(str);
                byte[] array = mD5CryptoServiceProvider.ComputeHash(bytes);
                int capacity = (int)Math.Round((double)(array.Length * 3) + (double)array.Length / 8);
                StringBuilder stringBuilder = new StringBuilder(capacity);
                int num = array.Length - 1;
                for (int i = 0; i <= num; i++)
                {
                    stringBuilder.Append(BitConverter.ToString(array, i, 1));
                }
                result = stringBuilder.ToString().TrimEnd(new char[]
                {
            ' '
                });
            }
            catch (Exception)
            {
            }
            return result;
        }

    } // public partinal class bitişi
   
} // namespace bitişi



Projemizde anahtar kod oluşturmayı yaptıktan sonra dilerseniz aynı Md5 şifreleme üzerinden dilerseniz farklı bir şifreleme algoritması kullanarak anahtar kod + kullanıcı adı veya mail adresi = lisans kodu şeklinde bir lisanslama sistemi yapabilirsiniz bu husus tamamen sizin yaratıcılığına kalmış ben çok basit bir örnek verdim. Programınıza girişte lisans kodu varsa lisanslı özellikleri aç, lisans kodu yoksa demo sürümde devam et gibi bir kodlama yapabilirsiniz bunu yapmak için registry işlemleriyle kayıt defterine lisans kodu girilince doğruysa kayıt ettirip her girişte kodu sorgulatabilirsiniz. Talep olursa buna örnek kodlar ekleyebilirim. Bu arada Registry işlemleri kullanılmadan da lisans kodunu farklı konumlara yazdırarak sorgulayabilirsiniz. Bizim burada ki amacımız her pc ye özel bir anahtar kodu oluşturup ona göre lisanslamayı sağlamak başka pc lerde aynı lisansla çalışmasını engellemektir :)

Örnek anahtar kod oluşturma projesi ;
C# anahtar kod örnek proje

Lisans kodu oluşturmaya ve sorgulamaya çok basit bir örnek;
//lisanskod projemizde tanımlanacak global string değişken.
//ilk olarak lisans koda mail ve anahtar kod değerlerini atıyoruz.
//Daha sonra lisanskod değişkenini Md5 ile şifreleyerek lisans kodu oluşturuoruz.
lisanskod = txt_anahtar.Text + txt_mail.Text;
lisanskod = Md5Sifrele(lisanskod);
if(txt_lisans.Text == lisanskod)
    {
    //Program lisanslıyken aktif olucak özellikleri buraya yazabilirsiniz.
    }
Bu arada arkadaşlar bazılarınızın aklında peki lisans kodunu nasıl oluşturacağız sorusu olabilir onun içinde ufak bir örnek kod atacağım yukarıdaki verdiğim anahtar kod + mail adresi = lisans kodu mantığından bir lisans kodu üretici yapacağız. Buradaki temel unsur lisans kodunu oluşturduğumuz şifreleme algoritmasıyla aynı algoritmayı kullanmak yoksa farklı kodlar oluşur ve kullanıcı bilgisayarında eşleşme olmaz :) neyse fazla uzatmayayım.

Lisans kodu oluşturma projesinin başına eklemeniz gereken;
using System.Security.Cryptography;
Projemize benim lisanslama mantığıma göre 3 adet textbox 1 adet buton ekliyoruz 3 textboxu anahtar kod, mail adresi, lisans kodu şeklinde kullanacağız. Butonada lisans kodu oluşturma işlemi için gerekli kodlarımızı gireceğiz.

Projemizin kod bölümüne aşağıdaki kodları ekleyelim;
public static string Md5Sifrele(string str) // Md5 Şifreleme algoritması
        {
            string result = string.Empty;
            try
            {
                MD5CryptoServiceProvider mD5CryptoServiceProvider = new MD5CryptoServiceProvider();
                byte[] bytes = Encoding.ASCII.GetBytes(str);
                byte[] array = mD5CryptoServiceProvider.ComputeHash(bytes);
                int capacity = (int)Math.Round((double)(array.Length * 3) + (double)array.Length / 8);
                StringBuilder stringBuilder = new StringBuilder(capacity);
                int num = array.Length - 1;
                for (int i = 0; i <= num; i++)
                {
                    stringBuilder.Append(BitConverter.ToString(array, i, 1));
                }
                result = stringBuilder.ToString().TrimEnd(new char[]
                {
            ' '
                });
            }
            catch (Exception)
            {
            }
            return result;
        }

Projemize eklediğimiz butona çift tıklayıp click eventine aşağıdaki kodları ekleyelim;
string sifrelikod = urunanahtari.Text + mailadresi.Text; // eklediğimiz 2 textboxa yandaki isimleri verin
            sifrelikod = Md5Sifrele(sifrelikod); // textboxlardaki değerleri Md5 ile şifreledik
            lisanskodu.Text = sifrelikod; // Lisans kodumuzu verecek 3. textboxa şifrelediğimiz değerli attık.  
            // 3. Text boxada lisanskodu ismini verdik bu arada değerleri girerken doğru textboxlara girmeliyiz.

Oluşturduğumuz örnek lisans kodu oluşturucu proje;
(Hazırda süslü vardı ondan çektim ss yi kodlama aynen yukarıdaki gibidir.)

Son olarak Managment komutlarında hata olursa referans olarak projenize Managmenti manuel eklemeniz gerekebilir. Bunun için Solution Explorer kısmından projenize sağ tıklayıp Add kısmından Reference yi seçiniz, Fremework seçiliyken yukarıdaki arama kısmına Managment yazınız ve çıkan System.Managmenti seçiniz. aşağıdaki görseldeki gibi olması gerekiyor.

C# Managment hatası görsel

Sormak istediğiniz soruları konu altından yorum olarak bana ulaştırabilirsiniz umarım faydalı olmuştur :)


Download linklerimizde link kısaltma reklamı vardır, Linke tıkladıktan sonra 5 saniye bekleyip "Reklamı Geç" butonuna basarak ilgili dosyaya ulaşabilirsiniz.

27 yorum

Mehmet Gürbüz YÖNETİCİ

Şimdiye kadar hiç ücretle satabilecğim bir program yapmadım ama bu lisanslama olayını hep merak etmiştim konuyu okuduktan sonra temel mantığı kafamda canlandı bu faydalı yazı için teşekkürler :)

Yanıtla
Zeki YÖNETİCİ

Tam aradığım şey bu çok teşekkürler soru sorabilirsiniz diye altta belirtmişsiniz. Benim sorum diyelimki lisanslama algoritmasını yaptık yazılımımızı satışa çıkartacaz bunun cracklenmesini lisans algortimamıza keygen yazılmasını nasıl engelleyebiliriz. Engelleyemesek bile nasıl zorlaştırabiliriz bu konu hakkında bilginiz varsa görüşlerinizi merak ediyorum yardımcı olursanız minettar olurum.

Yanıtla

Zeki bey bu konu hakkında bir sürü koruma yazılımı mevcut .Net de yazılım geliştiriyorsanız .Net obfuscator yazılımlarıyla sourcenizi şifreleyebiliyorsunuz bunun için size smart assembly obfuscator veya .Net reactor obfuscatorü tavsiye edebilirim. Ama bu obfuscatorleri çözen yazılımlar mevcut işini iyi yapan bir reverse engineer için hiç zor bir koruma önlemi olmaz :) Dahada güçlü bir korumam olsun kırmak isteyeni hiç yoktan saatlerce uğraştırsın veya vazgeçirsin diyorsanız. Kesinlikle yazılımınızın .exe ve .dll lerini Enigma Protector ile packlemenizi tavsiye ederim. Bu tarz koruma yazılımları çok güçlü bir şifreleme yaptığı için çoğu hazır debugger scripti ile unpack etmek güç zaten özellikleri içerisinde debugger koruması vs. mevcut. Tabi bunlarla packlersenizde kırabilecek yetenekte kişiler olucaktır sonuçta milyon dolarlık oyunları bile cracklemeyi başarıyorlar :) benim önerim kırılmasını önlemesede zorlaştırır :)

Yanıtla

Yardımcı olabildiysem ne mutlu bana ^_^

Yanıtla

ben yaptım ancak programı lisansladıktan sonra çıkıp girdim mi kayıt olmuyo nasıl yapabilrim yani lisansı 1 kere girmek istiyorum yardımcı olursanız sevinirim

Yanıtla

ustat indirme linki çalışmıyor. Sana sahmet bir ilgilenirsen.

Yanıtla

Teşekkür ederim dostum çok işime yaradı sağol :)

Yanıtla
Adsız YÖNETİCİ

Çok teşekkürler

Yanıtla
Adsız YÖNETİCİ

Link yok

Yanıtla

Merhabalar acaba 32 bit yada 64 bit sistemler için nasıl ayarlayacağız ?

Yanıtla

Merhaba, kodlar fark etmez projenizi x86 veya x64 olarak derleyebilirsiniz.

Yanıtla
Adsız YÖNETİCİ

Sayın Yetkili Download linkleri Yok Ekleyebilirimsin

Yanıtla

konuda download edilecek içerik yok direk kodları kopyalayarak kullanabilirsiniz sayfada yarım olarak gözüken kod seçince tam olarak kopyalanabiliyor. Kod eklentimizi sildiğimizden biraz düzensiz olmuş bu içerik müsait olduğum zaman eklentiyi düzelteceğim.

Yanıtla

Çok Teşekkürler emeğinize sağlık.

Yanıtla

Merhabalar, Öncelikle bilgilendirmeniz için teşekkür ederim.

Bır konuda sorum olucak mumkunse,

Ben bir Ozel bır yazılımı uretıcının benım PC serıal numarama ozel duzenlemıs oldugu bır reg dosyası ıle kullanıyorum.

Bu reg dosyası ıcerısınde ılk gonderdıklerı kod calısmadı. sonar tekrar ıstedım.

Her ıkı reg dosyasını ınceledıgımde sadece pc serı numaraları farklı kodlanmıs.

sımdı ben bu yazılımı yenı bır pc de kurmak ıstedıgımde yazılım bana bu serı numarasına aıt key bulunamadı dıyor.

benım ozetle sorum su kı, hangı kodlama dili ile bu iş yapılıyor reg ıcın.

ornek pc serı no: 1234AB bu serı noyu kodlamanın bır standard varmı.

eger yok ise benım pc nasıl bu kodu anlayabılıyor.

tesekurler.

Yanıtla

Merhaba, kaydedilen reg dosyasındaki değeri program çeşitli işlemler yaparak ayıklıyor olabilir. Yazılımın kaynak kodlarını bilmeden bunu kestirmek çok zordur. Çünkü belli bir standartı yoktur, ayıklamada kullanılacak algoritma tamamen geliştiren kişinin hayal gücüne bağlıdır. Reverse code engineering (tersine kod mühendisliği) yöntemleriyle geliştirenin kullandığı algoritmayı anlamak ve programı cracklemek mümkündür ama bunu yapabilmek ciddi bilgi birikimi gerektirir. Türkiye'de bu işle uğraşan bir tane forum var (decompile.us) crack istek kategorisine konusu açarsanız yardımcı olacaklardır.

Yanıtla

Bilgisayara özel lisansı Virtual Pc gibi bir programla başka bir bilgisayarda kullanmanın yolu var mı

Yanıtla

Lisansı kontrol eden algoritmanın kullandığı sabit değerleri sanal pc ye geçirebilirseniz olur.

Yanıtla

Merhaba; Ben şifrelediğim veriyi (ürün anahtarını) çözmek istiyorum. Daha sonra kontrol amaçlı. Bunu yapmam mümkün müdür? Tam olarak istediğim şey şudur; Kullanıcıdan aldığım bilgiler ve pc den aldığım bileri şifreliyim. Sabit uzunlukta 32-24 yada herhangi bir uzunlukta şifreliyip. Bunu bana verdiğinde bu kullanıcının firma adı mail adresi hdd no bios number gibi bilgileri ayrıştırıp veritabanında o şekilde tutmak istiyorum. Yarın öbürgün benim keyim çalışmıyor dediğinde o anda ürettiği key ile daha sonra üreteceği key arasında hangi parametrelerde farklılık olduğunu görmek istiyorum. Bunun için oluşturduğum ürün anahtarını çözmem gerekiyor. Sabit uzunlukta decrypt yapabileceğim bir şifreleme yöntemi bulamadım.

Yanıtla

Merhaba, programda bu bilgileri şifreleyerek bir xml ürettirebilirsiniz. kullanıcıdan xml dosyasını talep edersiniz ve şifresini çözüp istediğiniz verileri saklarsınız. Yada direk simetrik bir kripto algoritmasıyla şifreleyip textboxa base64 çıktısı vermesini sağlarsınız ama bu yöntemde alacağınız bilgiler çoksa baya uzun bir çıktı olabilir.

Yanıtla

slm bahsettiğin enigma protector ücretli bunun full u elinde varmıdır? gerçi bunu kıran enigmanın şifrelediğinide kırar :)

Yanıtla

http://dosya.co/ejogqhyrxgu0/The_Enigma_Protector.v5_20_By_yildo.rar.html

Yanıtla

xorz cevabın için teşekkürler de şunu demek istiyorum.biz yaptığımız programı tersine mühendislikle kodlarının görünmesini engellemek istiyoruz ama bunu yaptığını söyleyen enigma yı da birileri kırmış yani bu uygulama daha kendini koruyamamış onun sağladığı korumaya nasıl güveneceğiz?

Yanıtla

Kırılamayacak yazılım yoktur. Siz sadece süreci zorlaştırırsınız. Sonuç olarak ne kadar korursanız koruyun, program bilgisayarda çalışmak için o bilgisayarın anlayacağı hale gelmek zorunda. Tavsiyem programı internete bağımlı hale getirin, bazı fonksiyonları web servis olarak yazın yada programın çalışması için gerekli kritik bilgileri sunucudan lisans doğrulamasıyla çektirin. Böyle yaparak çoğu kötü niyetli kişiyi elersiniz. Adam gidip satın alıp eksik parçayı tamamlamayla uğraşacak kadar işsiz değilse sorun olmaz.

Yanıtla

crack lemek istediğim yazılım lisans dosyası oluşturuyor bu dosyayı maille göndermemi isteyip lisanslama yapıp geri bana gönderiyor lisanslanmamış programın oluşturduğu dosyayı notpat ile acınca aşağıdaki metin çıkıyor buna bir yorum getirebilirmisiniz nasıl metni çözeriz :(


– †K! € ¸#`—lØ}›-mg¸½.T` _|ÂS n\øn"
2ÄÒ‰aÏ<Á«úvt‡…4X -7Pr'ŠÌ“’r „ɲ% F[
tÍñYİ°4Á†Îu»Ú= €ŞbY²1n‚qi% M#¿Å Óµ4‹î·Ê(GR ‘}¥òÒ™Õ

Yanıtla

Anlatımınız için teşekkürler. Benim sorunum şurada başladı. Bende iki ayrı form var ana form aktivasyon formu . 2. form ise asıl olayların olacağı kısım. Her girişte tekrar tekrar aktivasyon sormaması için ne yapmak gerekiyor. 1 kere aktivasyon sorsun ve onaylarsam tamam desin.
2. sorum ise şu misal ben bunun kopyalamasını başka bir bilgisayarda çalışmasını istemiyorum bununla ilgili ne yapmam gerek.

Yanıtla

Merhaba, ilk sorunuz için; lisans bir kez onaylandıktan sonra regedite bir kayıt ekleyebilirsiniz, daha sonraki açılışlarda orada ki kaydı kontrol eder. Eğer yoksa lisans girme penceresini açar. Bu mantıkla başka yöntemlerde uygulanabilir örneğin temp klasörüne veya farklı bir konuma herhangi bir dosya yazıp onun varlığını kontrol ettirebilirsiniz; ama regedit kullanmanız daha sağlıklı olacaktır. İkinci sorunuzun cevabı zaten bu paylaşım içerisinde mevcut.

Yanıtla

Yorum Gönder

Yorum Kuralları
1) Küfürlü, siyasi ya da huzur bozucu yorumlar yapmayınız.
2) Konu ile alakalı yorumlar yapınız.
3) Reklam linkleri ve spam mesajlar atmayınız.

* Attığınız yorumlar moderatör kontrolünden sonra yayınlanacaktır.
* Yukarıdaki kurallara uymazsanız sitemizden engellenebilirsiniz.