Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 22989|Yanıt: 1

[WinForm] .net/c#, kendi dll'lerini sahte edilmekten korumak için güçlü imzalar kullanır

[Bağlantıyı kopyala]
Yayınlandı 19.10.2017 17:31:40 | | | |
.net/c# uygulaması, çağrılan dll'nin sahtecilikle değiştirilmemesini nasıl garanti eder?
https://www.itsvse.com/thread-4173-1-1.html
(Kaynak: Architect)

Geçen kez, dll'nin başkaları tarafından dövülüp uygulanabileceğini test etmiştik, bunu nasıl önleyebiliriz?



İmza Tanıtımı:
Bir montaj imzası (güçlü isim imzası olarak da bilinir), bir uygulamaya veya bileşene diğer yazılımların uygulamayı veya bileşeni açıkça tanımlamak ve referans vermek için kullanabileceği benzersiz bir kimlik verir. Güçlü bir isim, montajın basit metin adı, sürüm numarası, bölgesel bilgiler (sağlanırsa) ve kamu/özel anahtar çiftinden oluşur.

Örneğin, güçlü adlandırma, uygulama yazarları ve yöneticilerin, paylaşılan bileşenler tarafından kullanılacak bir hizmetin tam sürümünü belirlemelerine olanak tanır. Bu sayede farklı uygulamalar farklı sürümleri belirlemeye olanak tanır ve diğerlerini etkilemez. Ayrıca, bileşenin güçlü adını güvenlik kanıtı olarak kullanarak iki bileşen arasında bir güven ilişkisi oluşturabilirsiniz.

Bir assembly güçlü imzalamak için, satın alınan kodla dijital sertifika imzalamanıza gerek yoktur, .NET tarafından sağlanan sn aracıyla bir SNK dosyası oluşturabilir ve bu dosyayı kaydederek montajınızın imzasını garanti edebilirsiniz.

Ancak, bir assembly için güçlü bir imza, yürütülebilir bir dosya için dijital imza ile aynı değildir (assembly exe dosyası olsa bile). Ve MSDN açıkça exe dosyalarının güçlü şekilde imzalanmaması gerektiğini söylüyor (gerçi ben imzaladım). Bir dosya için dijital imza, aslında dosya sistemi düzeyindeki herhangi bir dosyaya imza eklemek ve işletim sistemine dosyanın kim olduğunu bildirmektir. Dosyanın özellikler diyalogunda "Dijital İmzalar" sekmesini görebilirsiniz.


DLL'yi güçlü şekilde imzalar ve ardından normal şekilde yürütülebilecek bir programla çağırırız, aşağıdaki gibi:


Ya dll'yi sahte bir DL ile değiştirirsek? Test edin ve çalıştırmanın hata olduğunu görün, bu da çağrı dll'nin dövülmesini etkili bir şekilde engelleyebilir (Test ettim, imzalı dll kodunu değiştirdim ve sonra yeniden oluşturdum, uygulama da normal çağrılabiliyor, program doğru imzalandığı sürece normal çağrılmalı!!

Hata şöyledir:

Bu diyalog yerine gerçek zamanlı (JIT) hata ayıklama çağırılması hakkında daha fazla bilgi için,
Bu mesajın sonuna bakınız.

Alışılmadık Metin **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
Dosya Adı: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e"
   TestDll.Form1.button1_Click_1'de (Nesne gönderici, EventArgs e)
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   System.Windows.Forms.Control.WmMouseUp adresinde(Message&m, MouseButtons button, Int32 clicks)
   In System.Windows.Forms.Control.WndProc(Message&m)
   In System.Windows.Forms.ButtonBase.WndProc(Message&m)
   In System.Windows.Forms.Button.WndProc(Message&m)
   System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m) içinde
   In System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m)
   In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Uyarı: Montaj bağlama logu kapalı.
Assembly bağlama hata logingini etkinleştirmek için kayıt değerini [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) 1 olarak ayarlanmıştır.
Not: Montaj bağlayıcı arıza kaydıyla ilgili bazı performans cezaları olacaktır.
Bu özelliği kapatmak için kayıt defteri değerini kaldırın [HKLM\Software\Microsoft\Fusion!] EnableLog]。



Yüklü Montajlar **************
mscorlib
    Montaj sürümü: 4.0.0.0
    Win32 sürümü: 4.7.2098.0 yapımcı: NET47REL1LAST
    Temel kodu: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
TestDll
    Montaj sürümü: 1.0.0.0
    Win32 sürümü: 1.0.0.0
    Temel kod: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe
----------------------------------------
System.Windows.Forms
    Montaj sürümü: 4.0.0.0
    Win32 sürümü: 4.7.2094.0 tarafından oluşturulan: NET47REL1LAST
    Temel kod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
Sistem
    Montaj sürümü: 4.0.0.0
    Win32 sürümü: 4.7.2093.0 tarafından geliştirildi: NET47REL1LAST
    Temel kodu: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
Sistem.Çizim
    Montaj sürümü: 4.0.0.0
    Win32 sürümü: 4.7.2046.0 yapımcı: NET47REL1
    Temel kod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Sistem.Yapılandırma
    Montaj sürümü: 4.0.0.0
    Win32 sürümü: 4.7.2046.0 yapımcı: NET47REL1
    Temel kod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
    Montaj sürümü: 4.0.0.0
    Win32 sürümü: 4.7.2098.0 yapımcı: NET47REL1LAST
    Temel kod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
    Montaj sürümü: 4.0.0.0
    Win32 sürümü: 4.7.2046.0 yapımcı: NET47REL1
    Temel kodu: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
    Montaj sürümü: 4.0.0.0
    Win32 sürümü: 4.7.2046.0 yapımcı: NET47REL1
    Temel kod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
mscorlib.resources
    Montaj sürümü: 4.0.0.0
    Win32 sürümü: 4.7.2046.0 yapımcı: NET47REL1
    Temel kod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------

JIT Hata Hata Hata Alma **************
Gerçek zamanlı (JIT) hata ayıklamayı etkinleştirmek için,
Uygulamanın veya bilgisayarın .config dosyasının (machine.config) system.windows.forms bölümünde ayarlanmalıdır
jitDebugging değeri.
Uygulama derlenirken de etkinleştirilmelidir
Hata ayıklama.

Örneğin:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

JIT hata ayıklamasından sonra yönetilmeyen tüm istisnalar etkinleştirilir
bu makinede kayıtlı JIT hata ayıklayıcısına gönderilecek,
Bu diyalogla yönetilmek yerine.







Önceki:.net/c# uygulaması, çağrılan dll'nin sahtecilikle değiştirilmemesini nasıl garanti eder?
Önümüzdeki:fsadf{:1_2:}
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com