C# .NET Obfuscar

Katılım
18 Temmuz 2024
Mesajlar
49
Tepkime puanı
11
Puan
166

Obfuscar Nedir ve Neden Kullanılır?

Obfuscar, .NET tabanlı projelerinizin derlenmiş (DLL veya EXE) çıktılarını tersine mühendislik girişimlerine (decompile) karşı korumak amacıyla kullanılan açık kaynak bir kod karmaşıklaştırma (obfuscation) aracıdır.

  • Sınıf ve metot adlarını karmaşıklaştırır: Örneğin, MyClass yerine A_1 gibi anlamsız isimlere dönüştürür.
  • String şifrelemesi yapar: Kaynak kod içinde metin olarak tutulan hassas verileri şifreler. Tersine mühendislik çabalarını zorlaştırır.
Not: Obfuscar ya da başka obfuscation araçları tam koruma sağlamaz, ancak kodun kolayca çözümlenmesini (decompile) ve kopyalanmasını oldukça zorlaştırır.


Kurulum Adımları

  1. GitHub: Obfuscar GitHub sayfası'ndan en son sürümü edinebilirsiniz.
  2. NuGet: Projenize NuGet aracılığıyla da ekleyebilirsiniz (paket adı Obfuscar).
obfuscar_1.png


NuGet üzerinden kurulum gerçekleştirdikten sonra projemizin ayarlarından Derleme Olayları > Derleme sonrası olay komut satırı (Build Events > Post-Build Event Command Line) girerek, aşağıdaki kod bloğu eklenmelidir.
Kod:
"$(Obfuscar)" obfuscar.xml
Bu işlemden sonra projenizin kök dizinine obfuscar.xml adında bir konfigürasyon dosyası oluşturmamız gerekiyor. Bu konfigürasyon için detaylı dökümantasyon Obfuscar Döküman sayfasından ulaşabilirsiniz.

obfuscar_2.png


Ek olarak obfuscar.xml dosyasının özelliklerine girerek Çıkış Dizine Kopyala seçeneği Her zaman kopyala olarak ayarlanmalıdır.

obfuscar_3.png


obfuscar.xml dosyası için örnek bir konfigürasyon paylaşımı yapıyorum.
XML:
<?xml version='1.0'?>
<Obfuscator>
    <Var name="InPath" value="." />
    <Var name="OutPath" value=".\Obfuscator_Output" />
    <Var name="HideStrings" value="true" />
    <Var name="ReuseNames" value="true" />
    <Var name="KeepPublicApi" value="false" />
    <Var name="HidePrivateApi" value="true" />
    <Var name="RenameProperties" value="false" />
    <Var name="RenameEvents" value="true" />
    <Var name="RenameFields" value="true" />
    <Var name="UseUnicodeNames" value="false" />
    <Var name="UseKoreanNames" value="true" />
    <Var name="SuppressIldasm" value="true" />
    <Var name="OptimizeMethods" value="true" />
    <Var name="RegenerateDebugInfo" value="false" />
    <Var name="MarkedOnly" value="false" />
    <Module file="$(InPath)\ConsoleApp1.exe" />
</Obfuscator>
Projemizi, Debug veya Release mod ile derleme yapabiliriz. Derleme sonucunda oluşan uygulamamızın dotPeek Decompile uygulaması ile açarak incelemesini yapalım. İnceleme öncesi orjinal kod bloğunu paylaşıyorum.
obfuscar_4.png

Şimdi ise Release modda derlemiş olduğum uygulamamın çıktısını inceliyorum. Kodu derleme yaptığınız zaman Debug veya Release de, şifrelenmiş uygulamamız Obfuscator_Output klasörünün içinde olacaktır.

obfuscar_5.png


obfuscar_6.png


Görüldüğü üzere şifreleme yapıldı ve kod okunamaz duruma geldi.

Obfuscar, .NET uygulamalarınızın kodunu tersine mühendislik girişimlerine karşı daha güvenli hale getirmek için pratik bir çözümdür. %100 çözüm olmasa da, kodu anlamayı ve kopyalamayı oldukça zorlaştırır.

Ek Öneri: Yalnızca obfuscation tekniğine bel bağlamayın. Yazılım lisanslama, server-side doğrulama, API anahtarları gibi ek güvenlik katmanlarını da mutlaka göz önünde bulundurun.
 
Geri
Üst