سؤال

أقوم بترميز برنامج على Java وقد انتهيت تقريبًا ، أود أن أعرف كيف يمكننا إنشاء إصدار تجريبي يعمل على سبيل المثال لمدة 30 يومًا ، لأنني سأرسله إلى بعض الشركات

إذن ، كيف تجعل الأمر مثل Tareware أو Trialware ، هل يمكننا أيضًا منع الوصول إلى .class في ملف JAR؟

شكرًا لك

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

المحلول

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

يمكنك العثور عليه في http://rampartlicensing.com

نصائح أخرى

هذه فكرة:

  1. قم بإنشاء قاعدة بيانات (مثل قاعدة بيانات SQL Server) متوفرة للجمهور على الويب. ستحتفظ بقائمة مفاتيح ترخيص "الإصدار التجريبي". يمكنك استخدام نفس النظام لمفاتيح ترخيص النسخ الكامل عند شراء منتجك.

  2. عند تشغيل برنامج Java الخاص بك لأول مرة ، سيتسبب في إنشاء ترخيص تجريبي يتم تخزينه في قاعدة البيانات

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

  4. يتوقف البرنامج عن العمل عند انتهاء صلاحية الترخيص

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

ربما يوجد بالفعل رمز مجاني أو مفتوح المصدر هناك بالفعل؟

لماذا لا مجرد رمز صعب تاريخ انتهاء الصلاحية في البرنامج التجريبي حتى لا تضطر إلى الاستمرار في دعمه؟ هل يمكن أن تضع هذا في Main ().

// Die after October 1, 2010
Calendar expireDate = Calendar.getInstance();
// January is 0 (y, m, d)
expireDate.set(2010, 9, 1);
// Get current date and compare
if (Calendar.getInstance().after(expireDate)) {
  // Die
  System.exit(0);
}

هذه هي الطريقة التي توزع بها Microsoft برنامج Beta على نطاق واسع. انهم فقط يعطونها تاريخ انتهاء الصلاحية.

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

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

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

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

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

بمعنى آخر ، يمكنك الحد من بعض الناس في بعض الوقت ، ولكن ليس كل الناس طوال الوقت.

أنا أعمل على برنامج Java التجاري وهو محمي.

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

اجعل جزءًا كافيًا من الحساب يحدث على جانب الخادم

هناك ولا شيء ضد هذا يمكن للمهاجم القيام به إلى جانب:

  • أعد كتابة جزء البرنامج الذي يحدث على جانب الخادم

  • قصر الخادم الخاص بك

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

فكر في الأمر بهذه الطريقة: لم ينجح أحد في اللعب على Battle.net في Blizzard باستخدام مفاتيح ترخيص مزيفة/تم إنشاؤها.

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

لماذا لم يتمكن أحد من القيام بذلك: لأن العاصفة الثلجية جعلت جزءًا كافيًا من الحساب يحدث على جانب الخادم.

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

كلما انتقلنا إلى عالم متصل دائمًا ، كلما كان من الأسهل حماية التطبيقات من القرصنة. نفس الشيء بالنسبة للمحتوى (DRM) ، للأفضل أو الأسوأ.

أتحقق من تاريخ ما الذي سيرسله لي خادم الوقت الذري في البداية في الرمز. بعد ذلك ، سأقارن هذا التاريخ بتاريخ محدد. إذا كان الوقت الذري أقل ، فإن System.exit (0).

public static GregorianCalendar getAtomicTime() throws IOException {
    BufferedReader in = null;

    try {
        URLConnection conn = new URL("http://64.90.182.55:13").openConnection();
        GregorianCalendar calendar = new GregorianCalendar();
        conn.setConnectTimeout(1000);
        in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        String atomicTime;
        while (true) {
            if ((atomicTime = in.readLine()).indexOf("*") > -1) {
                break;
            }
        }
        //System.out.println("DEBUG : " + atomicTime);
        String[] fields = atomicTime.split(" ");

        String[] date = fields[1].split("-");
        calendar.set(Calendar.YEAR, 2000 + Integer.parseInt(date[0]));
        calendar.set(Calendar.MONTH, Integer.parseInt(date[1]) - 1);
        calendar.set(Calendar.DATE, Integer.parseInt(date[2]));

        // deals with the timezone and the daylight-saving-time
        TimeZone tz = TimeZone.getDefault();
        int gmt = (tz.getRawOffset() + tz.getDSTSavings()) / 3600000;
        //System.out.println("DEBUG : " + gmt);

        String[] time = fields[2].split(":");
        calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time[0]) + gmt);
        calendar.set(Calendar.MINUTE, Integer.parseInt(time[1]));
        calendar.set(Calendar.SECOND, Integer.parseInt(time[2]));
        return calendar;
    } catch (IOException e) {
        throw e;
    } finally {
        if (in != null) {
            in.close();
        }
    }
}

فيما يتعلق بملفات الفصل ، لا يمكنك منع الوصول إليها ، ولكن يمكنك جعل نسختها غير قابلة للقراءة تمامًا التشويش.

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

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

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