سؤال

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

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

جانب آخر هو أن صاحب العمل لا ترغب أن تقرأ من قبل عملائنا ، خوفا من أن المدونة قد تكون مسروقة أو على الأقل "الأفكار الجديدة".

هل هناك طريقة جيدة للتعامل مع هذه المشكلة ؟ ويفضل مع الجاهزة الحل.

البرنامج سوف تعمل على أنظمة لينكس (لذلك أنا لا أعتقد py2exe سوف تفعل خدعة).

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

المحلول

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

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

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

نصائح أخرى

"هل هناك طريقة جيدة للتعامل مع هذه المشكلة؟" لا.لا شيء يمكن أن تكون محمية ضد الهندسة العكسية.حتى البرامج الثابتة على دي في دي آلات تم إجراء هندسة عكسية ، AACS مفتاح التشفير المكشوفة.و هذا بالرغم من DMCA جعل ذلك جريمة جنائية.

لأنه لا التقنية الطريقة يمكن أن توقف الزبائن من قراءة التعليمات البرمجية الخاصة بك, لديك لتطبيق التجارية العادية الأساليب.

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

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

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

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

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

  6. تقدم على أنها خدمة ويب.ادارة العلاقات لا ينطوي على أي شعبية للعملاء.

تحليل بيثون ليست أداة تحتاج

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

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

تحليل التشويش هو في الحقيقة من الصعب

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

تحليل وجود شرط قانوني هو وسيلة جيدة للذهاب

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

ومبالغا فيه

حماية القانون

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

ترجمة الثعبان وتوزيع الثنائيات!

فكرة معقولة:

استخدام Cython, Nuitka, تسليط الجلد أو شيئا من هذا القبيل إلى تجميع الثعبان رمز C ، ثم توزيع التطبيق الخاص بك كما الثعبان الثنائية المكتبات (pyd) بدلا من ذلك.

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

Cython هو الحصول على أكثر وأكثر توافقا مع CPython ، لذلك أعتقد أنه يجب أن تعمل.(أنا في الواقع النظر في هذا المنتج..نحن بالفعل بناء بعض مرشحين يبس كما pyd/dlls حتى الشحن الخاصة بنا كود بايثون كما الثنائيات ليست مفرطة خطوة كبيرة بالنسبة لنا.)

انظر هذا بلوق وظيفة (ليس لي) للحصول على البرنامج التعليمي حول كيفية القيام بذلك.(thx @hithwen)

فكرة مجنونة:

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

أبعد مجنون:

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

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

وهنا اقتراحاتي:

و(أ) كتابة القطع تنتقد الكود كما مكتبات C أو C ++ ثم استخدام SIP أو جرعة كبيرة لفضح واجهات برمجة التطبيقات C / C ++ لبيثون مساحة الاسم.

و(ب) استخدام cython بدلا من ذلك من بيثون

و(ج) في كل من (أ) و (ب)، وينبغي أن يكون من الممكن توزيع المكتبات كما ثنائي المرخصة مع واجهة بيثون.

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

[تحرير] جواب نيك التعليق:

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

الآن إذا كان العميل تبيع البرمجيات لديهم لتغيير إشعار حقوق الطبع والنشر (والذي هو غير قانوني ، لذلك يمكنك رفع دعوى وسيفوز -> حالة بسيطة).

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

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

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

هل كان لديك نظرة على pyminifier ؟ فإنه صغر، أو تشوش، وضغط مدونة بيثون. رمز المثال تبدو سيئة جدا للهندسة العكسية عارضة.

$ pyminifier --nonlatin --replacement-length=50 /tmp/tumult.py
#!/usr/bin/env python3
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲמּ=ImportError
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱=print
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ巡=False
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ澨=object
try:
 import demiurgic
except ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲמּ:
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱("Warning: You're not demiurgic. Actually, I think that's normal.")
try:
 import mystificate
except ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲמּ:
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱("Warning: Dark voodoo may be unreliable.")
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲﺬ=ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ巡
class ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐦚(ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ澨):
 def __init__(self,*args,**kwargs):
  pass
 def ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ클(self,dactyl):
  ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ퐐=demiurgic.palpitation(dactyl)
  ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𠛲=mystificate.dark_voodoo(ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ퐐)
  return ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𠛲
 def ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐠯(self,whatever):
  ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱(whatever)
if __name__=="__main__":
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱("Forming...")
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲﺃ=ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐦚("epicaricacy","perseverate")
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲﺃ.ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐠯("Codswallop")
# Created by pyminifier (https://github.com/liftoff/pyminifier)

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

بدلا من ذلك, كما أن العديد من الملصقات المذكورة تجعل من:

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

بدلا من ذلك, كما ركلة الحمار الثعبان IDE WingIDE لا: التخلي عن رمز.هذا صحيح, إعطاء رمز بعيدا و يعود الناس على ترقيات ودعم.

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

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

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

على الرغم من أن هناك لا يوجد حل مثالي التالية يمكن القيام به:

  1. نقل بعض الحرجة قطعة من رمز بدء التشغيل في مكتبة الأم.
  2. فرض التحقق من الترخيص في مكتبة الأم.

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

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

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

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

وهكذا المصدر الثعبان هو معدلة ولكن امتدادات الملفات من الملفات .pyc * مختلفة ورموز المرجع لا تتطابق إلى مترجم python.exe العام. إذا دققت ملفات البيانات مباريات كانت جميع البيانات في شكل مصدر بيثون.

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

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

وOP 234 هو خط مصدر "# حقوق الطبع والنشر كتبت هذا" أو تجميع هذا الخط إلى رموز المرجع الذي تعادل "إذا خطأ:" إذا "# حق المؤلف" مفقود. تعطيل أساسا كتلة كاملة من التعليمات البرمجية على ما يبدو أن سبب غامض.

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

وأجد أنه متناقضة قليلا لترك المصدر أو أكواد العمليات المفتوحة للمقل العيون، ولكن استخدام SSL لحركة مرور الشبكة. SSL ليست آمنة 100٪ سواء. ولكن انها تستخدم لوقف معظم العينين من قراءته. قليلا الاحتياطات وي غير معقول.

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

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

وأفضل حل هو أن تبيع رمز كخدمة، ويقول من خلال استضافة هذه الخدمة، أو تقديم الدعم - على الرغم من أن ليس من العملي دائما

.

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

والتركيز على جعل التعليمات البرمجية لطيفة لاستخدام وقت ممكن - وجود الزبائن سعداء جعل شركة تسجيل أكثر بكثير من المال من منع بعض القرصنة النظرية ..

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

لقد كتبت مقالا مفصلا حول كيفية إعداد Cython على مشروع بيثون, التحقق من ذلك:

حماية الثعبان مصادر Cython

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

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

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

وماذا عن توقيع التعليمات البرمجية الخاصة بك مع برامج التشفير القياسية التي تجزئة وتوقيع الملفات الهامة والتحقق منها بطرق الرئيسية العامة؟

في هذه الطريقة التي يمكن أن تصدر ملف الترخيص مع مفتاح عمومي لكل عميل.

وإضافية يمكنك استخدام بفوسكاتور الثعبان مثل هذا واحد (وفقط غوغليد ذلك).

ويجب أن نلقي نظرة على كيفية الرجال في getdropbox.com يفعل ذلك للحصول على البرنامج العميل، بما في ذلك لينكس. انها صعبة للغاية للقضاء ويتطلب بعض التفكيك خلاقة جدا لتجاوز آليات الحماية.

فوجئت في عدم رؤية pyconcrete في أي إجابة.ربما لأنه أحدث من السؤال ؟

يمكن أن يكون بالضبط ما تحتاجه(ed).

بدلا من التعتيم رمز ، يشفر و يفك شفرة في وقت التحميل.

من pypi الصفحة:

حماية بيثون السيناريو تدفق العمل

  • your_script.py import pyconcrete
  • pyconcrete سوف هوك استيراد وحدة
  • عندما الخاص بك النصي لا استيراد MODULE, pyconcrete استيراد هوك سوف محاولة للعثور على MODULE.pye أولا ثم فك تشفير MODULE.pye عبر _pyconcrete.pyd وتنفيذ فك تشفير البيانات (كما .بيك المحتوى)
  • تشفير وفك تشفير المفتاح السري سجل في _pyconcrete.pyd (مثل DLL أو نحو ذلك) المفتاح السري سيكون في إخفاء رمز ثنائي ، لا يمكن انظر مباشرة في عرافة عرض

أفضل ما يمكنك القيام به مع بيثون هو أن الأمور غامضة.

  • غزة كل docstrings
  • توزيع فقط .بيك بتجميع الملفات.
  • تجميد
  • غامضة الخاص بك الثوابت داخل الصف/وحدة بحيث تساعد(config) لا تظهر كل شيء

كنت قد تكون قادرة على إضافة بعض إضافية الغموض من خلال تشفير جزء من فك الشفرة على الطاير وتمريرها إلى eval().ولكن بغض النظر عن ما تفعله شخص يمكن كسرها.

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

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

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

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

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

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

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

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

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

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

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

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

ومن الممكن أن يكون py2exe بايت رمز في مورد crypted لاطلاق C الذي يحمل وينفذ في الذاكرة. بعض الأفكار هنا و هنا .

وبعض يعتقد أيضا برنامج المعدلة النفس لجعل الاتجاه المعاكس الهندسة مكلفة.

ويمكنك أيضا العثور على الدروس لمنع مصححات و، وجعل المجمع تفشل، تعيين <ل أ href = "http://bases-hacking.org/protection-executables.html" يختلط = "نوفولو"> نقاط التوقف المصحح كاذبة وحماية الشفرة مع اختبارية. عند البحث عن "مدونة crypted" تنفيذ "في الذاكرة"] لمزيد من الروابط.

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

قصة قصيرة طويلة:

  1. تشفير شفرة المصدر الخاصة بك
  2. الكتابة الخاصة بك بيثون وحدة محمل فك تشفير الكود عند استيراد
  3. تنفيذ وحدة محمل في C/C++
  4. يمكنك إضافة المزيد من الميزات إلى وحدة محمل على سبيل المثال anti-debugger, رخصة تحكم, أجهزة بصمة ملزمة ، إلخ.

لمزيد من التفاصيل, انظر هذا الجواب.

إذا كنت مهتما في الموضوع هذا المشروع سوف تساعدك - pyprotect.

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

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

ويمكنك تثبيته من قبل pip install licensing ثم قم بإضافة التعليمات البرمجية التالية:

pubKey = "<RSAKeyValue><Modulus>sGbvxwdlDbqFXOMlVUnAF5ew0t0WpPW7rFpI5jHQOFkht/326dvh7t74RYeMpjy357NljouhpTLA3a6idnn4j6c3jmPWBkjZndGsPL4Bqm+fwE48nKpGPjkj4q/yzT4tHXBTyvaBjA8bVoCTnu+LiC4XEaLZRThGzIn5KQXKCigg6tQRy0GXE13XYFVz/x1mjFbT9/7dS8p85n8BuwlY5JvuBIQkKhuCNFfrUxBWyu87CFnXWjIupCD2VO/GbxaCvzrRjLZjAngLCMtZbYBALksqGPgTUN7ZM24XbPWyLtKPaXF2i4XRR9u6eTj5BfnLbKAU5PIVfjIS+vNYYogteQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"

res = Key.activate(token="WyIyNTU1IiwiRjdZZTB4RmtuTVcrQlNqcSszbmFMMHB3aWFJTlBsWW1Mbm9raVFyRyJd",\
                   rsa_pub_key=pubKey,\
                   product_id=3349, key="ICVLD-VVSZR-ZTICT-YKGXL", machine_code=Helpers.GetMachineCode())

if res[0] == None not Helpers.IsOnRightMachine(res[0]):
    print("An error occured: {0}".format(res[1]))
else:
    print("Success")

ويمكنك قراءة المزيد عن طريقة المفتاح العمومي RSA، وما إلى ذلك يتم تكوين هنا .

وباستخدام cxfreeze (py2exe لينكس) سوف قيام بهذه المهمة.

http://cx-freeze.sourceforge.net/

وكان متوفرا في مستودعات أوبونتو

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

  • أول ترجمة بيثون السيناريو إلى رمز الكائن
  • ثم تكرار كل رمز الكائن ، obfuscate co_code من كل رمز الكائن كما يلي
    0   JUMP_ABSOLUTE            n = 3 + len(bytecode)

    3
    ...
    ... Here it's obfuscated bytecode
    ...

    n   LOAD_GLOBAL              ? (__pyarmor__)
    n+3 CALL_FUNCTION            0
    n+6 POP_TOP
    n+7 JUMP_ABSOLUTE            0
  • حفظ رمز غامض وجوه .بيك أو .بيو الملف

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

  • أول المرجع هو JUMP_ABSOLUTE ، فإنه سيتم الانتقال إلى تعويض n

  • في إزاحة n, التعليمات هو استدعاء PyCFunction.هذه الوظيفة سوف استعادة تلك غموض بايت كود بين الإزاحة 3 و ن ، و وضع الأصلي byte-code عند الإزاحة 0.إن غموض قانون يمكن أن تكون حصلت من قبل التعليمة البرمجية التالية

        char *obfucated_bytecode;
        Py_ssize_t len;
        PyFrameObject* frame = PyEval_GetFrame();
        PyCodeObject *f_code = frame->f_code;
        PyObject *co_code = f_code->co_code;      
        PyBytes_AsStringAndSize(co_code, &obfucated_bytecode, &len)
    
  • بعد هذه الدالة ترجع التعليمات الأخيرة هو القفز إلى الإزاحة 0.حقا byte-code الآن يتم تنفيذها.

هناك أداة Pyarmor لتعتم البرامج النصية بيثون بهذه الطريقة.

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