A
B
C
Ç
D
E
F
G
Ğ
H
I
İ
J
K
L
M
N
O
P
R
S
Ş
T
U
Ü
V
Y
Z
Q
W
X
+ Ekle
.Net Uygulamalarımızın Kaynak Kodlarını Şifreleme

.Net Uygulamalarımızın Kaynak Kodlarını Şifreleme

  Bu makalemde bir projenin satışa çıkmadan önce yapılması gereken olaylardan bir tanesini anlatacağım. Decomplie gibi konuları duymayanlar ve Reflector ün ne olduğunu bilmeyenler için aslında çok ilginç, çok heyecan verici bir konu anlatacağım :)

 
     Bu zamana kadar Visual Studio da yazdığımız WinForms, WPF,ASP, Silverlight, Class Library, Console  gibi uygulamalarımızı direk Publish(Yayınlama) edip satışa çıkarma hayali veya satışa çıkarmışızdır. Fakat acımasız dünya (cracker ve hacker) bunu bize zehir etmektedir. Aslında yazdığımız programlar Debug edildiğinde, MSIL diline sonra da  CLR (Assembly) kodlarına dönüştürülme süreçleri vardır. Fakat belli bir noktada Assembly dili dediğimiz derlenmiş kodlar geri Net dillerine geri dönmektedir. Bu yüzden yazdığımız kodların aynısını geri alabilmekteyiz.
 
.Net Kodlarını Şifreleyen Assembly Kodu
Assembly Dili Örneği
 
   Yukarıda gördüğünüz gibi bizim anlayamayacağımız fakat Assembly dili bilenlerin anlayabileceği bir dil göz önündedir. Herkesin okuyamayacağı bir dil olan bu kodları malesef bazı programlar .Net Dillerine Eskisi gibi Geri Çevirmektedir.
 
 
.Net Reflector Screenshot
Şifrelenmemiş Yazılım
 
  Gördüğünüz gibi derlenmiş olan yazılımımız C#,C++,VB.Net dillerine geri dönebilmektedir. Fakat bunun bir çözümü var. Bende bu çözümü anlatacağım. Yukardaki resimde, gördüğünüz gibi bir veritabanı bağlantısının açık hali bulunmaktadır. Assembly dilini geri çeviren programın yapımcılarının yaptığı başka bir yazılım; SmartAssembly. Bu yazılım sayesinde kodlarımızı şifreleyebiliriz.
   
    İlk önce SmartAssembly'i indirelim
. Bu yazılımı indirip kurulumunu yapınız. Sonra programı çalıştırınız.
 
Smartassembly
SmartAssembly Karşılama Ekranı
 
  Gelen pencere de New Project seçeneğine tıklıyoruz.ve Gelen Ekranda Browse Assembly seçeneğine tıklayarak yazdığımız projenin Bin/Debug/ klasörüne giderek DLL veya Exe dosyamızı seçiyoruz (Not : vshost dosyasını sakın almayınız)
 
Smartassembly Dosya Seçme
Visual Studio ile derlenmiş dosyalarımızı seçiyoruz
 
  Dosyamızı seçtikten sonra gelen pencerede şifrelenmiş dosyanın nereye kayıt edileceği sorulmakta ve Eğer yanlış seçim yaptığımız derlenmiş dosyayı değiştirme seçeneklerini göreceksiniz. Devam etmek için Set Destination butonuna tıklayarak devam edin.
 
Smartassembly Set Destination
Şifrelenecek dosyanın nereye kayıt edileceğini ayarlama
 
    Şifrelenecek dosyamısın nereye kayıt edileceğini seçerek artık şifreleme tekniklerine ve uygulama güvenliklerine bakalım.
 
