|
|
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:}
|