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;
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 ;
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.)
(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.
Sormak istediğiniz soruları konu altından yorum olarak bana ulaştırabilirsiniz umarım faydalı olmuştur :)




