C# dilinde bir HWID lisans sistemi için temel kodlar ve bazı güvenlik önlemleri hakkında bilgiler!

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
re work
Süper Üye
Katılım
31 Ocak 2016
Mesajlar
952
Çözümler
8
Tepki puanı
458
Ödüller
9
10 HİZMET YILI
C# dilinde bir HWID lisans sistemi için temel bir kod örneği sunabilirim. Ancak, bir HWID lisans sistemi geliştirmek karmaşık bir süreçtir ve güvenliği sağlamak için daha fazla adım ve önlem gerektirir. Aşağıda basit bir örnek bulunmaktadır:
C#:
using System;
using System.Management;
using System.Security.Cryptography;
using System.Text;

public class HwidLicenseSystem
{
    private static string GenerateHwid()
    {
        string hwid = string.Empty;
        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor"))
        {
            foreach (ManagementObject obj in searcher.Get())
            {
                hwid = obj["ProcessorId"].ToString();
                break;
            }
        }
        return hwid;
    }

    private static string ComputeHash(string input)
    {
        using (SHA256 sha256 = SHA256.Create())
        {
            byte[] bytes = Encoding.UTF8.GetBytes(input);
            byte[] hash = sha256.ComputeHash(bytes);
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                builder.Append(hash[i].ToString("x2"));
            }
            return builder.ToString();
        }
    }

    public static bool ValidateLicense(string licenseKey, string expectedHwid)
    {
        string actualHwid = GenerateHwid();
        string hashedHwid = ComputeHash(actualHwid);
        
        return hashedHwid.Equals(expectedHwid, StringComparison.OrdinalIgnoreCase)
               && IsValidLicenseKey(licenseKey);
    }

    private static bool IsValidLicenseKey(string licenseKey)
    {
        // Burada lisans anahtarının geçerliliğini kontrol etmek için özel mantığınızı uygulayabilirsiniz.
        // Örneğin, veritabanında kayıtlı lisans anahtarlarını kontrol edebilirsiniz.
        // Bu örnekte, lisans anahtarının boş olmadığını kontrol ediyoruz.
        return !string.IsNullOrEmpty(licenseKey);
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        string expectedHwid = "hashlenmiş_hwid"; // Lisansın geçerli olması için beklenen HWID
        string licenseKey = "lisans_anahtarı"; // Kullanıcının girdiği lisans anahtarı

        bool isValidLicense = HwidLicenseSystem.ValidateLicense(licenseKey, expectedHwid);

        if (isValidLicense)
        {
            Console.WriteLine("Lisans geçerlidir. Oyunu oynayabilirsiniz.");
        }
        else
        {
            Console.WriteLine("Lisans geçersizdir. Oyunu başlatamazsınız.");
        }

        Console.ReadLine();
    }
}

Bu örnek, GenerateHwid yöntemiyle bir donanım kimlik bilgisi (HWID) oluşturur. Ardından, ComputeHash yöntemiyle bu HWID'nin karma değerini hesaplar. ValidateLicense yöntemi, kullanıcının girdiği lisans anahtarını ve beklenen HWID'yi kontrol ederek lisansın geçerliliğini doğrular.

Bu sadece basit bir örnektir ve gerçek bir lisans sistemi için daha fazla güvenlik önlemi almanız gerekebilir!
HWID lisans sistemi için daha fazla güvenlik önlemi almak isterseniz aşağıdaki önerileri dikkate alabilirsiniz:


  1. Lisans Anahtarının Şifrelenmesi: Lisans anahtarlarını şifreleyerek daha güvenli bir şekilde saklayabilirsiniz. Örneğin, simetrik veya asimetrik şifreleme algoritmalarını kullanarak anahtarları şifreleyebilirsiniz.
  2. Lisans Anahtarlarının Süresi ve Kullanımı: Lisans anahtarlarının süresini ve kullanım sayısını sınırlayarak kötüye kullanımı önleyebilirsiniz. Her lisans anahtarı için belirli bir süre veya kullanım sınırı belirleyebilir ve bunları takip edebilirsiniz.
  3. Lisans Anahtarlarının Merkezi Yönetimi: Lisans anahtarlarını merkezi bir sunucuda veya veritabanında yönetmek, daha iyi bir kontrol sağlar. Bu şekilde, lisans anahtarlarını izleyebilir, geçersiz anahtarları devre dışı bırakabilir ve lisansları yönetebilirsiniz.
  4. Lisans Anahtarlarının Bağlantı Güvenliği: Lisans anahtarlarının iletişimi sırasında güvenli bir bağlantı protokolü kullanmak önemlidir. Veri iletimini şifrelemek için SSL/TLS protokollerini kullanabilirsiniz.
  5. HWID Yanıltma Önlemleri: Kötü niyetli kullanıcıların HWID yanıltma veya değiştirme girişimlerini tespit etmek için çeşitli önlemler alabilirsiniz. Örneğin, HWID'yi farklı bileşenlerin bir kombinasyonuyla hesaplayabilir ve bunları izleyebilirsiniz.
  6. Lisans Doğrulama Sıklığı: Lisans doğrulama işlemini ne sıklıkla yapacağınıza karar verin. Sık sık doğrulama yapmak, kullanıcı deneyimini olumsuz etkileyebilir, ancak daha sıkı güvenlik sağlar. Öte yandan, daha seyrek doğrulama yapmak, kullanıcıları daha rahatlatır, ancak riskleri artırabilir.
