كيفية توليد وصحة مفتاح ترخيص البرنامج؟

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

  •  11-09-2019
  •  | 
  •  

سؤال

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

كما استخدام مفتاح الترخيص مثل هذا النوع من المعتاد، أتساءل:

  1. كيف يتم حل ذلك عادة؟
  2. كيف يمكنني إنشاء المفتاح وكيف يمكن التحقق من صحة من قبل التطبيق؟
  3. كيف يمكنني أيضا تجنب وجود مفتاح يتم نشره على الإنترنت واستخدامه من قبل الآخرين الذين لم يدفع الترخيص (مفتاحا أساسيا ليس "لهم").

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

أي شيء آخر يجب أن أفكر فيه في هذا السيناريو؟

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

المحلول

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

على افتراض أنك لا ترغب في إجراء بناء خاص لكل مستخدم، ثم:

  • توليد نفسك مفتاح سري للمنتج
  • خذ اسم المستخدم
  • concatentate اسم المستخدمين والمفتاح السري والشاشة مع (على سبيل المثال) Sha1
  • تفريغ Hash Sha1 كسلسلة أبجدية رقمية. هذا هو "مفتاح المنتج" الفردي
  • ضمن البرنامج، قم بنفس التجزئة، ومقارنة مع مفتاح المنتج. إذا متساو، حسنا.

ولكن، أكرر: هذا لن يمنع القرصنة


لقد قرأت مؤخرا أن هذا النهج ليس صوتا شديدا جدا. ولكن هذا الحل ضعيف بالفعل (كما البرنامج نفسه يجب أن يشمل المفتاح السري في مكان ما) لذلك لا أعتقد أن هذا الاكتشاف يبطل الحل بقدر ما يذهب.

فقط اعتقدت حقا أن أذكر هذا، رغم ذلك؛ إذا كنت تخطط لاستخلاص شيء آخر من هذا، احذر.

نصائح أخرى

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

من الناحية المثالية، كنت تريد أن يكون لديك مفاتيح الترخيص الخاصة بك الخصائص التالية:

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

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

  3. يجب أن يكون مفتاح الترخيص قصيرا وسهل اكتبه أو إملاءه عبر الهاتف. لا تريد كل عميل يدعو الدعم الفني لأنهم لا يفهمون ما إذا كان المفتاح يحتوي على "L" أو "1". ستشكرك قسم الدعم الخاص بك على هذا الأمر، وسوف يكون لديك تكاليف أقل في هذا المجال.

فكيف تحل هذه التحديات؟

  1. الجواب بسيط ولكن صعبة تقنيا: التواقيع الرقمية باستخدام تشفير المفتاح العام. يجب أن تكون مفاتيح الترخيص في الواقع موقع "مستندات"، تحتوي على بعض البيانات المفيدة، موقعة مع المفتاح الخاص بشركتك. يجب أن تكون التواقيع جزءا من مفتاح الترخيص. يجب أن يتحقق المنتج مفاتيح الترخيص مع المفتاح العام المقابل. بهذه الطريقة، حتى لو كان شخص ما لديه حق الوصول الكامل إلى منطق المنتج الخاص بك، فلا يمكن أن تولد مفاتيح الترخيص لأنها لا تحتوي على المفتاح الخاص. سيبدو مفتاح الترخيص مثل هذا: Base32 (Concat (بيانات، private_key_crypted (hash (البيانات)))) التحدي الأكبر هنا هو أن الخوارزميات الرئيسية الكلاسيكية العامة لها أحجام توقيع كبير. RSA512 لديه توقيع 1024 بت. أنت لا تريد أن تحتوي مفاتيح الترخيص الخاصة بك على مئات الشخصيات. واحدة من أساليب الأقوى هي استخدام تشفير منحنى إهليلجي (مع تطبيقات دقيقة لتجنب براءات الاختراع الموجودة). مفاتيح ECC هي مثل 6 مرات أقصر من مفاتيح RSA، لنفس القوة. يمكنك زيادة تقليل أحجام التوقيع باستخدام خوارزميات مثل خوارزمية Schnorr Digital Signature (براءة اختراع انتهت صلاحية عام 2008 - جيد :))

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

  3. حسنا، فقط قم بإزالة الأحرف الزائدة مثل "1"، "L"، "0"، "O" من مفاتيحك. قم بتقسيم سلسلة مفتاح الترخيص إلى مجموعات من الأحرف.

