Demo süreli program yapma

Başlığı ilgi çeksin diye biraz karıştırdım. Özür dileyerek karşılığında size ilgi duyacağınız bilgiler paylaşmak istiyorum. Bir yazılımcı yazdığı programı kullanıcıya tanıtmak için demo veya kısıtlı süreli ücretsiz verir. Örneklerini her yerde görebiliriz(30 günlük antivirüs prog vs.). Kullanıcı memnun kaldığında parasını ödeyerek yazılımın serialini yani aktifleştirme kodunu satın alır. Sınırsızca veya belirli sürede kullanır vs vs.. Senaryoyu kafanızda canlandırmış sınızdır umarım. Fazla uzatmadan konuya dalmak istiyorum.

Basitçe bir form ekranına biraz afilli gözükmesi için resimdeki gibi 2 Label, 1 Progress Bar, 1 Buton ve son olarak aktifleştirme kodu girmek için 1 adet Textbox(janjanlı gözüksün diye maskedtextbox kullandım) yerleştirerek uygulamamıza başlayabiliriz. Senaryomuz şöyle ki;

Uygulama ilk çalıştığı an itibariyle 10 günlük olup, doğru aktifleştirme kodu girildiğinde süresiz çalışan yazılım.

Çalışma mantığı, çoğu süreli programın mantığına benzemekte. Hackerlar iyi bilir bu mantığı, nedenin soracak olursanız yapacağımız programda bu klasik yöntem ile gelişmekte. Ama o kadar da kolay kırılabilen programcık olamayacağını söyleyebilirim. Temelinde registry etkileşimi yatmakta.

Program ilk defa açılır açılmaz Registry’a bir anahtar ve alt anahtar oluşturup diğer günlerde açıldığında ilk atadığımız anahtarı baz alarak kalan süreyi kontrol edip belirtmek. Süre bittiğinde de öngörülen işlemi yapmak. Doğru aktifleştirme kodu girildiğinde ise ilk açıldığında kayıt edilen anahtarı silerek, bundan sonraki açılışlarında kontrol etmeden süresiz çalışmak.

Registry ilgili ilk örneğiniz ise bu(Csharp registry işlemleri) yazımı incelemenizde fayda olacak. Anladığınızı umarak direk kodlara dalıyorum;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using Microsoft.Win32; //Eklemeyi unutmayalım !!
       
RegistryKey anahtar = Registry.CurrentUser;
        private void Form1_Load_1(object sender, EventArgs e)
        {
           
            anahtar = anahtar.CreateSubKey("Software\\Coder");

            if ((anahtar.GetValue("Aktif") != null))
            {
                label1.Text = "Program aktif edilmiş";

                txtserial.Enabled = false;
                txtserial.Text = "4-8-15-16-23-42";

            }
            else
            {
                if (anahtar.GetValue("Sonkullanma") == null)
                {
                    label2.Text = "Yazılımı aktif edilmesi için 10 gün kaldı...";
                    anahtar.SetValue("Sonkullanma", DateTime.Now.AddDays(10), RegistryValueKind.String);
                    anahtar.Flush();
                }

                else
                {

                    DateTime dt1 = Convert.ToDateTime(anahtar.GetValue("Sonkullanma"));
                    DateTime dt2 = Convert.ToDateTime(DateTime.Now.AddDays(0));

                    TimeSpan fark = dt1 - dt2;

                    int sonuc = Convert.ToInt32(fark.Days);


                    if (sonuc <= 0)
                    {
                        MessageBox.Show("Süre Bitti");
                        progressBar1.Value = 100;

                    }
                    else
                    {

                        label2.Text = "Aktivasyon için " + Convert.ToString(sonuc) + " gün kaldı";

                        switch (sonuc)
                        {
                            case 1:
                                progressBar1.Value = 90;
                                break;

                            case 2:
                                progressBar1.Value = 80;
                                break;

                            case 3:
                                progressBar1.Value = 70;
                                break;

                            case 4:
                                progressBar1.Value = 60;
                                break;
                            case 5:
                                progressBar1.Value = 50;
                                break;
                            case 6:
                                progressBar1.Value = 40;
                                break;
                            case 7:
                                progressBar1.Value = 30;
                                break;
                            case 8:
                                progressBar1.Value = 20;
                                break;
                            case 9:
                                progressBar1.Value = 10;
                                break;
                        }
                    }
                }

            }

        }

        private void button4_Click(object sender, EventArgs e)
        {
           
            if (txtserial.Text == "4-8-15-16-23-42")
            {

                anahtar.SetValue("Aktif", 3, RegistryValueKind.String);
                anahtar.Flush();
                Application.Restart();

            }
            else
            {
                MessageBox.Show("Girilen anahtar yanlış");
            }

        }

Not : Kopyala yapıştır yapıldığında Form1_Load_1, button4_Click kısımlara göz ardı etmenizi isterim.

