Reverse Engineering'e karşı alınabilecek önlemler (Yazılım koruma teknikleri)

Programcıların gece ve gündüz günlerce çalışarak elde ettikleri  sonucun meyvesini  yemek  istemesi normal.Fakat bazı programlara konulan uçuk fiyatlar ekonominin kötü olduğu ülkelerde korsan kullanıma itiyor ve yüzlerce siteye onbinlerce cracker sürekli bunları kırarak ekliyor.İş kontrolden çıkınca büyük maddi kayıplara sebep oluyor ve bu da programcının hakkını yemek oluyor malesef.

Bu sefer olaya programcıların açısından bakarak ne gibi önlemler teknikler alabileceğimle ilgili bazı ipuçları vereceğim.Benim şahsi düşüncem ücretli bir yazılım yazsam her ihtimale karşı onu trial olarak paylaşmam.Çünkü alınan her türlü önleme rağmen hala programlar kırılmaya devam etmekte ve uğrunda yüzlerce dolar saçılan koruma programları tekniğinin çözülmesiyle dakikalar içerisinde kırılır hale gelmiştir.En iyi koruma yöntemi debugger ile açıp kendi programımızın assembly kodları üzerinde kilit noktalarda crackerı şaşırtıcı değişiklikler yapmaktır.Fakat assembly bilmeyen programcılar içinde güzel yöntemler mevcuttur.

Yukarıda ücretli yazılımların deneme amaçlı olarakta dağıtılmamasının güvenlik açısından iyi olacağından bahsetmiştim.Fakat programınız çok mükemmel birşey değilse birçok kişinin haberi olmayacak ve reklam yapmadığınız için zarara uğraşayacaksınız.Bu yüzdende bazı durumlarda deneme amaçlı programlar dağıtmak zorundayız.Öncelikle dilleri kıyaslarsak bir programı debugger ile açtığımızda yer tespiti açısından en güvenli visual basic daha sonra delphi en güvensiz olanıda c++dır.Sebebi  visual basic gibi dillerin dlllerden bolca yararlanmasıdır.Fakat bu durum geliştirilen bazı araçlarla tersine dönmüştür.Visual Basic için “Visual Basic Decompiler” ve Delphi için “DeDe” geliştirilen yazılımlar başı çekmektedir.Bunlarla kısa bir incelemeden sonra kilit noktaların adreslerini alarak gerekli düzenlemeleri debugger vasıtasıyla yapmamız mümkündür.

Öncelikle programı yazdığımız dille yapabileceğimiz birkaç şaşırtma ve korunma yönteminden bahsedelim.Örneğin programı deneme amaçlı dağıtmak istiyoruz.Fakat program kısıtlı olarak kullandıracağız.Örneğin dosyayı açma var.Fakat kaydetme yok diyelim.Burada programın kısıtlamak istediğimiz fonksiyonlarının kodlarını çıkartarak derlemek en iyisi olacaktır.Birçok programda bu hataya rastladım.Adam programında kısıtlı sürüm olup olmadığıyla ilgili değişken koyup yaptığı karşılaştırmalar sonucu mesaj penceresi çıkacağı yada fonksiyona devam edeceğini belirlemiş.Fakat program tamamen trial olarak geçiyor yani register edilemez.Bu da programcının dünyadan bir haber olduğunu gösteriyor.Nag screenlere(beni satın alın diye programın başında çıkan mesaj pencerelerine) gelirsek.Bunları tek çatı altında toplamak uzun fakat iyi bir yöntem olacaktır.Örneğin programın ana formu ile nag screen ortak olsun.Formun üstündeki bileşenlerin yerleri ve konumları ,üstlerindeki yazılar nag screendeki devam et butonuna basınca ayarlansın ve ana form görünümüne girilsin.Ana form ve nag screen’i ortak yapmamız crackerın nag screen’i atlarsa ana formuda atlaması ve programın açılmayacağı anlamına geliyor.Nag screenden forma geçişte yapılan işlemlerin matematiksel olarak ve ayrı ayrı prosedürlere dağıtılarak çağrılar yapılarak gerçekleştirilmesi daha doğru olacaktır.

Eğer programı register edilebilir şekilde dağıtmak istiyorsak en mantıklısı işlemlerimizi internet üzerinden ve harici dosyalar vasıtasıyla yapmak olacaktır.Register edilmemiş programın kısıtlı fonksiyonlar içeren bir dllsi bulunması (Program full olduğunda çalışacak fonksiyonlar eklenmeden derlenmiş) ve register edildiğinde bu dllyi indirerek  programın full olarak devam etmesini uygulayabiliriz.Fakat sitenin çökmesi,sürekli hizmet verme zorunluluğu gibi şeyleri gözönüne alırsak öbür yöntemi uygulamak zorundada kalabiliriz.Yani programın tamamını dağıtmak fakat trial olunca çeşitli değişkenlerle kullanılabilir fonksiyonları atlamak gibi.Program register olup olmadığını açıldığında registyden yada bir dosyadan kontrol eder ve ona göre yoluna devam eder.Programın trial olup olmadığını registrye kaydetmek fazla güvenli değildir.Çünkü registry okuma,yazma apileri aranarak kolayca bulunabilir.Onun yerine bir dosya içerine(bu şaşırtıcı bir dosyada olabilir sistem dosyası gibi yada gereksiz bir dosya gibi temp vs isimler verilerek) binary şeklinde verileri kaydetmek ve her seferinde içerisindeki değerleri okuyarak serial numberı hesaplatıp onay vermektir.Fakat bu bir noktada yapılırsa oranın cracker tarafından modifiye edilmesiyle program register edilmiş olur.Bunun için programın çeşitli noktalarında seri numara tekrar tekrar hesaplanarak kontrol edilmelidir.Örneğin programın başında kullanıcı adı,serial numberı dosyadan okumuştuk.Bunları bir değişkene atıp daha sonradan ele alıp çeşitli noktalarda hesaplatırız.Eğer cracker dosya bölümünü atlayıp sadece onay vermişse işe yaramayacaktır bu aldığımız önlemle.

Tarih:
Hit: 3351
Yazar: FireX

Taglar: reverse engineering'e karşı alınabilecek önlemler yazılım koruma teknikleri


Yorumlar


Siftahı yapan siz olun
Yorum yapabilmek için üye girişi yapmalısınız.