Bu öneriler, HWID lisans sisteminizin güvenliğini artırmak için başlangıç noktası olabilir. Ancak, unutmayın ki tam anlamıyla güvenli bir lisans sistemi oluşturmak için daha fazla araştırma, test ve özelleştirme yapmanız gerekebilir.
İşte C# dilinde HWID lisans sisteminde bazı güvenlik önlemlerini uygulamanıza yardımcı olacak kod örnekleri:

  1. Lisans Anahtarının Şifrelenmesi:

C#:
private static string EncryptLicenseKey(string licenseKey, string encryptionKey)
{
    byte[] licenseBytes = Encoding.UTF8.GetBytes(licenseKey);
    using (Aes aesAlg = Aes.Create())
    {
        aesAlg.Key = Encoding.UTF8.GetBytes(encryptionKey);
        aesAlg.Mode = CipherMode.CBC;
        aesAlg.Padding = PaddingMode.PKCS7;
        
        ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
        using (MemoryStream msEncrypt = new MemoryStream())
        {
            msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length);
            using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
            {
                csEncrypt.Write(licenseBytes, 0, licenseBytes.Length);
                csEncrypt.FlushFinalBlock();
            }
            byte[] encryptedBytes = msEncrypt.ToArray();
            return Convert.ToBase64String(encryptedBytes);
        }
    }
}

private static string DecryptLicenseKey(string encryptedLicense, string encryptionKey)
{
    byte[] encryptedBytes = Convert.FromBase64String(encryptedLicense);
    using (Aes aesAlg = Aes.Create())
    {
        aesAlg.Key = Encoding.UTF8.GetBytes(encryptionKey);
        aesAlg.Mode = CipherMode.CBC;
        aesAlg.Padding = PaddingMode.PKCS7;
        
        byte[] iv = new byte[aesAlg.IV.Length];
        Array.Copy(encryptedBytes, iv, iv.Length);
        aesAlg.IV = iv;
        
        ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
        using (MemoryStream msDecrypt = new MemoryStream())
        {
            using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Write))
            {
                csDecrypt.Write(encryptedBytes, iv.Length, encryptedBytes.Length - iv.Length);
                csDecrypt.FlushFinalBlock();
            }
            byte[] decryptedBytes = msDecrypt.ToArray();
            return Encoding.UTF8.GetString(decryptedBytes);
        }
    }
}

  1. Lisans Anahtarlarının Süresi ve Kullanımı:
C#:
private static bool IsLicenseKeyExpired(string licenseKey, DateTime expirationDate)
{
    DateTime currentDate = DateTime.Now;
    return currentDate > expirationDate;
}

private static bool IsLicenseKeyUsageExceeded(string licenseKey, int maxUsage)
{
    // Lisans kullanımını takip etmek için özel bir mekanizma kullanmanız gerekebilir.
    // Örneğin, lisansı veritabanında izleyebilir ve kullanımları kaydedebilirsiniz.
    int currentUsage = GetLicenseKeyUsage(licenseKey); // Lisans anahtarının geçerli kullanım sayısını alır
    return currentUsage >= maxUsage;
}

  1. Lisans Anahtarlarının Merkezi Yönetimi:
