Assembly.LoadFrom - استخدام الأدلة الزائد للتحقق من توقيع اسم واضح

StackOverflow https://stackoverflow.com/questions/809934

  •  03-07-2019
  •  | 
  •  

سؤال

هل من الممكن استخدام الزائد Assembly.LoadFrom مع المعلمة الأدلة لضمان يدعى التجمع بقوة؟ أريد أن أكون قادرة على تحديد اسم التجميع، والثقافة، الإصدار، ورمز المفتاح العمومي. إذا كان أي من هذه المعلومات لا تتطابق مع التجمع يجب أن تفشل لتحميل.

هل كانت مفيدة؟

المحلول 3

ولقد وجدت طريقة أخرى للقيام بذلك.

var assemblyName = new AssemblyName(<fully qualified type name>);
assemblyName.CodeBase = <path to assembly>

Assembly.Load(assemblyName);

نصائح أخرى

ويمكنك الحصول على المفتاح العمومي جمعية بعد تحميله - إذا كان يحمل بنجاح ولديه المفتاح العمومي، ثم انه قوي اسمه:

Assembly assembly = Assembly.LoadFrom (...);
byte[] pk = assembly.GetName().GetPublicKey();

والأفضل من ذلك، تحقق الجمعية العامة المفتاح ومعلومات إصدار قبل تحميله:

AssemblyName an = AssemblyName.GetAssemblyName ("myfile.exe");
byte[] publicKey = an.GetPublicKey();
CultureInfo culture = an.CultureInfo;
Version version = an.Version;

إذا GetPublicKey () بإرجاع قيمة غير فارغة، ومن ثم التجمع بتحميل بنجاح، ولها اسم واضح صالح.

ولدي وسيلة لكسر التحقق اسم قوي لترميم System.Windows.Forms.dll. إذا أنا استخدامه، ليس هناك الكثير الذي يمكنك القيام به حيال ذلك. بلدي الخدعة تتطلب الثقة الكاملة.

ما فعلته كان تصحيح دلل، نشر دلل مصححة، NGEN ذلك، وتصحيح المحمل لالتقاط صورة منشئ الصورة الأصلية مصححة بدلا من الأصلي. ما يمكن القيام به وقد هزم السهم ngened دلل. (أنا اختبرت بالفعل هذا الطريق، وقرر يحتمل كسر كان شخص آخر البرامج سوء اختيار.)

وأنا لا أقول هذا هو فكرة جيدة للقيام به. أنا أقول أن هذا يتوقف على التحقق من التوقيعات من Assembly.Load هو فكرة سيئة.

System.ReflectionAssemblyNameFlags التعداد:

bool f_public_key = ((asm.GetName().Flags & AssemblyNameFlags.PublicKey) != 0);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top