2012-08-22 28 views
12

How do I protect Python code? पढ़ने के बाद, मैंने विंडोज पर वास्तव में सरल एक्सटेंशन मॉड्यूल का प्रयास करने का निर्णय लिया। मैंने पहले लिनक्स पर अपना खुद का एक्सटेंशन मॉड्यूल संकलित किया, लेकिन यह पहली बार मैंने विंडोज़ पर संकलित किया। मैं एक .dll फ़ाइल प्राप्त करने की उम्मीद कर रहा था, लेकिन इसके बजाय, मुझे एक .pyd फ़ाइल मिली। Docs कहता है कि वे समान हैं, लेकिन इसमें init[insert-module-name]() फ़ंक्शन होना चाहिए।इंजीनियर .pyd फ़ाइलों को रिवर्स करना कितना मुश्किल है?

क्या यह मानना ​​सुरक्षित है, डीएल फाइलों के रूप में उन्हें इंजीनियर करना मुश्किल है। यदि नहीं, तो .pyc फ़ाइल से .dll फ़ाइलों के पैमाने पर रिवर्स इंजीनियर को उनकी कठोरता क्या है?

+0

यदि यह कहता है "हां, .pyd फ़ाइलें डीएलएल हैं," यह पूछने में क्या बात है कि क्या वे डीएल फाइलों की तुलना में इंजीनियर को रिवर्स करने में कम मुश्किल हैं? यह अभी भी मूल कोड है ... –

+0

@MatteoItalia मुझे मुश्किल समय समझ रहा है कि वे वास्तव में कितने अलग हैं। उदाहरण के लिए, .pyc फ़ाइलों को कोड भी संकलित किया जाता है, लेकिन वे डीएलएल फ़ाइलों की तुलना में रिवर्स-इंजीनियर के लिए आसान होते हैं। – yasar

+1

@ yasar11732 .pyc फ़ाइलें मूल कोड नहीं हैं हालांकि। – delnan

उत्तर

9

वे हैं, जैसा कि आप पहले ही पाए गए हैं, एक निश्चित संरचना के साथ डीएलएल फाइलों के बराबर हैं। सिद्धांत रूप में, वे रिवर्स-इंजीनियर के लिए समान रूप से कठिन हैं, वे मशीन कोड हैं, बहुत कम मेटाडेटा की आवश्यकता है, और कोड को पहचान से परे अनुकूलित किया जा सकता है।

हालांकि, आवश्यक संरचना, और यह जानकर कि कई कार्य PyObject * एस और अन्य अच्छी तरह से परिभाषित सीपीथन प्रकारों को संभालेगा, इसका कुछ प्रभाव हो सकता है। यह असेंबली कोड को सी में मैप करने में वास्तव में मदद नहीं करेगा (यदि कुछ भी हो, तो यह सीपीथन-विशिष्ट मैक्रोज़ के कारण कठिन हो जाता है)। कोड जो ज्यादातर पाइथन प्रकारों के साथ इंटरैक्ट करता है, कोड से छेड़छाड़ करने वाले कोड से काफी अलग दिखाई देगा (और तुलनात्मक रूप से फूला हुआ)। यह समझने में भी मुश्किल हो सकता है, या यह कोड दे सकता है जो कुछ भी दिलचस्प नहीं करता है और एक रिवर्स इंजीनियर को इसे छोड़ने और पहले आपके व्यापार रहस्यों को प्राप्त करने की अनुमति देता है।

इनमें से कोई भी चिंता कोड के टुकड़ों पर लागू नहीं होती है जो शुद्ध सी कोड हैं (यानी पायथन के साथ बातचीत नहीं करते हैं)। और आपके पास शायद उनमें से बहुत सारे हैं। इसलिए इसे अंत में एक महत्वपूर्ण अंतर नहीं करना चाहिए।

1

वे मूल रूप से मूल कोड हैं। लेकिन क्योंकि प्रत्येक समारोह में मज़ेदार तर्क सूचियां होती हैं, इसलिए यह देखना मुश्किल हो सकता है कि प्रत्येक कार्य क्या करता है। मैं कहूंगा कि वे कठिन नहीं हैं, अगर वे कठिन नहीं हैं।