C#:
private static bool ValidateLicenseKey(string licenseKey)
{
    // Lisans anahtarının veritabanında kayıtlı olup olmadığını kontrol edebilirsiniz.
    // Örneğin, veritabanında lisans anahtarlarını saklayan bir tablo oluşturabilir ve buradan kontrol yapabilirsiniz.


Aşağıda verdiğim örnekte HWID lisans sistemi için uygun bir MySQL veritabanı tablosunun örneğini bulabilirsiniz:
C#:
CREATE TABLE LicenseKeys (
    id INT AUTO_INCREMENT PRIMARY KEY,
    licenseKey VARCHAR(255) NOT NULL,
    hwid VARCHAR(255) NOT NULL,
    expirationDate DATETIME NOT NULL,
    maxUsage INT NOT NULL,
    currentUsage INT NOT NULL,
    createdAt DATETIME DEFAULT CURRENT_TIMESTAMP,
    updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Bu tablo, "LicenseKeys" adıyla bir lisans anahtarlarını saklamak için kullanılabilir. Tablo, aşağıdaki sütunlardan oluşur:

  • id: Lisans anahtarının benzersiz bir kimliğini temsil eden otomatik artan bir sayı.
  • licenseKey: Şifrelenmiş lisans anahtarını saklamak için kullanılan bir alan.
  • hwid: HWID (donanım kimlik) değerini saklamak için kullanılan bir alan.
  • expirationDate: Lisansın geçerlilik süresini temsil eden bir tarih/saat değeri.
  • maxUsage: Lisansın izin verilen maksimum kullanım sayısını temsil eden bir tamsayı.
  • currentUsage: Lisansın şu ana kadar kullanım sayısını temsil eden bir tamsayı.
  • createdAt: Kaydın oluşturulduğu tarih/saat değeri.
  • updatedAt: Kaydın son güncellendiği tarih/saat değeri.
Bu tablo, lisans anahtarlarını saklamak ve ilişkili verileri takip etmek için bir temel sağlar. Elbette, gerçek bir uygulama için gereksinimlerinize ve tasarım tercihlerinize göre tabloyu özelleştirebilirsiniz.
 
aka panic.rs
Kurucu
Katılım
18 Haz 2015
Mesajlar
3,379
Çözümler
50
Tepki puanı
13,156
Ödüller
22
Sosyal
10 HİZMET YILI
güzel konu ancak c# ile yapılan bir lisans sisteminin güvenli olması zor.
 
Tutti mi chiedono perché ho imparato questa lingua
Süper Üye
Katılım
17 Mar 2016
Mesajlar
634
Çözümler
5
Tepki puanı
112
Ödüller
11
10 HİZMET YILI
Sen ne kadar hashlarsan hashla program cracklendigi zaman sifreyi görüp hashi geri çözer hwidi öğrenir zaten program cracklendigi zaman hwide de gerek yok
 
Onaylı Üye
Katılım
16 Haz 2021
Mesajlar
51
Tepki puanı
4
Ödüller
2
Yaş
35
4 HİZMET YILI
Boşuna uğraşma program cracklendigi zaman sifreyi çözer
 
Onaylı Üye
Katılım
27 May 2019
Mesajlar
53
Çözümler
1
Tepki puanı
1
Ödüller
4
Yaş
25
7 HİZMET YILI
öğrenmek istiyorum ama çok zor gibi duruyor
 
CoreCheat CSGO
Griffin Premium
Katılım
10 May 2016
Mesajlar
1,766
Çözümler
5
Tepki puanı
720
Ödüller
14
Yaş
25
Sosyal
10 HİZMET YILI
Clientside yerine bu işi serverside yapmak daha iyi değil mi? Client sadece hash ve data bilgisini servere atıp server check bilgisini yapsa, ardından da güncel datayı (bu durumda hile) yi cliente gönderse client virtual olarak bunu yapsa? Kaldı ki zaten ordan da patlar C# ama burda bu muhabbete girmek de gereksiz C# güvensizse güvensiz amaç o değil. Eline sağlık ama bu kadar hashlemekten ziyada rsa mantığı ile public private olarak serverden kontrol sağlamak daha mantıklı değil mi? Tabi fazla hash asla üzmez ayrı konu Ayrıca processorid hariç çok daha datayı birleştirmek daha güzel olur. Tekrar eline sağlık.
 
Onaylı Üye
Katılım
30 May 2023
Mesajlar
54
Tepki puanı
2
Ödüller
1
Yaş
34
3 HİZMET YILI
Kodda memory leakler oluşabilir gibi duruyor
 
bir ucaktik dustuk bir gemiydik battik
Efsane Üye
Katılım
21 Eyl 2019
Mesajlar
3,634
Çözümler
58
Tepki puanı
449
Ödüller
10
6 HİZMET YILI
max 2 dkya geçilir eline sağlık yararlı konu
 
Ultra Üye
Katılım
16 May 2017
Mesajlar
2,346
Çözümler
10
Tepki puanı
530
Ödüller
11
Yaş
27
Sosyal
9 HİZMET YILI
valla tebrikler ellerine saglik üsenmemis yapmissin yararli konu.
 
Süper Üye
Katılım
23 Nis 2019
Mesajlar
981
Çözümler
2
Tepki puanı
79
Ödüller
6
7 HİZMET YILI
çok açıklayıcı olmuş fakat kolayca kırılabilir.
 
Üye
Katılım
6 Şub 2020
Mesajlar
42
Tepki puanı
0
Ödüller
6
Yaş
27
6 HİZMET YILI
Konuya yeterli şekilde istek gelirse C++ ve Python uyarlanmış halinide paylaşabiliriz.
 
Onaylı Üye
Katılım
28 Kas 2023
Mesajlar
51
Tepki puanı
0
Yaş
25
2 HİZMET YILI
Kırılması biraz kolay ama yine de ellerine sağlık başarılı
 
Uzman Üye
Katılım
28 Kas 2023
Mesajlar
172
Tepki puanı
4
Yaş
26
2 HİZMET YILI
crackten dolayı işlevli olmaz diye düşünüyorum
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...