إجابة بسيطة - بغض النظر عن المخطط الذي تستخدمه يمكن تصدعه.

لا تعاقب العملاء الصادقين بنظام تعني منع المتسللين، حيث سيقع المتسللون فيه بغض النظر.

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

موضوع جيد حول هذه المشكلة:http://discuss.joelonsoftware.com/default.asp؟biz.5.82298.34.

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

بعد أن تجد بعض المفاتيح أو بقع تطفو في Astalavista.box.sk. ستعرف أنك نجحت في صنع شيء كبير بما فيه الكفاية أن شخصا ما أزعجك الكراك. نبتهج!

إلى جانب ما تم بالفعل ذكر ....

أي استخدام لتطبيقات .NET قابلة للكسر بطبيعتها بسبب مشكلات اللغة الوسيطة. سوف تفكيك تفكيك بسيط من رمز .NET منتجك لأي شخص. يمكنهم بسهولة تجاوز رمز الترخيص الخاص بك في تلك المرحلة.

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

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

إذا كان منتجك معقدا، فسيخلق مشكلات الدعم الأصيل بعض الحماية لك.

يتم الآن الحفاظ على محرك C # / .NET الذي نستخدمه لجيلي الترخيص كمصدر مفتوح:

https://github.com/appsoftware/.net-licence-key-generator..

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

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

لقد استخدمت CRYPKEY. في الماضي. انها واحدة من العديد من المتاحة.

يمكنك فقط حماية البرامج حتى نقطة مع أي نظام ترخيص.

لا أعرف كيف تمنحك

لكنني أعتقد أن .NET يمكن الوصول إلى الرقم التسلسلي القرص الصلب.

هل يمكن أن يكون لديك البرنامج يرسل لك هذا وشيء Eles (مثل اسم المستخدم وعنوان MAC ل NIC)

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

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

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

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

فوائد خادم مفتاح الترخيص

المزايا مع خادم مفتاح الترخيص هي:

  1. يمكنك دائما تحديث أو حظر مفتاح ترخيص مع تأثير فوري.
  2. يمكن قفل كل مفتاح ترخيص على عدد معين من الآلات (يساعد هذا في منع المستخدمين من نشر مفتاح الترخيص عبر الإنترنت للآخرين للاستخدام).

اعتبارات

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

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

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

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

حماية الخوارزميات السرية

