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;

[cc lang=”c#”]

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ış"); } } [/cc] 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…

“Demo süreli program yapma” üzerine 16 yorum

  1. Emeye saygi. Hocam tesekkurler. Ama bi siy var. PC -nin tarihini geriye ceksen proje yeniden calismaya basliyor.Bu nasil yapalim? Yardimci olursunuz sevinirim.

    1. doğrudur, tarihi geriye çektiğimizde program çalışmaya başlıyor. Çoğu antivirüs programları bu mantıkta çalışıyor + tarihi geri çeken kullanıcı msn gibi network bağlantısı isteyen programları eski tarihten dolayı kullanamaz böylelikle bizim programımızda halt edememiş oluyor…

  2. Selamlar;
    Tarihi sistem yerine textbox10.text den okutmak istiyorum (textbox10.text tarihi netten alıyor)
    Sebebide kullanıcının kendi pc tarihi ile oynayıp hile yapmaması 🙂 ama bu kodlara tarihi textbox10.text den okumasını sağlatamadım.

  3. Tarihi geri almalara karşı çözüm yolları var. Bunun için program ilk çalıştırıldığındaki tarihi bir yere kaydedersiniz. Daha sonra bilgisayarın tarihi ile ilk kaydedilmiş tarih arasındaki farka bakarsınız.

    Eğer bilgisayarın tarihi ilk kaydedilen tarihten geri ise demek ki tarihi geri almıştır. Tarihi ileriki zamanlara alıp o şekilde kurulum yaptığını düşünelim. Bu durumda da yine atnı şey olacaktır. Eğer ilk kurulan tarih ile bilgisayarın tarihinden ileri ise ilk kurduğu zaman ileri tarihi atıp kurmuştur.

    Her halükarda tarih eksenli işlemler yapacağından kullanıcı bilgisayarı için gerçek tarihi ayarlamak zorunda kalacaktır. Aksi takdirde ilk tarih ile kullanım tarihi arasındaki farkı alacak olursanız hileyi yakalarsınız.

    Kısaca özetledim ancak elbette tarih ile ilgili birkaç alternatif kırma tekniği daha var onlara karşıda tedbir almak lazım.

  4. Hocam bu atamalarda txtserial diye bir değer atamışşsınız hiç bir yere. kodlarda yanlışlık var ama ?

    1. txtserial textbox kontrol ismi. Programın lisans numarasının girildiği alan olarak kullanılmakta, aynı .cs dosyasında belirttim.

      Not : Kodları çalıştırmadan buraya yazmıyorum. Arada mantık hatası çıkabiliyor ama sonuç olarak verilmesi gereken mesajı doğru bir şekilde vermiş oluyorum.

  5. Peki hocam birşey daha soracağım. varsayalımki bu kodlarla demo bir program oluşturduk. peki bunun güvenliğini nasıl sağlıyabiliriz ?. .NET ile yapılan programlar çok kolay bir şekilde kaynak kod’a dönüştürilebiliyor

    1. O kadarını bilen zaten registry den bi şekilde bu programı istediği kadar kullanabilir. .Net kendine göre kod güvenliği var o konuları da araştırabilirsin.

  6. 10 Numara çalışma olmuş gerçekten 😉 Elinize emeğinize sağlık denedim çalıştı. Yanlız bir sorum olacak. lisans’ı girdik program çalışıyor filan kendi pc’mizde deneyince kullanıcıya demo sürümünü verememiş oluyoruz 😀 o yüzden ona ne gibi bir çözüm önerirsiniz.?

    1. Sorunuzu tam olarak anlayamadım, bu şekilde yaptıysanız her yeni bilgisayarda serial isteyecektir. Lisanslı olup olmadığını atanan anahtara bakıp da yanıt vermekte eğer anahtar aktifse orjinal olarak çalısıyor, aktif değilse ilk programın yüklenildiği günden işlem yapmakta.

      1. Haklısın dostum current user diyor 🙂 ben ayrıyetten yetkilendirme yaptım. Ayrıca lisans formu oluşturdum bunun için. Program.cs ‘de lisans formunda başlıyor program. lisans keyini girdikten sonra ana menüden başlamasını istiyorum nasıl olacak o.?

  7. vb6 da bu using Microsoft.Win32 nasıl ekleniyor basit bir program yazmıştım buna uygulamak isterim

  8. Arkadaşlar bunlar fasa fiso.. Yıllar önce Müzik ile ilgili Ağır Bir Programın Şifresini Kıramamışlar ve Benden yardım İstediler. eski dos Proğramları Bilirsiniz. Nc Diye Norton Commander Proğramı ile bu programı edit edip şifre soran formu iptal ettim. Yeniden birleştirip Kayıt ettim ve Program artık Şifresiz Şekilde Kullanılabiliyordu. Yani Ne Yapsanız Çözümü Yok bunun.

    Lakin Şöyle Bir Formül Geliştirebilirsiniz. HacKerları Zorlayacak Bir şey.
    Yapmış Olduğunuz Proğramınızın Ana Menüsü ilk Load Edildiğinde Kullanıldığı Pc Üzerindeki Windows Sistem Dosyaları İçine Bir Dosya Açacak Bu Dosya Adı Herhangi Bir Editör Proğramında Gözükmesin Diye bu Oluşturduğunuz Dosya adını (chr(65)+chr(75 vs.) kodlayarak yapacaksınız.
    proğramınız load edilirken bu dosyayı kontrol edicek. dosya ilk kullanımda tarih atacak. Lisans Anahtarına Gelince Proğramızı içinde Sistemin Tarihi ve Saati üzerine kombinasyon hesabı yaparak sürekli değişen bir lisans anahtarı yapacaksınız.Sistemin saati yani saniyesi sürekli değişen bir değişken olduğundan lisans anahtarı için uygundur. programızın zaten anamenüsünde direk bu dosyayı kontrol edeceğinden anamenüdeki herhangi bir oynama proğramın çalışmamasına yol açacaktır. Yani Proğramınızın Kırılmasını Güçleştirirsiniz..

    1. Açıklama için teşekkürler. Fasa fiso demeyelim de ufak da olsa önlem, çünkü neredeyse kırılmayan program yoktur.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir