كيف يمكنني إنشاء مفتاح المنتج بلدي C# التطبيق ؟

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

  •  19-08-2019
  •  | 
  •  

سؤال

كيف يمكنني إنشاء مفتاح المنتج بلدي C# التطبيق ؟

أنا بحاجة إلى إنشاء المنتج (أو الترخيص) المفتاح الذي يمكنني تحديث سنويا.بالإضافة إلى ذلك لا تحتاج إلى إنشاء واحدة الإصدارات التجريبية.

ذات صلة:

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

المحلول

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

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

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

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

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

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

نصائح أخرى

بمن تثق؟

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

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

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

ثم قم بجمعها بشكل اختباري وأضف أي تشفير (قابل للعكس) تريده لجعل اختراقه أكثر صعوبة.

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

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

لقد تبنت العديد من الشركات التي عملت بها أساليب عامة لتحقيق ذلك بنجاح كبير.أو ربما المنتجات لم تكن تستحق الكسر ;)

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

يمكن أن يبدأ منطق مفتاح المنتج البسيط بالقول إن مفتاح المنتج يتكون من أربع مجموعات مكونة من 5 أرقام، مثل abcde-fghij-kljmo-pqrst, ، ثم انتقل إلى تحديد العلاقات الداخلية مثل f+k+p يجب أن تساوي a، مما يعني أن الأرقام الأولى من المجموعة 2 و3 و4 يجب أن يكون إجماليها a.وهذا يعني أن 8xxxx-2xxxx-4xxxx-2xxxx صالح، وكذلك 8xxxx-1xxxx-0xxxx-7xxxx.بالطبع، ستكون هناك علاقات أخرى أيضًا، بما في ذلك العلاقات المعقدة مثل، إذا كان الرقم الثاني من المجموعة الأولى فرديًا، فيجب أن يكون الرقم الأخير من المجموعة الأخيرة فرديًا أيضًا.بهذه الطريقة سيكون هناك مولدات لمفاتيح المنتج والتحقق من مفاتيح المنتج سيتحقق ببساطة مما إذا كانت تتوافق مع جميع القواعد.

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

سواء كان الأمر تافهًا أو يصعب حله، فأنا لست متأكدًا من أنه يُحدث فرقًا كبيرًا حقًا.

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

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

أنا يجب أن أعترف أنني أفعل شيئا مجنونا.

  1. العثور على وحدة المعالجة المركزية عنق الزجاجة واستخراج إلى P/Invokeable ملف DLL.
  2. وظيفة بناء العمل تشفير جزء من ملف DLL مع XOR مفتاح التشفير.
  3. حدد المفتاح العام/الخاص المخطط ، وتشمل المفتاح العام في ملف DLL
  4. وترتيب ذلك أن فك تشفير مفتاح المنتج و XORing اثنين نصفين معا النتائج في مفتاح التشفير DLL.
  5. في DLL DllMain كود تعطيل الحماية (PAGE_EXECUTE_READWRITE) و تشفيرها باستخدام المفتاح.
  6. جعل LicenseCheck() الأسلوب الذي يجعل العقل التحقق من مفتاح الترخيص والمعلمات ، ثم اختبارية كامل ملف DLL, رمي الترخيص على أي انتهاك.و هل بعض التهيئة هنا

عندما تجد وإزالة LicenseCheck, متعة ما سوف تتبع عندما يبدأ DLL تجزئة المسببة.

هناك خيار برامج Microsoft الترخيص وحماية (SLP) الخدمات كذلك.بعد القراءة عن ذلك أنا حقا أتمنى أن استخدامه.

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

Microsoft® البرمجيات الترخيص ، الحماية (SLP) خدمات برنامج تفعيل خدمة تمكن بائعي البرامج المستقلين (ISVs) اعتماد الترخيص مرنة حيث لعملائها.مايكروسوفت SLP الخدمات توظف فريدة من نوعها حماية الطريقة التي تساعد على حماية التطبيق الخاص بك و الترخيص المعلومات مما يسمح لك للحصول على السوق بشكل أسرع مع زيادة العملاء الامتثال.

ملاحظة:هذه هي الطريقة الوحيدة التي سوف الافراج عن المنتج مع رمز الحساسة (مثل قيمة الخوارزمية).

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

أداة أخرى جيدة وغير مكلفة لمفاتيح المنتج وعمليات التنشيط هي منتج يسمى InstallKey.نلقي نظرة على www.lomacons.com

إحدى الطرق البسيطة هي استخدام المعرف الفريد العالمي (المعرف الدليلي).عادةً ما يتم تخزين المعرفات الفريدة العمومية (GUIDs) كقيم 128 بت ويتم عرضها عادةً كـ 32 رقمًا سداسيًا عشريًا مع مجموعات مفصولة بواصلات، مثل {21EC2020-3AEA-4069-A2DD-08002B30309D}.

استخدم الكود التالي في C# by System.Guid.NewGuid().

getKey = System.Guid.NewGuid().ToString().Substring(0, 8).ToUpper(); //Will generate a random 8 digit hexadecimal string.

_key = Convert.ToString(Regex.Replace(getKey, ".{4}", "$0/")); // And use this to separate every four digits with a "/".

اتمني ان يكون مفيدا.

الحيلة هي أن يكون لديك خوارزمية لا يعرفها أحد سواك (بحيث يمكن فك تشفيرها في الطرف الآخر).

هناك أشياء بسيطة مثل "اختر رقمًا أوليًا وأضف إليه رقمًا سحريًا"

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

قد يكون من المفيد أيضًا قراءة الردود عليها هذا السؤال أيضًا

هناك بعض الأدوات وواجهات برمجة التطبيقات المتاحة لذلك.ومع ذلك، لا أعتقد أنك سوف تجد واحدة مجانا؛)

يوجد على سبيل المثال مجموعة OLicense:http://www.olicense.de/index.php?lang=en

يمكنك التحقق LicenceSpot.أنه يوفر:

  • مكون الترخيص المجاني
  • التنشيط عبر الإنترنت
  • واجهة برمجة التطبيقات (API) لدمج تطبيقك ومتجرك عبر الإنترنت
  • توليد الرقم التسلسلي
  • إلغاء التراخيص
  • إدارة الاشتراكات

سأقوم بالرجوع قليلاً إلى إجابة @frankodwyer الرائعة وأتعمق قليلاً في الترخيص عبر الإنترنت.أنا مؤسس كجن, ، واجهة برمجة تطبيقات REST للترخيص مصممة للمطورين.

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

للبدء، يمكننا إنشاء 2 أنواع الترخيص (مُسَمًّى سياسات في Keygen) وكلما قام المستخدم بتسجيل حساب، يمكنك إنشاء ترخيص "تجريبي" له للبدء (الترخيص "التجريبي" ينفذ سياسة الميزات "التجريبية" الخاصة بنا)، والتي يمكنك استخدامها لإجراء عمليات فحص مختلفة داخل التطبيق، على سبيل المثال.يمكن للمستخدم استخدامها الميزة التجريبية-أ و الميزة التجريبية-B.

وبناء على ذلك، كلما كان المستخدم يشتري تطبيقك (سواء كنت تستخدم PayPal أو Stripe أو ما إلى ذلك)، يمكنك إنشاء ترخيص ينفذ سياسة الميزات "الكاملة" وربطه بمعلومات المستخدم حساب.الآن، داخل تطبيقك، يمكنك التحقق مما إذا كان المستخدم لديه ترخيص "كامل" يمكنه القيام بذلك برو-ميزة-X و برو-ميزة-Y (عن طريق القيام بشيء مثل user.HasLicenseFor(FEATURE_POLICY_ID)).

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

  1. تتيح لك حسابات المستخدمين الارتباط تراخيص متعددة و آلات متعددة إلى أ مستخدم واحد, ، مما يتيح لك نظرة ثاقبة على سلوك عميلك ومطالبتهم بإجراء "عمليات الشراء داخل التطبيق" أي.شراء نسختك "الكاملة" (مثل تطبيقات الهاتف المحمول).
  2. لا ينبغي لنا أن نطلب من عملائنا إدخال مفاتيح ترخيص طويلة، حيث يكون إدخالها شاقًا ويصعب تتبعها أي.يضيعون بسهولة.(حاول البحث عن "مفتاح الترخيص المفقود" على تويتر!)
  3. العملاء هم معتاد على استخدام البريد الإلكتروني/كلمة المرور;أعتقد أننا يجب أن نفعل ما اعتاد الناس على فعله حتى نتمكن من توفير تجربة مستخدم جيدة (UX).

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

أخيرًا، بما أنك ذكرت أيضًا أنك تريد تحديث هذه التراخيص سنويًا، يمكنك تعيين مدة على سياساتك بحيث تنتهي صلاحية التراخيص "الكاملة" بعد عام وتستمر التراخيص "التجريبية" لمدة أسبوعين، مما يتطلب من المستخدمين شراء ترخيص جديد بعد انتهاء الصلاحية.

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

يرجى التحقق من هذه الإجابة: https://stackoverflow.com/a/38598174/1275924

الفكرة هي الاستخدام كريبتولينس كخادم الترخيص.وهنا أ مثال خطوة بخطوة (في C# و VB.NET).لقد أرفقت أيضًا مقتطف رمز للتحقق من المفتاح أدناه (في C#):

var licenseKey = "GEBNC-WZZJD-VJIHG-GCMVD";
var RSAPubKey = "{enter the RSA Public key here}";

var auth = "{access token with permission to access the activate method}";
var result = Key.Activate(token: auth, parameters: new ActivateModel()
{
    Key = licenseKey,
    ProductId = 3349,
    Sign = true,
    MachineCode = Helpers.GetMachineCode()
});

if (result == null || result.Result == ResultType.Error ||
    !result.LicenseKey.HasValidSignature(RSAPubKey).IsValid())
{
    // an error occurred or the key is invalid or it cannot be activated
    // (eg. the limit of activated devices was achieved)
    Console.WriteLine("The license does not work.");
}
else
{
    // everything went fine if we are here!
    Console.WriteLine("The license is valid!");
}

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