يمكن أن تكون معظم تطبيقات .NET عكس مهندسة بسهولة (يوجد كل من Diassembler الذي يوفره Microsoft للحصول على رمز IL وبعض المنتجات التجارية يمكن أن يسترجع التعليمات البرمجية المصدر في EG. C #). بالطبع، يمكنك دائما توضيح التعليمات البرمجية، ولكنها آمنة أبدا 100٪.

أقوم بمعظم الحالات، الغرض من أي حل ترخيص البرامج هو مساعدة الأشخاص الصادقين في أنهم صادقون (أي أن المستخدمين الصادقين الذين يرغبون في الدفع لا تنسوا الدفع بعد انتهاء التجربة، إلخ).

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

تطبيق

إذا كنت لا ترغب في تنفيذ كل شيء بنفسك، فسوف أوصي بإلقاء نظرة على هذا البرنامج التعليمي (جزء من cryptolens.)

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

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

لقد قمت بتنفيذ التنشيط المستند إلى الإنترنت على الإنترنت على برنامج شركتي (C # .NET) يتطلب مفتاح ترخيص يشير إلى ترخيص مخزن في قاعدة بيانات الخادم. يضرب البرنامج الخادم مع المفتاح ويتم إعطاؤه معلومات الترخيص التي يتم تشفيرها محليا باستخدام مفتاح RSA الذي تم إنشاؤه من بعض المتغيرات (مزيج من CPUID وغيرها من الأشياء التي لن تتغير كثيرا) على الكمبيوتر العميل ثم يخزنه السجل.

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

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

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

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

مثل عدد قليل من الآخرين المذكورة، أنا ضخم الخصم من كونها عدائية للعملاء افتراضيا - شيء أن صناعة الترخيص سيئة السمعة. لذلك سوف أتوسع في حل جيد لمشكلتك يقدم أيضا عملاء جيد UX.

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

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

ما سأفعله هو إعداد 2 أنواع الترخيصسياسات داخل كيجن) حيث تعد واحدة سياسة قاعدة للإصدار المجاني المحدود، والآخر هي سياسة للإصدار المدفوع.

لست متأكدا مما تستخدمه للحصول على المدفوعات، ولكن دعونا نفترض أنك تستخدم شيئا مثل شريط (قياسي جميل في الوقت الحاضر) webhooks.. وبعد يحتوي Keygen أيضا على webhooks (سواء كنت تستخدمه أم لا، كل هذا لا يزال قابلا للتطبيق). يمكنك دمج Keygen للتحدث مع مزود الدفع باستخدام Webhooks من كلا الجانبين (فكر: customer.created-> إنشاء ترخيص أساسي للعملاء، license.created-> شحن العملاء للحصول على الترخيص الجديد).

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

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

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

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

الآن على التحقق من صحة الترخيص: كلما سجل العميل الخاص بك في طلبك بريدي الإلكتروني / كلمة المرور، يمكنك الاستعلام عن حساب المستخدم الخاص بهم للحصول على التراخيص التي يملكونها لتحديد ما إذا كان بإمكانهم استخدامهم ميزة X. أو ميزة Y.. وبعد وبما أن طلبك الآن خدمة ذاتية, ، يمكنك السماح لعملائك بشراء ميزات إضافية مباشرة من داخل التطبيق الخاص بك!

لذلك لدينا قدم طن الأتمتة لنظام الترخيص لدينا، يمكننا ترخيص الفرد الميزات (أي نسخة كاملة مقابل النسخة الكاملة)، لقد عرضنا مدهش UX لعملائنا وتخفف أيضا واحدة من أكبر أسباب طلبات الدعم: استرداد مفتاح الترخيص.

على أي حال، وصل هذا لفترة طويلة ولكن نأمل أن يساعد شخص ما!

لا يمكن منع قرصنة البرامج تماما. يمكنك منع القرصنة غير الرسمية وهذا هو ما جميع حلول الترخيص بها.

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

يمكنك استخدام محلول طرف ثالث مجاني للتعامل مع هذا مثل Quantum-key.net إنه مجاني ومقابض المدفوعات عبر PayPal من خلال صفحة مبيعات الويب التي تنشئها لك، وإصدار المفتاح باستخدام مفتاح البريد الإلكتروني والأقفال إلى كمبيوتر محدد منع القرصنة.

يجب عليك أيضا العناية أيضا بالتباطيع / تشفير التعليمات البرمجية الخاصة بك أو يمكن بسهولة أن تكون عكس مهندسة باستخدام برنامج مثل DE4DOT و .NETREFLETCH. كود مجاني جيد Obfuscator هو Confuserex Wich سريع وبسيط الاستخدام وأكثر فعالية من البدائل باهظة الثمن.

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

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

https://quantum-key.net.

كيفية استخدام confuserex؟

https://github.com/0/0xd4d/de4dot.

https://www.red-gate.com/dynamic/products/dotnet-development/reflector/download.

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