Araçlar

Obfuscate edilmiş .NET assembly'ler için üç sürüm sözleşmesi

Obfuscation, bir build adımı olmaktan çıkıp sürümü yeniden üretme, doğrulama ve hata ayıklama ihtiyacıyla bir sürüm mühendisliği konusuna dönüşüyor. Makale, Opaquer ile yapılan korumalı sürümler için kimlik, bütünlük ve tanılama olmak üzere üç sözleşme öneriyor. Üretimdeki stack trace'leri çözmek isteyen her .NET ekibi için pratik bir kontrol listesi sunuyor.

Yayın tarihi
Okuma süresi
7 dk okuma
agent çalıştırması #12
agent çalıştırması #12
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Deterministic derleme açık, Opaquer .opq dosyası Git'te tutulur ve üretim yolunda sabit seed kullanılır.
  • Strong-name imzası obfuscation'dan sonra atılır: sıra Compile, Obfuscate, Re-sign, Verify, Test, Ship olmalıdır.
  • Signing key bir CI gizli değişkeni olarak verilir; .snk veya .pfx dosyası repoya eklenmez.
  • Korumalı DLL ile birlikte map.xml, opaquer.log ve SHA-256 checksum arşivlenir.
  • Yansıma, serileştirme, DI ve plugin keşfi gibi alanlar korumalı çıktı üzerinde test edilir.
  • Aynı revizyondan iki build'in hash'i farklıysa SDK, bağımlılık ya da seed gibi girdiler incelenir.

Bir .NET assembly'sini obfuscate etmek, neyin yayınlandığını yeniden üretmeniz, doğrulamanız ya da hata ayıklamanız gerektiğinde bir sürüm mühendisliği sorununa dönüşür. Makale üç sözleşme öneriyor. Sürüm kimliği, SDK sürümü, kilitli bağımlılıklar, Opaquer .opq ayarları ve varsa sabit seed dahil her girdinin kaydedilmesi anlamına gelir. Sürüm bütünlüğü ise obfuscation sonrası yeniden imzalamayı, strong name doğrulamasını ve korumasız derleme çıktısı yerine korumalı ikililerin test edilmesini gerektirir. Sürüm tanılaması, yeniden adlandırma haritasının (map) tam sürümle birlikte arşivlenmesi demek; böylece üretimdeki stack trace'ler çevrilebilir.

Yazar ayrıca DLL'i map, log ve SHA-256 checksum ile birlikte yayınlayan bir CI desenini ve aynı revizyondan alınan iki temiz build'in hash'lerini karşılaştıran bir kontrolü anlatıyor. Hata rehberi ve sürüm kapısı kontrol listesi yazıyı tamamlıyor.

Gerçek dünyada kullanımı

  • Müşterilere kapalı kaynak .NET masaüstü ya da plugin uygulaması dağıtan ve üretim hatalarını eski sürümlerle eşleştirmesi gereken bir ekip.
  • Bir CI pipeline'ında her sürüm için korumalı DLL, map ve checksum paketi üreten bir release mühendisi.
  • Obfuscation sonrası FileLoadException veya imza doğrulama hatası alan bir WPF ya da WinForms uygulaması.

Neden önemli

Obfuscation sonrası yapılan imza ve test adımları atlanırsa, yayınlanan DLL yüklenmeyebilir ya da üretim stack trace'i okunamaz hale gelebilir. Sürüm girdilerini ve map dosyasını pipeline'da saklamak, eski bir sürümdeki hatayı daha hızlı çözmenizi sağlar.

Bu özet, DEV Community: #dotnet üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü