سؤال

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

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

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

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

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

المحلول

في رأيي، فإن المشكلة الرئيسية التي سوف تواجه ليست مع خوارزمية الخاص بك التسجيل ومستوى (أو نقص) من التشويش.

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

وتوجه لجعل هذا أكثر صعوبة، ولكن لا يمكن أن تجعل من أن أصعب بكثير

-

كل شيء آخر - التشويش، توقيع قوي، والكشف عن العبث.

نصائح أخرى

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

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

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

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

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

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

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

لقد استغرق الأمر مني حوالي يومي عمل لكتابة الخادم وكائن الترخيص، لذا يعد الأمر بمثابة تمرين، ولكنه ليس علم الصواريخ.

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

وقد ترغب في إلقاء نظرة على إجابات ل<لأ href = "https://stackoverflow.com/questions/453030/how-can-i-create-a-product-key-for-my-c -app # 453051 "> هذا السؤال

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