كيفية منع الآخرين من استخدام بلدي .صافي الجمعية ؟

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

  •  01-07-2019
  •  | 
  •  

سؤال

لدي الجمعية التي يجب أن لا يمكن استخدامها من قبل أي تطبيق آخر غير المعين القابل للتنفيذ.من فضلك أعطني بعض تعليمات بذلك.

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

المحلول

يمكنك تسجيل الجمعية القابل للتنفيذ مع نفس المفتاح ثم ضع علامة في منشئ من الفئات التي تريد حمايتها:

public class NotForAnyoneElse {
  public NotForAnyoneElse() {
    if (typeof(NotForAnyoneElse).Assembly.GetName().GetPublicKeyToken() != Assembly.GetEntryAssembly().GetName().GetPublicKeyToken()) {
      throw new SomeException(...);
    }
  }
}

نصائح أخرى

في .الصافي 2.0 أو أفضل ، وجعل كل شيء الداخلية ، ومن ثم استخدام صديق الجمعيات

http://msdn.microsoft.com/en-us/library/0tke9fxk.aspx

هذا لن يتوقف عن التفكير.أريد أن تتضمن بعض المعلومات من أسفل.إذا كنت على الاطلاق ويجب أن تمنع أي شخص من الإتصال, ربما أفضل حل هو:

  1. ILMerge على .exe و .dll
  2. obfuscate النهائي .exe

يمكنك أيضا فحص مكدس الاستدعاءات الحصول على الجمعية لكل المتصل وتأكد من أنها كلها وقعت مع نفس المفتاح الجمعية.

100% من المستحيل تماما دون القفز من خلال الأطواق.

واحدة من المزايا من استخدام .صافي القدرة على استخدام التفكير ، وهذا هو حمل الجمعية وتفتيشها ، حيوي أساليب الدعوة ، وما إلى ذلك.هذا هو ما يجعل إمكانية التشغيل المتداخل بين VB.NET F# ممكن.

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

إذا كان يجب أن السفينة الخاص بك .صافي رمز بطريقة تمنع الآخرين من تنفيذ ذلك ، قد تكون قادرة على NGEN الثنائية (ترجمة ذلك إلى x86) و السفينة تلك الثنائيات.

أنا لا أعرف تفاصيل الوضع الخاص بك, ولكن التشويش يجب أن تكون جيدة بما فيه الكفاية.

هل يمكن أن ننظر أيضا في استخدام Netz للتنفيذ باكر و ضاغط.

هذا يأخذ الجمعيات الخاصة بك .ملف exe و حزم لهم في واحد قابل للتنفيذ إذا لم تكن مرئية على العالم الخارجي دون قليلا من حفر حولها.

أعتقد أن هذا يكفي لمنع وصول أكثر .صافي المبرمجين.

كبير فائدة .netz النهج هو أنه لا يتطلب منك تغيير التعليمات البرمجية الخاصة بك.فائدة أخرى هي أنه حقا يبسط عملية التثبيت.

يجب أن تكون قادرة على جعل كل شيء داخليا راقب, ومن ثم استخدام InternalsVisibleTo تنسب إلى منحة واحدة فقط الجمعية الوصول إلى الطرق الداخلية.

أمان الوصول إلى التعليمات البرمجية سمة @تشارلز غراهام يذكر StrongNameIdentityPermissionAttribute

لأن بعض الناس ذكره ، استخدام InternalsVisibleTo سمة وعلامة كل شيء الداخلية.وهذا بالطبع لن الحرس ضد التفكير.

الشيء الوحيد الذي لم يتم ذكرها هو ilmerge المجالس الخاصة بك في الخاص بك الرئيسية .exe/.dll/أيا كان هذا سوف يصل الحاجز للدخول قليلا (الناس لن يكون قادرا على رؤية assemby يجلس من تلقاء نفسه طالبا أن يكون المشار إليه) ، ولكن لن تتوقف انعكاس الطريق..

تحديث:أيضا ، IIRC, ilmerge لديه ميزة حيث يمكن أن أوتوماتيكيا يستوعب دمج الجمعيات مما يعني أنك لا تحتاج إلى استخدام في جميع InternalsVisibleTo

لست متأكدا إذا كان هذا هو المتاح avenue بالنسبة لك, ولكن ربما كنت يمكن أن تستضيف الجمعية باستخدام رأس المال العامل أو ASP.NET خدمات الويب واستخدام نوع من المصادقة على مخطط (LDAP العامة/rpivate أزواج المفاتيح, إلخ.) لضمان يسمح فقط اتصال العملاء.وهذا من شأنه الحفاظ على الخاص بك الجمعية ماديا من أي شخص آخر اليدين ويمكنك التحكم الذي يربط به.مجرد فكرة.

كنت قد تكون قادرة على تعيين هذا في أمان الوصول إلى التعليمات البرمجية السياسات في الجمعية.

يمكنك استخدام التشويش.

التي سوف تتحول:

int MySecretPrimeDetectionAlgorithm(int lastPrimeNumber);

إلى شيء غير قابل للقراءة مثل:

int Asdfasdfasdfasdfasdfasdfasdf(int qwerqwerqwerqwerqwerqwer);

الآخرين سوف لا يزال تكون قادرا على استخدام التجميع الخاص بك, ولكن سيكون من الصعب أن تجعل أي عاقل.

يبدو أنك تبحث عن الحماية أو التشويش أداة.في حين لم يكن هناك حل سحري ، أداة حماية أوصي هو smartassembly.بعض البدائل السمندل Obfuscator, dotfuscator, ، Xenocode.

للأسف, إذا كنت تعطي بايت لشخص ما أن تقرأ...إذا كان لديهم ما يكفي من الوقت والجهد ، فإنها يمكن أن تجد طريقة تحميل و استدعاء التعليمات البرمجية الخاصة بك.إلى استباقي الإجابة تعليق أراك تسأل كثيرا:السمندل منع التعليمات البرمجية الخاصة بك من يتم تحميلها مباشرة إلى عاكس أداة, ولكن لقد كان أفضل (أي:أكثر موثوقية) الخبرات مع smartassembly.

ويساعد هذا الأمل.:)

إذا كانت خدمة الإنترنت على سبيل المثال ، يمكن ضمان المعينة للتنفيذ يمر سر قيمة في رسالة SOAP.

فقط تتطلب تمرير قانون ليتم إرسالها في استخدام وظيفة الاتصال و إذا لم يكن قد أذن ثم لا شيء يعمل .setAuthorizeCode('123456') ثم في كل مكان ويمكن استخدامها قد تحقق إذا authorizeCode != 123456 ثم رمي خطأ أو مجرد الخروج...فإنه لا يبدو مثل إجابة جيدة لإعادة الاستخدام ولكن هذا هو بالضبط نقطة.

الوقت الوحيد الذي يمكن استخدامه هو أنت عندما كنت بجد رمز يأذن البرمجية في البرنامج.

مجرد فكرة يمكن ما كنت تبحث عن أو يمكن أن تلهمك إلى شيء أفضل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top