توقيع تجميعات .NET:هل هذا يحمي جمعيتي من العبث حقاً؟

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

  •  22-08-2019
  •  | 
  •  

سؤال

أقوم بتطبيق نظام "قفل" في تطبيقي والذي يحمي تطبيقي من النسخ والاستخدام بشكل غير قانوني.يتحقق النظام من توقيع التعليمات البرمجية المستندة إلى الأجهزة ويتوقع أن يتم توقيعه باستخدام مفتاح خاص تمتلكه شركتي فقط.(يحتوي التطبيق على المفتاح العام للتحقق من صحة التوقيع.)

أريد التأكد من عدم قيام أحد بتغيير آلية القفل الخاصة بي في التطبيق، لذلك أريد التوقيع على تجميع التطبيق الخاص بي وأعتقد أن هذا منطقي.

  1. وبما أنني لم أر CLR يتحدث على الإطلاق عن كون توقيع التجميع غير صالح، أريد التأكد من أن هذا النظام يعمل بالفعل.هل هو كذلك؟ماذا يجب أن أفعل لجعله يعمل؟
  2. هل يمكن للمهاجم أن يركز جهوده على CLR حتى لا يهتم بتوقيعي؟بمعنى، إذا لم يتمكن من التلاعب بالرمز الخاص بي لأنني قمت بالتوقيع عليه، فهل يمكنه التلاعب بـ CLR؟
  3. بشكل عام، أود أن أعرف تجربتك حول وسائل الحماية وتقنيات الحماية هذه.هل يمكن لأحد أن يقترح أي شيء آخر؟
هل كانت مفيدة؟

المحلول

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

سيكون بمقدورهم بعد ذلك تعديل التعليمات البرمجية كما يريدون، لأن العميل (exe) سيشير الآن إلى ملف dll غير موقع (أو "مُعاد توقيعه").

لجعل عملية إلغاء الترجمة وإعادة الترجمة أكثر صعوبة، يمكنك محاولة إنشاء تجميع C++/CLI ذو الوضع المختلط الذي يحتوي على كل من التعليمات البرمجية المُدارة والمحلية.لكن نعم...في نهاية المطاف، يمتلك الأشخاص جميع الثنائيات الخاصة بك، وببذل ما يكفي من الجهد، من المحتمل أن يتمكنوا من الالتفاف حول أي نظام ترخيص تبتكره.

نصائح أخرى

هناك قدر معين من المفاهيم الخاطئة حول التجميعات الموقعة.إن توقيع التجميع، كما أشار ماكينير، ليس آلية آمنة يمكن استخدامها لمنع العبث بالتجميعات الخاصة بك.المقالة التالية عن codeproject تعطي معالجة جيدة للموضوع:

http://www.codeproject.com/KB/security/StrongNameExplained.aspx

إن توقيع الرمز الخاص بك يسمح فقط باكتشاف التلاعب، ولا يمنعه.يمكن لأي شخص يعرف ما يفعله إزالة توقيعك وإضافة توقيعه الخاص إذا لزم الأمر.

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

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

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

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

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