SmartAssembly Security Options
Şifreleme ve Güvenlik Seçenekleri
 
    Artık şifreleme tekniklerine ve güvenlik seçeneklerine bakabiliriz. Üst menüde gördüğünüz her bir simge ve altındaki renk şifreleme tekniği ve güvenlik seviyesini bellirtir. (Kırmızı : Çok Düşük, Orta : Normal, Yeşil : Yüksek Koruma) anlamlarına gelir.
 
 
  1. Strong Name Signing
          Bu seçenekte belirtilen Key dosyasına göre çalışmaktadır. Create New Key diyerek yeni bir anahtar oluşturabilirsiniz. Fakat Ben bu ayarı I do not want to sign my assembly diyerek orta seviyeye alacağı
     
     

    Smartassembly Strong Name Signing

    Strong Name Signing
  2. Automated Error Reporting
          Bu seçenekte ise programımız uygunsuz bir hataya yakalandığında gelen klasik hata penceresi ve neden hata verdiğini Exception dan alarak ekrana yansıtan hata ekranını engellemektedir. Bunun amacı Klasik hata ekranının hata kaynağını gösterip fakat çözümsüz bırakması ve raporlama işlemini yapmamasından kaynaklanmaktadır. Smart Assembly ise bize kendi rapor formumuzu bile oluşturmayı desteklemektedir.(Profesional Edition Sürümünde Desteklemektedir.) Bu sayade kullanıcılarınıza özel formlar göstermek, hata detayını rapor etmek ve çözüm linkleri bulmanıza yardım edecek servisler sağlamaktadır. Biz sadece hata raporunu kendi E-Mail adresimize rapor etmesini sağlayan sistem yapacağız.
     
    Smartassembly Automated Error Reporting
    Automated Error Reporting Ayarları

     
  3. Feature Usage Reporting
         Bu seçenekte ise programınızı yayınladığınızda programınızın nasıl kullanıldığı hakkında bilgi toplamasını sağlayan seçenektir. Burada isterseniz kabul edebilirsiniz fakat ben kabul etmiyeceğim. Uygun bir ayar olduğunu düşünmüyorum :)
     
  4. Dependencies Merging
        Bu bölümde ise programınıza bir şifrelenmemiş referans eklenmişse bu seçeneği kullanabilrsinz. Eklenen referansları bularak sizde hangilerinin şifreleneceği sorulmaktadır. Referansları işaratleyerek şifreleyebilirsiniz.
     
  5. Pruning
         Bu bölümde ise yapmış olduğunuz yazılımın namespace lerinin isimlerini de şifrelenmesi konusunda bir takım işlemler yapmaktadır. Direk işaretleyerek bu seçeneği geçmenizi isterim :)
     
  6. Obfuscation
         Bu bölüm can alıcı bölümlerden birisidir. Burada kodlarınızın nasıl bir şekilde şifrelenmesi gerektiğini sormaktadır. İlk önce yazılımınızı işaretleyin ve seçenekleri inceleyelim
     
         1- Types/Method Names Mangling
              Bu bölümde hangi karakterler ile şifreleneceğini sormaktadır. En düşük güvenlikte ASCII karakterlerini kullanarak şifreleme tekniğidir. Orta seviye güvenlikte ise Unicode karakterlerin   kullanılacağını belirtmektedir. (Bu seçenek en idealidir) En güvenlikli seçenek ise Unicode karakterler ve özel Algoritmaların kullanılacağı beyan edilmektedir. Fakat özel algoritmaların nasıl şifreleyeceği bilinmemektedir. Belkide kodlarımızı şifrelerken programımızda hata verecek sonuçlar doğurabilir.
     
         2- Fields Name Mangling
              Bu bölümde field ve class isimlerinizi şifrelemektir. Burada da riskli olan durumlar vardır. Orta seviye yine en uygunudur. Çünkü orta seviyede Tüm field ve class adları standart bir şekilde değiştirilirken En güvenlikli seçenekte özelleştirilmiş isim değiştirme durumu söz konusudur
     
    Smartassembly Obfuscation Şifreleme Tekniği
    Obfuscation Şifreleme Tekniği Ayarları
  7. Control Flow Obfuscation
        Bu bölümü anlatmak biraz uzun sayılabilir. Birazda Obfuscation bölümüne benzemektedir.Burada yazdığımız yazılımı işaretleyerek yanındaki dropdownlist ten Strongest seçeneğine tıklayarak devam edelim 
     
  8. References Dynamic Proxy
        Bu bölümde referans olarak eklenmiş veya plugin tabanlı programlama sistemlerinde dll i okuyup içerisindeki methodlarla işlem yapma mantığıyla çalışan programların referanslardan korunu konusunda koruma sağlayan seçeneğimizdir. Bunuda aktif etmenizi tercih ederim.
     
  9. Resources Compression and Encryption
        Bu bölümde programımızı yazarken içerisine gömdüğümüz resim,müzik veya uygulama dosyalarımız konusunda bir şifreleme ve sıkıştırma seçeneği sağlamaktadır. Örneğin programınızda bir text dosyası gömülü içerisinde bunun içerisinde kimsenin okumaması gereken veriler var ise bu seçeneği kullanmanızı tavsiye ederim
     
  10. Strings Encoding
         Bu bölüm programınızda sıkıntı oluşturabilecek nedenlere sokabilir. Bu programınızda String olarak sağladığınız verilerin şifrelenip okunması zor hale getirilmektedir. Örneğin C# ile şöyle bir kod yazdınız (if(Button1.Text=="Çalıştır")Process.Start("iexplorer.exe");) gibi bir kod yazdığınızda "Çalıştır" yazısını encoding edecek ve Button1.Text i ile uyuşmazsa bu hataya sebep olacaktır. Bu konuyu göz önünde bulundurarak bu seçeneği aktif ediniz
     
  11. MSIL Disassembler Protection
        Bu bölüm ise MSIL kodlarının korunumu konusunda şifreleme tekniğidir. Bunu direk aktif ederek devam ediniz
   Bu şifreleme teknikleri ayarlarını yaptıktan sonra Programın Sağ Alt Bölümündeki Build Butonuna tıklayınız ve Bekliyoruz
 
Smartassembly Build
Build Sonuçları
     Gördüğünüz gibi Build edilmiş ve bitirilmiş. Programın işlevliğini inceleyiniz ve deneyiniz. Open Assembly Folder buttonuna tıklayarak şifrelenmiş yazılımınızı görebilirsiniz. Ve Tekrar şifrelenmiş mi diye reflector aracılığı ile bakalım
 
Smartassembly & .Net Reflector
SmartAssembly ile Şifrelenmiş Hali
 
     İşte Sonuç. Smartassembly ile okunmayacak hale getirildi. Veritabanı bilgilerimden eser yok şimdi :) Benden bu kadar arkadaşlar yorucu ve uzun bir makalelenin ardından dinlenme vakti :) Başka bir makalede görüşmek dileğiyle.
  Ad Soyad
  Yorum