İşlemlerimizin çoğu formload kısmında gelişmekte. Sadece aktif etmek için buton kullanıldı. İlk olarak CurrentUser içindeki Software anahtarı içine Coder adında anahtar oluşturduk. “Aktif” isimli anahtarı koşullandırıp devam ettik (aktif anahtarı doğru aktivasyon kodu girdiğimizde oluşmakta tekrar değineceğim konuya). Ardından “Sonkullanma” isimli anahtarın var olup olmadığını kontrol edip yoksa 10 gün sonrası tarihe Registry’a kayıt ettik(programımız 10 günlük olduğu için). Eğer daha önceden eklenmiş ise Registry’dan değeri okuyarak bugününün tarihini çıkardık. 0 veya küçük ise gerekli işlemi yaptırdık.

Progressbar ile kalan gün sayısını Registry’dan okuyarak switch case sayesinde doldurduk. Bu arada doğru kodu girdiğimizde ilk açıklama da belirttiğim “Aktif” anahtarını Registry’daki anahtarımızın içine kayıt ettik. Programı tekrar çalıştırmak, tamamen aktifleştirmek için Application.Restart() metodunu kullandık.

Şifre Lost hayranları için tanıdık gelebilir. Konumuza geri dönersek, bu uygulama ile Registry’a veri kayıt edip okuma, iki tarih arası fark alma, istenilen bir sonraki tarihi gösterme, tarihin sadece gün kısmını alma, switch case ile progressbar doldurma gibi birçok örneği de beraberinde kullandık.

Genel olarak demo, kısıtlı bir program yazmak için yapmanız gereken işlemler bu şekilde. Güzel bir makyaj ile uygulamayı daha tatlı hale getirebilirsiniz. Bir sonraki yazıda görüşmek dileği ile…

Csharp ile registry ekleme silme işlemleri

Registry, Windows’un çalışması ve çalıştırması gereken veritabanı diyebiliriz. Neredeyse tüm programlar registry ile çalıştığını az çok tahmin edebiliyorsunuzdur. Hikayeyi fazla derinleştirmeden asıl mevzumuza geçersek, kayıt gerektiren bir masaüstü uygulaması geliştirdiğimizde; şifre işlemleri, son giriş tarihi gibi vs. kayıt gerektiren işlemleri daha güvenli bir yerde saklamamız için registry’i kullanırız.

İnternet de bir çok registry işlemleri örnekleri görmüşsünüzdür. Alternatif olarak daha basit, mantığını aktarmak için küçük bir uygulama yapmak istedim(Uygulama herhani bir işe yaramıyor). Altta gördüğünüz uygulamanın amacı, HKEL_CURRENT_USER altındaki Software anahtarı altına istediğimiz isimde anahtar oluşturarak, onun içerisine istediğimiz değerlerde anahtar oluşturmak.

Resimdeki gibi basit form oluşturarak konuyu daha iyi anlayabilirsiniz. 3 tane buton ve ve bir label koyarak yapabilirsiniz. Oluşturduk tan sonra kod kısmına geçebiliriz;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
private void button1_Click(object sender, EventArgs e)
{
RegistryKey anahtar = Registry.CurrentUser;
try
{
anahtar = anahtar.CreateSubKey("Software\\coder.digitaldunyam.net");
label1.Text = "Anahtar oluşturuldu";
}
catch (Exception)
{

}

}

private void button2_Click(object sender, EventArgs e)
{
RegistryKey anahtar = Registry.CurrentUser;
anahtar = anahtar.OpenSubKey(@"Software\coder.digitaldunyam.net", true);
try
{
anahtar.SetValue("Coder",3, RegistryValueKind.DWord);
anahtar.SetValue("String deger", RegistryValueKind.String);
label1.Text = "Alt Anahtar oluşturuldu";
}
catch (Exception)
{

label1.Text = "Hata !";

}

}

private void button3_Click(object sender, EventArgs e)
{
RegistryKey anahtar = Registry.CurrentUser;
anahtar = anahtar.OpenSubKey(@"Software\coder.digitaldunyam.net",true);
try
{
anahtar.DeleteValue("Coder");
label1.Text = "İlgili anahtar silindi";
}
catch (Exception)
{

label1.Text ="Anahtar bulunamadı";
}

}

Açıklamaları kafa karıştırdığı için kod içinde vermiyorum. Anahtar oluşturma, silme işlemlerini anlamladırmak için Label ve mesajlar ile süsledim. Yapılanları görebilmek için Başlat-Çalıştır “Regedit” yazarak görebilirsiniz.

[stextbox id=”alert”]Dikkat etmeniz gereklerden bir tanesi using Microsoft.Win32; referansı ekleyip anahtar yollarını doğru yazmanız. CreateSubKey(“Software\\coder.digitaldunyam.net”) ile OpenSubKey(@”Software\coder.digitaldunyam.net”,true) arasındaki farkları göz ardı etmenizde fayda olacaktır. [/stextbox]