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.

6 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

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.