سؤال

كيف يمكنني قفل جمعت فئات Java لمنع وبتفريغ?

أعلم أن هذا قد يكون جيدا مناقشة الموضوع على شبكة الإنترنت, ولكن أنا لا يمكن أن تأتي إلى أي استنتاج بعد إحالتها.

كثير من الناس لا توحي obfuscator, لكنهم فقط لا تسمية الطبقات وأساليب مجالات صعبة لتذكر تسلسل الأحرف ولكن ماذا عن حساسية المستمر القيم ؟

على سبيل المثال, كنت قد وضعت التشفير و فك التشفير مكون على أساس على أساس كلمة السر التشفير تقنية.الآن في هذه الحالة ، أي متوسط جافا يمكن استخدام شخص JAD فك ملف فئة و سهولة استرجاع كلمة السر قيمة (تعريف ثابت) وكذلك الملح و في المقابل يمكن فك تشفير البيانات من خلال كتابة صغيرة مستقلة البرنامج!

أو أن هذه المكونات الحساسة التي سيتم بناؤها في التعليمات البرمجية الأصلية (على سبيل المثال ، VC++) وندعو لهم طريق JNI?

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

المحلول

بعض أكثر تقدما جافا بايت كود obfuscators تفعل أكثر بكثير من مجرد اسم الفئة من الضغط. Zelix KlassMaster, ، على سبيل المثال ، يمكن أيضا التدافع رمز التدفق بطريقة تجعل من الصعب حقا أن تتبع ويعمل ممتازة رمز محسن...

أيضا العديد من obfuscators هي أيضا قادرة على التدافع الخاص بك سلسلة الثوابت إزالة رمز غير المستخدمة.

آخر حل ممكن (ليس بالضرورة باستثناء التشويش) هو استخدام تشفير ملفات JAR و العرف classloader التي لا فك التشفير (يفضل استخدام الأم مكتبة وقت التشغيل).

الثالث (وربما تقدم أقوى حماية) هو استخدام الأم في وقت مبكر المجمعين مثل دول مجلس التعاون الخليجي أو Excelsior طائرة, على سبيل المثال أن ترجمة التعليمات البرمجية Java مباشرة إلى منصة محددة الأصلية الثنائية.

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

نصائح أخرى

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

تنويه:أنا لست خبير أمني.

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

ربما غير متناظرة المفاتيح يمكن العمل:

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

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

هل يمكن أن تبقى منفصلة المفتاح العام/الخاص زوج لكل العملاء للتأكد من أن كنت في الواقع الحصول على الاشياء من حق العملاء الآن لك هي المسؤولة عن المفاتيح...

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

ماذا نفعل حيال هذا ؟

ليس محاولة السفينة الرئيسية مثل ضمنية المستمر في التعليمات البرمجية:وهو في وضع المستخدم.تجعل المستخدم مسؤولة عن بعد المفتاح.

@jatanp:أو الأفضل من ذلك ، فإنها يمكن فك وإزالة الترخيص رمز إعادة ترجمة.مع جافا, أنا حقا لا أعتقد أن هناك السليم ، هاك-دليل على حل هذه المشكلة.ولا حتى الشر القليل دونجل يمكن أن تمنع هذا مع جافا.

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

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

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

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

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

يمكنك استخدام البايت كود التشفير دون خوف.

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

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

Q:إذا كنت تشفير بلدي .فئة الملفات واستخدام مخصص classloader تحميل و فك تشفير لهم على الطاير, هذا سوف منع وبتفريغ?

A:مشكلة منع جافا بايت كود وبتفريغ تقريبا القديمة اللغة نفسها.على الرغم من مجموعة من التشويش الأدوات المتاحة في السوق ، المبتدئ جافا المبرمجين الاستمرار في التفكير في طرق جديدة وذكية لحماية حقوق الملكية الفكرية.في هذه جافا Q&A الدفعة ، أنا تبديد بعض الخرافات حول فكرة كثيرا ما اجتر في منتديات النقاش.

سهولة المتطرفة التي Java .ملفات فئة يمكن بناؤها في جافا المصادر التي تشبه أصول لديها الكثير لتفعله مع جافا بايت كود أهداف التصميم و المفاضلة.من بين أمور أخرى, جافا بايت كود تم تصميمه من أجل الاكتناز ، منصة الاستقلال شبكة التنقل وسهولة تحليل بايت رمز المترجمين و جيت (just-in-time)/نقطة ساخنة ديناميكية المجمعين.ويمكن القول إن جمعت .ملفات فئة تعبر عن مبرمج نية لذا من الواضح أنها يمكن أن تكون أسهل من تحليل التعليمات البرمجية المصدر الأصلي.

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

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

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

ولعل أعلاه جعلت تفكر, "حسنا, ماذا لو بدلا من التلاعب بايت كود تشفير جميع دروسي بعد تجميع فك تشفير لهم على الطاير داخل JVM (الذي يمكن القيام به مع العرف classloader)?ثم JVM ينفذ بلدي الأصلي رمز بايت و حتى الآن لا يوجد شيء فك أو عكس هندسة, أليس كذلك؟"

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

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