2014-12-07 23 views
21

başvurulan olan Ben 1 Başvurulan derleme (test.exe, test.dll) test.exe çalışır, o kadar yayıncı adını göstermelidir zamanuygun şekilde montajları

İstediğim olduğunu sahip bir uygulama "TestCompany".

Bunu yapmak için dijital olarak imzaladım ve istediğimi yaparım. Ve eğer test.exe'un bir baytını değiştirirsem yayıncı adı "Bilinmiyor". Hangisi iyi.

Ancak, test.dll değiştirirseniz, uygulama hiçbir şey olmadığından çalışır ve yayıncı adını "TestCompany" olarak gösterir. Bu benim için iyi değil.

test.dll'a güçlü bir ad koyup app.config dosyasında <bypassTrustedAppStrongNames enabled="false" /> ekledim.

Yine, fark yok. Bu yüzden tekrar aradım ve bypassTrustedAppStrongNames'u sadece montajların güçlü isimleri olup olmadığını kontrol ettim. Doğrulama değil. Bu benim için yine iyi değil.

Tam olarak istediğim, uygulamayı korumak değil, kullanıcıyı korumaktır. Kullanıcı benim uygulamamı çalıştırıyorsa ve benden benden bahsediyorsa, benden her bayt olması gerekir. Uygulama değiştirildiyse, tek bir bayt bile, kullanıcıyı bilgilendirmeli, benden değil. Dijital adı, güçlü isimle birlikte yapmayı düşündüğü şeydir ama hepsi henüz çok iyi görünmüyor. Yoksa bir şey mi özlüyorum?

Akla gelebilecek en son yol, montajın güçlü ismini elle kontrol etmektir.

Not: Hedef .net framework benim önemli meclislerinin çoğu projemde referans olarak yüklenmez 2.0

+0

Belki de -vf parametresiyle Sn.exe'yi (Güçlü Ad Aracını) çalıştırmanız ve dönüş kodunu test etmeniz gerekir. Ya da çıktıyı bile yakalayabilir ve ayrıştırabilir. – RenniePet

+0

http://msdn.microsoft.com/en-us/library/cc713694%28v=vs.110%29.aspx İstediğiniz şeyi yapabilecek bir kayıt defteri ayarı var. – RenniePet

+0

@RenniePet: Evet, 'StrongNameSignatureVerificationEx' kullanarak manuel olarak kontrol edebilirim ancak kendisinin tasarlandığı gibi kendisini kontrol eden bir şey bekliyordum. Uygulamanın başlatılmasını hızlandırmak için doğrulamayı çerçeve 3.5'den devre dışı bıraktılar. Ama bunu bile devre dışı bırakmak da kırılmış. – xmen

cevap

1

olduğunu. Ne yapmam (bu başvuruda bulunulan ilgili, evet ... bir üs olarak tüm projelere ortak ..) birlikte çalışma arayüzleri beyan etmektir sonra kullanarak çalışma zamanında tüm meclisleri yük:

Assembly assembly = Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1"); 
Type type = assembly.GetType("MyClass"); 
object instanceOfMyType = Activator.CreateInstance(type); 

Birkaç için kullanabilirsiniz nedenler. Kullanıcı/müşteri konfigürasyonuna bağlı olarak aramam gereken farklı sınıf uygulamaları var. Ayrıca, herkese açık bir simge ve sürüm ile belirli bir derleme yüklediğinizi garanti etmek için iyi bir seçenek gibi görünüyor. Beni yaklaşık ilgilendiren

Eh, sorunuzun baktıktan sonra tür şok oldu .. O yükseltir:

Biraz araştırdıktan sonra, ben bu mesajları bulundu şimdi DLL'lere başvurma. Artık bunun ne kadar güvenli olduğunu bilmiyorum, ama sadece referans göstermekten çok daha güvenli görünüyor.

Assembly.Load ve bypassTrustedAppStrongNames'u kullanmak için MS belgelerinde herhangi bir başvuru bulamadım. Daha sonra bazı testler yapacağım, ancak bunu kullanmak daha güvenli görünüyor.

+3

Evet, internet üzerinden okuyordum, bu linkler bunlardan biri ve güçlü bir isim artı kullanımları SHA1 gibi görünüyor. Microsoft, SHA256 kullanan ancak onun .net 4.5 sürümünü kullanan EnhancedStrongName ürününü tanıttı. – xmen

İlgili konular