मैं पायथन कोड की सुरक्षा कैसे करूं?


632

मैं पायथन में सॉफ्टवेयर का एक टुकड़ा विकसित कर रहा हूं जो मेरे नियोक्ता के ग्राहकों को वितरित किया जाएगा। मेरा नियोक्ता समय प्रतिबंधित लाइसेंस फ़ाइल के साथ सॉफ्टवेयर के उपयोग को सीमित करना चाहता है।

यदि हम .py फाइलें या यहां तक ​​कि .pyc फाइल वितरित करते हैं, तो यह (डिकंपाइल) करना आसान होगा और उस कोड को हटा दें जो लाइसेंस फाइल की जांच करता है।

एक और पहलू यह है कि मेरे नियोक्ता नहीं चाहते हैं कि कोड हमारे ग्राहकों द्वारा पढ़ा जाए, इस डर से कि कोड चोरी हो सकता है या कम से कम "उपन्यास विचारों" हो सकता है।

क्या इस समस्या को संभालने का एक अच्छा तरीका है? अधिमानतः ऑफ-द-शेल्फ समाधान के साथ।

सॉफ्टवेयर लिनक्स सिस्टम पर चलेगा (इसलिए मुझे नहीं लगता कि py2exe ट्रिक करेगा)।


25
py2exe सिर्फ .pip बाइट कोड फ़ाइलों को .zip संग्रह में संग्रहीत करता है, इसलिए यह निश्चित रूप से समाधान नहीं है। फिर भी, यह तब उपयोगी हो सकता है जब एक उपयुक्त स्टार्प स्क्रिप्ट के साथ इसे संयुक्त रूप से चलाने के लिए लिनक्स बनाया जाए
Ber


यह आपके प्रश्न का सबसे व्यापक उत्तर है: wiki.python.org/moin/Asking%20for%20Help/…
माइक

जवाबों:


378

पायथन, एक बाइट-कोड-संकलित व्याख्या भाषा होने के नाते, लॉक करना बहुत मुश्किल है। यहां तक ​​कि अगर आप पी 2 एक्स जैसे एक एक्स-पैगर का उपयोग करते हैं , तो निष्पादन योग्य का लेआउट अच्छी तरह से जाना जाता है, और पायथन बाइट-कोड अच्छी तरह से समझा जाता है।

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

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


157
भले ही लाइसेंस-चेकिंग कोड इंजीनियर को उल्टा करना मुश्किल था, क्योंकि यह सी में लिखा गया है, क्या लाइसेंस-चेकिंग कोड में कॉल निकालना अभी भी अपेक्षाकृत आसान नहीं होगा?
ब्लेयर कॉनराड

59
हाँ, यह इस बात पर निर्भर करेगा कि लाइसेंस जाँच कहाँ की जाती है। यदि एक्सटेंशन में कई कॉल हैं, तो इसे मिटाना मुश्किल हो सकता है। या आप एप्लिकेशन के कुछ अन्य महत्वपूर्ण भाग को लाइसेंस चेक में स्थानांतरित कर सकते हैं ताकि कॉल को हटाकर ऐप को अपंग कर दिया जा सके।
नेड बाचेल्डर

103
वास्तव में, यह सब काम संशोधन को रोकने के बारे में नहीं है, बल्कि इसकी कठिनाई को बढ़ाने के बारे में है ताकि यह अब इसके लायक न हो। कुछ भी रिवर्स-इंजीनियर और संशोधित किया जा सकता है अगर वहाँ पर्याप्त लाभ है।
नेड बाचेल्डर

11
@ ब्लेयर कॉनराड: नहीं अगर लाइसेंस-चेकिंग कोड कार्यक्षमता को छुपाता है, तो भी। उदाmylicensedfunction(licenseblob liblob, int foo, int bar, std::string bash)
ब्रायन

8
मैंने वास्तव में वाणिज्यिक अजगर कोड को सी लाइब्रेरी के अंदर एम्बेडेड अजगर के रूप में भेज दिया है। कोड के कुछ हिस्सों को C में परिवर्तित करने के बजाय, वे पूरे अजगर कोड को एक सुरक्षात्मक C परत के अंदर छिपा देते हैं। फिर, यदि वे अजगर द्वारा आयात किए जाने वाले मॉड्यूल चाहते हैं, तो वे सी। ओपन सोर्स के शीर्ष पर एक पतली अजगर विस्तार लिखते हैं जो जीवन का एक बहुत आसान तरीका है।
माइक मैककर्न्स

454

"क्या इस समस्या को संभालने का एक अच्छा तरीका है?" नहीं। रिवर्स इंजीनियरिंग के खिलाफ कुछ भी संरक्षित नहीं किया जा सकता है। यहां तक ​​कि डीवीडी मशीनों पर फर्मवेयर रिवर्स इंजीनियर और AACS एन्क्रिप्शन कुंजी उजागर किया गया है। और यह DMCA के बावजूद कि एक आपराधिक अपराध है।

चूंकि कोई तकनीकी विधि आपके ग्राहकों को आपके कोड को पढ़ने से रोक नहीं सकती है, इसलिए आपको साधारण वाणिज्यिक विधियों को लागू करना होगा।

  1. लाइसेंस। ठेके। नियम और शर्तें। यह तब भी काम करता है जब लोग कोड पढ़ सकते हैं। ध्यान दें कि आपके कुछ पायथन-आधारित घटकों को उन घटकों का उपयोग करके सॉफ़्टवेयर बेचने से पहले आपको शुल्क का भुगतान करना पड़ सकता है। इसके अलावा, कुछ ओपन-सोर्स लाइसेंस आपको उस घटक के स्रोत या उत्पत्ति को छिपाने से रोकते हैं।

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

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

  4. दरों पर अनुकूलन इतना आकर्षक है कि वे आपको भुगतान करते हैं और वृद्धि का समर्थन करते हैं।

  5. एक लाइसेंस कुंजी का उपयोग करें जो समाप्त हो रहा है। यह क्रूर है, और आपको एक खराब प्रतिष्ठा देगा, लेकिन यह निश्चित रूप से आपके सॉफ़्टवेयर को काम करना बंद कर देता है।

  6. इसे वेब सेवा के रूप में पेश करें। SaaS में ग्राहकों के लिए कोई डाउनलोड शामिल नहीं है।


7
बिंदु 2 और भी महत्वपूर्ण है। यदि यह रिवर्स इंजीनियरिंग, प्लस वार्षिक अपडेट की तुलना में सस्ता है, तो कोई भी प्रयास नहीं करेगा और यदि ऐसा होता है, तो कोई भी सॉफ़्टवेयर के प्रदाता के बजाय हैकर का भुगतान नहीं करेगा।
एम। 3

यह सच है। रिवर्स इंजीनियरिंग उल्लेखनीय है लेकिन अधिकांश स्थितियों में महंगी है। @ S.Lott, मेरा मानना ​​है कि बिंदु 6 प्रश्न के आधार पर अधिक महत्व रखता है। यदि स्रोत कोड को वास्तव में संरक्षित करने की आवश्यकता है, तो इसे अंतिम उपयोगकर्ता से दूरस्थ होना चाहिए।
एसेटकॉर्प

7
प्रश्न: "मेरी नींद में घुसपैठियों द्वारा अपने परिवार और खुद की हत्या करने से बचाने का एक अच्छा तरीका है?" इंटरनेट: "नहीं। किसी को भी मिल सकता है, और कोई भी आवास कभी भी 100 प्रतिशत अभेद्य नहीं है। एक नश्वर मानव परिवार नौकरी के लिए गलत साधन है।"
एक साधारण एल्गोरिथ्म

प्वाइंट 5 को एक ही धारणा पर लागू नहीं किया जा सकता है कि यह रिवर्स इंजीनियर और क्रैक हो सकता है।
jjmontes

314

अजगर वह उपकरण नहीं है जिसकी आपको आवश्यकता है

आपको सही काम करने के लिए सही उपकरण का उपयोग करना चाहिए, और अजगर को मोटे तौर पर तैयार नहीं किया गया था। यह विपरीत है; पाइथन में प्रकट या संशोधित करने के लिए सब कुछ खुला या आसान है क्योंकि यह भाषा का दर्शन है।

यदि आप ऐसा कुछ चाहते हैं जो आप के माध्यम से नहीं देख सकते हैं, तो किसी अन्य टूल की तलाश करें। यह एक बुरी बात नहीं है, यह महत्वपूर्ण है कि विभिन्न उपयोगों के लिए कई अलग-अलग उपकरण मौजूद हैं।

वास्तव में मुश्किल है

यहां तक ​​कि संकलित कार्यक्रमों को रिवर्स-इंजीनियर किया जा सकता है, इसलिए ऐसा मत सोचो कि आप किसी भी कोड की पूरी तरह से रक्षा कर सकते हैं। आप obfuscated PHP का विश्लेषण कर सकते हैं, फ्लैश एन्क्रिप्शन कुंजी को तोड़ सकते हैं, आदि विंडोज के नए संस्करण हर बार टूट जाते हैं।

कानूनी आवश्यकता होने के कारण जाना एक अच्छा तरीका है

आप किसी को अपने कोड के दुरुपयोग से नहीं रोक सकते हैं, लेकिन अगर कोई करता है तो आप आसानी से खोज सकते हैं। इसलिए, यह सिर्फ एक आकस्मिक कानूनी मुद्दा है।

कोड सुरक्षा ओवररेटेड है

आजकल, व्यवसाय मॉडल उत्पादों के बजाय सेवाओं को बेचने के लिए जाते हैं। आप किसी सेवा की नकल नहीं कर सकते, न ही उसे चोरी कर सकते हैं और न ही चोरी कर सकते हैं। शायद यह प्रवाह के साथ विचार करने का समय है ...


16
अजगर वह उपकरण नहीं है जिसकी आपको आवश्यकता है। मालबोल है। :)
जॉन्डोडो

7
अच्छा जवाब है, लेकिन "आकस्मिक कानूनी मुद्दा"? वास्तव में? आप कहां रहते हैं कि आपके पास कोई कानूनी समस्या है जो आकस्मिक है?
मार्क ई। हासे

1
मुझे लगता है, अगर हमारे पास एक आवृत्ति है - कितनी बार महंगा obfuscated कोड हैक किया जाता है - हम पायथन और obfuscated कोड का उपयोग करने की व्यावहारिकता के बारे में कह सकते हैं।
सर्गच

यदि आपके कोड में दिलचस्प विशेषताएं हैं, तो जो इसका दुरुपयोग करने में सक्षम था, वह इसे फिर से वितरित करेगा @Macke
संपत्तिकॉर्प

कैसे दुनिया में आप "आसानी से पता चल जाएगा कि कोई करता है"?
Make42

145

अजगर को संकलित करें और बायनेरिज़ वितरित करें!

समझदार विचार:

उपयोग Cython , Nuitka , त्वचा शेड या सी कोड के लिए संकलन अजगर को कुछ इसी तरह है, तो अजगर द्विआधारी पुस्तकालयों (PYD) के बजाय के रूप में अपना ऐप वितरित।

इस तरह, कोई पायथन (बाइट) कोड नहीं बचा है और आपने किसी को भी अश्लीलता की उचित मात्रा में किया है (यानी आपका नियोक्ता) नियमित कोड से उम्मीद कर सकता है, मुझे लगता है। (.NET या जावा इस मामले की तुलना में कम सुरक्षित है, क्योंकि बायोटेक को बाधित नहीं किया गया है और अपेक्षाकृत आसानी से उचित स्रोत में विघटित किया जा सकता है।)

साइथॉन सीपीथॉन के साथ अधिक से अधिक संगत हो रहा है, इसलिए मुझे लगता है कि यह काम करना चाहिए। (मैं वास्तव में हमारे उत्पाद के लिए इस पर विचार कर रहा हूं .. हम पहले से ही कुछ तीसरे पक्ष के लिबास का निर्माण pyd / dlls के रूप में कर रहे हैं, इसलिए हमारे अपने अजगर कोड को बायनेरिज़ के रूप में शिपिंग करना हमारे लिए एक बहुत बड़ा कदम नहीं है।)

यह कैसे करना है पर एक ट्यूटोरियल के लिए यह ब्लॉग पोस्ट (मेरे द्वारा नहीं) देखें । (thx @hithwen)

पागल विचार:

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

पागल से परे:

आप एक एकल निष्पादन योग्य बनाने में सक्षम हो सकते हैं यदि आप अजगर रनटाइम और सभी पुस्तकालयों (dll) को सांख्यिकीय रूप से (और के साथ अनुकूलित कर सकते हैं)। इस तरह, यह सुनिश्चित करना मुश्किल होगा कि अजगर और जो भी आपके द्वारा उपयोग की जाने वाली लाइब्रेरियों को / से कॉल को इंटरसेप्ट करे। यदि आप LGPL कोड का उपयोग कर रहे हैं तो यह नहीं किया जा सकता है।


एक अजगर 3.4 Django एप्लिकेशन के साथ साइथन काम के साथ संकलन करेगा, या यह प्रयास की एक बड़ी राशि के बिना काम करने के लिए बनाया जा सकता है?
डैनियल

@ डैनियल: यकीन नहीं होता। Django पर कोशिश नहीं की। उस बारे में एक नया प्रश्न पोस्ट करने के लिए स्वतंत्र महसूस करें।
मैके 11


4
@mlvljr FWIW, बायनेरिज़ के लिए संकलित IMHO आपके सभी रहस्यों को बेचने और NSA- क्लास रिवर्स इंजीनियरिंग के खिलाफ रक्षा करने की कोशिश करने के बीच एक अच्छा व्यापार है। Esp यदि आपके पास एक बड़ा अजगर कोड आधार है और पैरानॉयड होने का कारण है। ;)
मैके 18

2
hithwen का POST अब अमान्य है।
qg_java_17137

58

मैं समझता हूं कि आप अपने ग्राहकों को अजगर की शक्ति का उपयोग करना चाहते हैं, लेकिन स्रोत कोड को उजागर नहीं करना चाहते हैं।

ये रहे मेरे सुझाव:

(ए) कोड के महत्वपूर्ण टुकड़ों को सी या सी ++ पुस्तकालयों के रूप में लिखें और फिर सीआईपी या स्विग का उपयोग करके सी / सी ++ एपीआई को पायथन नामस्थान में उजागर करें।

(b) पायथन के बजाय साइथॉन का उपयोग करें

(c) दोनों (a) और (b) में, लायब्रेरीज़ को पाइथन इंटरफेस के साथ लाइसेंस बाइनरी के रूप में वितरित करना संभव होना चाहिए।


1
एक ही नस में अन्य संभावनाएं: शेड स्किन कोड.आइपीपी / एसडस्किन और नुचका kayhayen24x7.homelinux.org/blog/nuitka-a-python-compiler
TryyyPy

मैं बस TyPyPy द्वारा सुझाए गए शेड स्किन पर एक नज़र देता हूं और यह वास्तव में अच्छा सामान प्रतीत होता है!
फ़िलिप करें

34

क्या आपके नियोक्ता को पता है कि वह किसी भी विचार को "चोरी" कर सकता है जो अन्य लोगों को आपके कोड से मिलता है? मेरा मतलब है, अगर वे आपके काम को पढ़ सकते हैं, तो क्या आप उनका कर सकते हैं। हो सकता है कि आप इस स्थिति से कैसे लाभान्वित हो सकें, यह देखते हुए कि आपको कितना नुकसान हो सकता है, इस डर से अपने निवेश का बेहतर लाभ मिलेगा।

[EDIT] निक की टिप्पणी का जवाब:

कुछ नहीं मिला और कुछ भी नहीं खोया। ग्राहक के पास वह है जो वह चाहता है (और इसके लिए भुगतान किया क्योंकि उसने खुद को बदल दिया)। चूंकि वह परिवर्तन जारी नहीं करता है, यह ऐसा है जैसे कि यह हर किसी के लिए नहीं हुआ।

अब यदि ग्राहक सॉफ़्टवेयर बेचता है, तो उन्हें कॉपीराइट नोटिस को बदलना होगा (जो कि गैरकानूनी है, इसलिए आप मुकदमा कर सकते हैं और जीतेंगे -> सरल)।

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

फिर से हमारे पास दो मामले हैं: मूल ग्राहक ने केवल कुछ प्रतियां बेचीं। इसका मतलब है कि वे वैसे भी ज्यादा पैसा नहीं कमाते थे, इसलिए परेशान थे। या वे आयतन में बिके। इसका मतलब है कि आपके लिए बेहतर मौका है कि वे इसके बारे में जानें और इसके बारे में कुछ करें।

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


क्या होगा यदि वे ग्राहकों को सॉफ़्टवेयर जारी करते हैं, और ग्राहक इसे फिर से जारी किए बिना आंतरिक रूप से संशोधित करता है?
निक टी

@ निक: किसी भी तरह से स्थिति को नहीं बदलता है। मेरे संपादन देखें।
आरोन दिगुल्ला

6
विचारों को चुराने के लिए +1। अपने ग्राहक-सेवा की शक्ति को अपने इन-हाउस समाधानों तक सीमित क्यों करें, जब आप देख सकते हैं कि दूसरे आपके समाधान पर कैसे सुधार करते हैं और तदनुसार अपने स्वयं के उत्पाद में सुधार करते हैं? "यदि आपके पास एक सेब है और मेरे पास एक सेब है और हम इन सेबों का आदान-प्रदान करते हैं, तो आप और मैं अभी भी प्रत्येक के पास एक सेब होगा। लेकिन अगर आपके पास एक विचार है और मेरे पास एक विचार है और हम इन विचारों का आदान-प्रदान करते हैं, तो हममें से प्रत्येक के पास होगा।" दो विचार। "
जॉर्डन

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

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

34

क्या तुमने 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)

6
इस पर अच्छी बात यह है कि जो कोई भी कार्यशीलता को डिकोड करने की कोशिश करता है, उसका मनोबल गिराना। कि साइथन और कुछ अतिरिक्त क्रिप्ट के साथ मॉड्यूल या इंटरनेट कॉल पर संयोजन करें, और आपको शायद पुरस्कार मिला।
m3nda

इस पैकेज को पूरा करने में कामयाब एक ही चीज है कि 'ओफ्फसकेटर' को बेवकूफ बनाना है ताकि कोड को बाधित किया जा सके।
मार्कसर

जब मैं कोशिश कर रहा था तो यह गलतियाँ कर रहा था। मुझे लगता है कि इसने डेटा को भ्रमित किया है, और इसे पूरी तरह से परिवर्तित नहीं किया है।
विक्रोबोट

पूरे प्रोजेक्ट या टेम्प्लेट इंजन के लिए काम नहीं करता है क्योंकि इसे टेम्प्लेट पर प्रदर्शित करने के लिए वैरिएबल नाम की आवश्यकता है
TomSawyer

25

मोटापे पर भरोसा न करें। जैसा कि आपने सही ढंग से निष्कर्ष निकाला है, यह बहुत सीमित सुरक्षा प्रदान करता है। UPDATE: यहां पेपर का लिंक दिया गया है, जो ड्रॉपबॉक्स में ऑबजर्बेटेड अजगर कोड रिवर्स करता है। दृष्टिकोण - ओपोड रीमैपिंग एक अच्छा अवरोध है, लेकिन स्पष्ट रूप से इसे हराया जा सकता है।

इसके बजाय, कई पोस्टरों ने इसका उल्लेख किया है:

  • रिवर्स इंजीनियरिंग समय के लायक नहीं (आपका सॉफ्टवेयर बहुत अच्छा है, यह भुगतान करने के लिए समझ में आता है)
  • उन्हें एक अनुबंध पर हस्ताक्षर करें और यदि संभव हो तो लाइसेंस ऑडिट करें।

वैकल्पिक रूप से, किक-गधा पायथन आईडीई विंगगाइड करता है: कोड को दूर करें । यह सही है, कोड को दूर करें और लोगों को उन्नयन और समर्थन के लिए वापस आएँ।


1
इस चरम विचार की तरह। एक बड़े पैमाने पर और बड़े पैमाने पर बाजार हिस्सेदारी में इसे बाहर हो जाता है, तो आपके पास समर्थन और addons के लिए एक बहुत बड़ा ग्राहक आधार है। मैं भी इस सवाल से जूझ रहा हूं और सभी "लाइसेंसिंग" उत्तर मूल रूप से बैल हैं क्योंकि यह व्यापक नकल के खिलाफ सुरक्षा नहीं करता है, फिर भी आपको किसी भी बाजार हिस्सेदारी का लाभ नहीं देता है।
थॉमस ब्राउन

लेकिन, अपग्रेड भी सिर्फ दे-एवेज हैं ... तो वे इसके लिए कैसे चार्ज करेंगे? यह सिर्फ समर्थन नहीं होगा?
Make42

विंगड बिजनेस मॉडल के बारे में: समर्थन एक सेवा, सॉफ्टवेयर एक उत्पाद है। उत्पाद पैमाने, सेवा नहीं। समर्थन केवल एक अच्छा व्यवसाय मॉडल है अगर कोई अन्य व्यवसाय मॉडल नहीं है - मतलब, अगर कोई भी आपके उत्पाद को नहीं खरीदेगा (जो भी कारण से), तो आप उत्पाद को दूर देते हैं, ताकि आपके पास एक ग्राहक आधार हो जो कम से कम आपकी सेवा खरीदता है।
10:42 पर Make42

20

साइथन का उपयोग करें । यह आपके मॉड्यूल को उच्च-प्रदर्शन करने वाली सी फ़ाइलों को संकलित करेगा, जो तब देशी बाइनरी लाइब्रेरी में संकलित किया जा सकता है। यह .pyc bytecode की तुलना में मूल रूप से गैर-प्रतिवर्ती है!

मैंने पायथन परियोजना के लिए साइथन को स्थापित करने के तरीके पर एक विस्तृत लेख लिखा है, इसे देखें:

साइथन के साथ पायथन स्रोतों की रक्षा करना


19

शिपिंग .pyc फ़ाइलों की अपनी समस्याएं हैं - वे किसी भी अन्य अजगर संस्करण के साथ संगत नहीं हैं जो उनके साथ बनाए गए अजगर संस्करण की तुलना में है, जिसका अर्थ है कि आपको पता होना चाहिए कि उत्पाद किस अजगर पर चल रहा है। यह एक बहुत सीमित कारक है।


हां, लेकिन यदि आप अपने सटीक कोड के साथ उस सटीक पायथन संस्करण को वितरित नहीं करते हैं।
एलेक्स

17

कुछ परिस्थितियों में, आपके संगठन को होस्ट करने वाली वेब सेवा में सॉफ़्टवेयर के सभी (या कम से कम एक महत्वपूर्ण भाग) को स्थानांतरित करना संभव हो सकता है।

इस तरह, लाइसेंस की जाँच आपके स्वयं के सर्वर रूम की सुरक्षा में की जा सकती है।


+1 (0 से पीछे): यह समस्या का एकमात्र सही समाधान है, इस तरह के दृष्टिकोण को सेटिंग के लिए व्यावहारिक माना जाता है।
intuited

10
बीवेयर कि अगर आपका लाइसेंसिंग वेबसर्वर नीचे चला जाता है या ग्राहकों की इंटरनेट एक्सेस डाउन हो जाती है तो आपके ग्राहक खुश नहीं होंगे कि वे लाइसेंस चेकिंग तक पहुँच के नुकसान के कारण अपने व्यवसाय को नहीं चला सकते हैं।
DevPlayer

1
@DevPlayer इसके समाधान हैं। आप एक स्थानीय कुंजी तंत्र को लागू कर सकते हैं जो सॉफ्टवेयर को दूरस्थ लाइसेंस सर्वर तक नहीं पहुंचने पर अस्थायी पहुंच की अनुमति देता है।
जेफरी

1
@ जेफ्री: यह आपको उस जगह पर वापस लाता है जहां आपने शुरू किया था - आप उस कोड को कैसे सुरक्षित रखते हैं। सुरक्षित होने के लिए, आपको अपने स्वयं के सर्वर पर कुछ मुख्य कार्यक्षमता रखने की आवश्यकता है, इसलिए इसे बदलने से काफी प्रयास शामिल होंगे (किस बिंदु पर, क्यों न केवल एक ओपन-सोर्स प्रतियोगी शुरू करें?)
Oddthinking

14

हालांकि इसका कोई सटीक समाधान नहीं है, निम्नलिखित किया जा सकता है:

  1. स्टार्टअप कोड के कुछ महत्वपूर्ण टुकड़े को देशी लाइब्रेरी में ले जाएं।
  2. देशी पुस्तकालय में लाइसेंस जांच लागू करें।

यदि मूल कोड पर कॉल हटाया जाना था, तो कार्यक्रम वैसे भी शुरू नहीं होगा। अगर इसे नहीं हटाया गया तो लाइसेंस लागू कर दिया जाएगा।

हालांकि यह एक क्रॉस-प्लेटफॉर्म या शुद्ध-पायथन समाधान नहीं है, यह काम करेगा।


3
मूल लाइब्रेरी दृष्टिकोण किसी के लिए प्रोग्रामेटिक रूप से ब्रूट को आपके लाइसेंस कुंजी सिस्टम के लिए बहुत आसान बनाता है क्योंकि वे अपने लाइसेंस को मान्य करने के लिए अपने कोड और एपीआई का उपयोग कर सकते हैं।
टॉम लेग्स

8
इसलिए? अपने लाइसेंस पर हस्ताक्षर करने के लिए RSA का उपयोग करें और उन्हें अपनी निजी कुंजी को बल देने दें, 1024 बिट्स से मिलकर। यह संभव है, लेकिन बहुत समय लगता है ... और इस तरह - पैसा।
अबगन

12

मुझे लगता है कि आपके पायथन कोड की सुरक्षा के लिए एक और तरीका है; Obfuscation विधि का हिस्सा। मेरा मानना ​​है कि माउंट और ब्लेड या ऐसा कुछ खेल था जो बदल गया और उनके अपने अजगर इंटरप्रेटर (मूल व्याख्याकार जो मुझे विश्वास है कि खुला स्रोत है) को बदल दिया है और बस ओपी कोड तालिका में ओपी कोड को अलग करने के लिए बदल दिया है, तो मानक अजगर ओपी कोड।

तो अजगर स्रोत unmodified है, लेकिन * .pyc फाइलें की फाइल एक्सटेंशन अलग हैं और ऑप कोड सार्वजनिक python.exe दुभाषिया से मेल नहीं खाते हैं। यदि आपने गेम डेटा फ़ाइलों की जाँच की तो सारा डेटा पायथन स्रोत प्रारूप में था।

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

आप उदाहरण के लिए, एक संशोधित दुभाषिया में, इसे अपने स्रोत में कुछ टिप्पणियों या डॉक्टर के तार के लिए जाँच करने की अनुमति दे सकते हैं। कोड की ऐसी लाइनों के लिए आपके पास विशेष ओपी कोड हो सकते हैं। उदाहरण के लिए:

ओपी 234 स्रोत लाइन के लिए है "# कॉपीराइट मैंने इसे लिखा था" या उस लाइन को ऑप कोड में संकलित करें जो "यदि गलत:" यदि "# कॉपीराइट" के बराबर है तो गायब है। मूल रूप से कुछ अस्पष्ट कारण प्रतीत होने वाले कोड के एक पूरे ब्लॉक को अक्षम करना।

एक उपयोग का मामला जहां एक संशोधित दुभाषिया को फिर से स्थापित करना संभव हो सकता है, जहां आपने ऐप नहीं लिखा है, ऐप बड़ा है, लेकिन आपको इसे संरक्षित करने के लिए भुगतान किया जाता है, जैसे कि जब आप किसी वित्तीय ऐप के लिए समर्पित सर्वर व्यवस्थापक हों।

मुझे यह थोड़ा विरोधाभासी लगता है कि स्रोत या ऑपकोड को नेत्रगोलक के लिए खुला छोड़ दें, लेकिन नेटवर्क ट्रैफ़िक के लिए एसएसएल का उपयोग करें। एसएसएल 100% सुरक्षित भी नहीं है। लेकिन इसे पढ़ने से ज्यादातर MOST आँखों को रोकने के लिए उपयोग किया जाता है। एक अजीब सा एहतियात समझदार है।

इसके अलावा, यदि पर्याप्त लोग यह समझते हैं कि पायथन स्रोत और ऑपकोड बहुत अधिक दिखाई दे रहे हैं, तो यह संभव है कि कोई व्यक्ति अंततः इसके लिए कम से कम एक सरल सुरक्षा उपकरण विकसित करेगा। तो अधिक लोग "पायथन ऐप की सुरक्षा कैसे करें" पूछ रहे हैं, केवल उस विकास को बढ़ावा देता है।


11

कोड की सुरक्षा करने का एकमात्र तरीका यह है कि आप इसे अपने नियंत्रण वाले सर्वर पर चलाएं और अपने क्लाइंट को उस सर्वर के साथ इंटरफेस प्रदान करें।


10

मैं किसी भी जवाब में pyconcrete नहीं देखकर हैरान था । शायद इसलिए कि यह सवाल से नया है?

यह वही हो सकता है जिसकी आपको आवश्यकता है (ed)।

कोड को बाधित करने के बजाय, यह इसे एन्क्रिप्ट करता है और लोड समय पर कम करता है।

से pypi पेज :

अजगर स्क्रिप्ट कार्य प्रवाह को सुरक्षित रखें

  • your_script.py import pyconcrete
  • pyconcrete आयात मॉड्यूल को हुक करेगा
  • जब आपकी स्क्रिप्ट आयात करती है MODULE, तो pyconcrete आयात हुक MODULE.pyeपहले खोजने की कोशिश करेगा और फिर डिक्रिप्ट डेटा (aspyc सामग्री) के MODULE.pyeमाध्यम से _pyconcrete.pydडिक्रिप्ट डेटा को निष्पादित और निष्पादित करेगा।
  • _pyconcrete.pyd (DLL या SO की तरह) गुप्त कुंजी को एन्क्रिप्ट और डिक्रिप्ट करना, गुप्त कुंजी बाइनरी कोड में छिपी होगी, इसे सीधे H

9

जो ग्राहक है में निर्भर करता है, एक सरल संरक्षण तंत्र, एक समझदार लाइसेंस समझौते के साथ संयुक्त हो जाएगा दूर किसी भी जटिल लाइसेंसिंग / एन्क्रिप्शन / कहानियो प्रणाली की तुलना में अधिक प्रभावी।

सबसे अच्छा समाधान कोड को सेवा के रूप में बेचना होगा, सेवा की मेजबानी करके या समर्थन की पेशकश करके कहेंगे - हालांकि यह हमेशा व्यावहारिक नहीं है।

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

संभव के रूप में उपयोग करने के लिए अपने कोड को अच्छा बनाने पर ध्यान केंद्रित करें - खुश ग्राहक होने से आपकी कंपनी को कुछ सैद्धांतिक बाधाओं को रोकने की तुलना में अधिक पैसा मिलेगा।


8

चोरी करने के लिए अपने कोड को कठिन बनाने के लिए एक और प्रयास है कि जाइथन का उपयोग करें और फिर जावा ऑबफ्यूजेटर का उपयोग करें ।

यह बहुत अच्छी तरह से काम करना चाहिए क्योंकि jythonc jav में python कोड का अनुवाद करता है और फिर java को bytecode से संकलित किया जाता है। इसलिए आप उन कक्षाओं को बाधित करते हैं, जिन्हें समझना वास्तव में कठिन होगा कि विघटन के बाद क्या हो रहा है, वास्तविक कोड को पुनर्प्राप्त करने का उल्लेख नहीं करना।

अजगर के साथ एकमात्र समस्या यह है कि आप c में लिखे अजगर मॉड्यूल का उपयोग नहीं कर सकते हैं।


6

हैशिंग द्वारा मानक एन्क्रिप्शन योजनाओं के साथ अपने कोड पर हस्ताक्षर करने और महत्वपूर्ण फाइलों पर हस्ताक्षर करने और सार्वजनिक कुंजी विधियों के साथ इसे जांचने के बारे में क्या?

इस तरह आप प्रत्येक ग्राहक के लिए एक सार्वजनिक कुंजी के साथ लाइसेंस फ़ाइल जारी कर सकते हैं।

अतिरिक्त आप इस तरह एक अजगर ओफ्फुसकटर का उपयोग कर सकते हैं (बस इसे गॉगल किया गया)।


1
हस्ताक्षर के लिए +1; 1-ऑबफसकेटर के लिए आप कम से कम कोड को बदलने से रोक सकते हैं।
अली अफसर 13

2
हस्ताक्षर इस संदर्भ में काम नहीं करते हैं। हस्ताक्षर-जाँच लोडर को बायपास करना हमेशा संभव होता है। उपयोगी सॉफ़्टवेयर सुरक्षा के लिए पहली चीज़ जो आपके लिए आवश्यक है वह है एक अपारदर्शी बूटस्ट्रैप तंत्र। ऐसा कुछ नहीं जो पायथन आसान बनाता है।
दादा

हां, गैर-अजगर में बूटस्ट्रैप।
अली अफशर

या न केवल स्टार्टअप पर बल्कि कई अन्य स्थानों पर लाइसेंस को मान्य करें। आसानी से लागू किया जा सकता है, और बाईपास करने के लिए समय को गंभीर रूप से बढ़ा सकता है।
अबगन

6

आपको यह देखना चाहिए कि कैसे getdropbox.com पर लोग लिनक्स सहित अपने क्लाइंट सॉफ्टवेयर के लिए इसे करते हैं। यह दरार करने के लिए काफी मुश्किल है और सुरक्षा तंत्र के अतीत को प्राप्त करने के लिए कुछ काफी रचनात्मक गड़बड़ी की आवश्यकता होती है।


8
लेकिन तथ्य यह है कि यह अतीत हो गया था कि वे असफल रहे - नीचे की रेखा सिर्फ कोशिश नहीं है, लेकिन कानूनी संरक्षण के लिए जाओ।
Chii

क्या इस सुरक्षा तंत्र को पास करने के बारे में कोई जानकारी प्रकाशित की गई है?
Mitar

6

पायथन के साथ आप जो सबसे अच्छा कर सकते हैं वह चीजों को अस्पष्ट करना है।

  • सभी डॉकस्ट्रिंग्स को स्ट्रिप करें
  • केवल .pyc संकलित फ़ाइलों को वितरित करें।
  • इसे फ्रीज करें
  • एक कक्षा / मॉड्यूल के अंदर अपने स्थिरांक को अस्पष्ट करें ताकि मदद (कॉन्फ़िगरेशन) सब कुछ न दिखाए

आप इसके कुछ हिस्से को एन्क्रिप्ट करके और इसे मक्खी पर डिक्रिप्ट करके और इसे निष्कासित () करने के लिए कुछ अतिरिक्त अस्पष्टता जोड़ने में सक्षम हो सकते हैं। लेकिन कोई फर्क नहीं पड़ता कि आप किसी को किस करते हैं।

इसमें से कोई भी एक निर्धारित हमलावर को बायटेकोड को डिसाइड करने या मदद, डायर इत्यादि के साथ आपके एपीआई के माध्यम से खुदाई करने से नहीं रोकेगा।


5

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

स्रोत कोड का अपने स्वयं के रूप में उपयोग करने से प्रतियोगियों को रोकना या उसी कोड के अपने प्रेरित संस्करण को लिखना, रक्षा करने का एक तरीका अपने प्रोग्राम लॉजिक में हस्ताक्षर जोड़ना है (यह साबित करने में सक्षम होने के लिए कुछ रहस्य कि कोड आपसे चुरा लिया गया था) और आपत्ति करें अजगर स्रोत कोड तो, यह पढ़ने और उपयोग करने के लिए मुश्किल है।

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

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

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

Obfuscated कोड के अंदर तार्किक हस्ताक्षर (जैसे आप प्रोग्राम लॉजिक द्वारा उपयोग किए जाने वाले मानों की तालिका बना सकते हैं, लेकिन हस्ताक्षर के रूप में भी उपयोग किया जाता है), जिसका उपयोग यह निर्धारित करने के लिए किया जा सकता है कि कोड आपसे उत्पन्न हुआ है। यदि कोई आपके स्वयं के उत्पाद के हिस्से के रूप में आपके ओफ़्फ़ुसेटेड कोड मॉड्यूल का उपयोग करने का निर्णय लेता है (भले ही इसे अलग-अलग प्रतीत करने के लिए इसे पुनः स्थापित करने के बाद भी) आप दिखा सकते हैं, तो वह कोड आपके गुप्त हस्ताक्षर के साथ चोरी हो गया है।


4

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

उस के साथ मैं सिर्फ अजगर अश्लीलता के लिए गूगल जाँच कर रहा था और कुछ भी नहीं बदल रहा है। एक .Net समाधान में, अस्पष्टता एक विंडोज़ प्लेटफ़ॉर्म पर आपकी समस्या का पहला तरीका होगा, लेकिन मुझे यकीन नहीं है कि किसी के पास लिनक्स पर समाधान है जो मोनो के साथ काम करता है।

अगली बात अपने कोड को संकलित भाषा में लिखना होगा, या यदि आप वास्तव में सभी तरह से जाना चाहते हैं, तो कोडांतरक में। एक निष्पादनीय भाषा की तुलना में निष्पादन योग्य छीनना बहुत कठिन होगा।

यह सब व्यापार के लिए नीचे आता है। एक छोर पर आपको अजगर में सॉफ़्टवेयर विकास में आसानी होती है, जिसमें रहस्यों को छिपाना भी बहुत कठिन होता है। दूसरे छोर पर आपके पास असेंबलर में लिखा गया सॉफ्टवेयर है, जिसे लिखना बहुत कठिन है, लेकिन रहस्यों को छुपाना बहुत आसान है।

आपके बॉस को उस निरंतरता के साथ कहीं एक बिंदु चुनना होगा जो उनकी आवश्यकताओं का समर्थन करता है। और फिर उसे आपको उपकरण और समय देना होगा ताकि आप वह बना सकें जो वह चाहता है। हालांकि मेरी शर्त यह है कि वह वास्तविक विकास लागत बनाम संभावित मौद्रिक घाटे पर आपत्ति करेंगे।


4

कहानी संक्षिप्त में:

  1. अपने स्रोत कोड को एन्क्रिप्ट करें
  2. आयात करते समय अपने कोड को डिक्रिप्ट करने के लिए अपने अजगर मॉड्यूल लोडर को लिखें
  3. मॉड्यूल लोडर को C / C ++ में लागू करें
  4. आप मॉड्यूल लोडर में अधिक सुविधाएँ जोड़ सकते हैं, उदाहरण के लिए विरोधी डिबगर, लाइसेंस नियंत्रण, हार्डवेयर फिंगरप्रिंट बाइंडिंग, आदि।

अधिक विवरण के लिए, इस उत्तर को देखें

यदि आप विषय में रुचि रखते हैं, तो यह परियोजना आपकी मदद करेगी - पीप्रोटेक्ट


3

C लांचर के लिए एक क्रिप्टेड संसाधन में py2exe बाइट-कोड होना संभव है जो इसे मेमोरी में लोड और निष्पादित करता है। यहाँ और यहाँ कुछ विचार ।

कुछ ने रिवर्स इंजीनियरिंग को महंगा बनाने के लिए एक स्व-संशोधित कार्यक्रम के बारे में सोचा है ।

आप डिबगर को रोकने के लिए ट्यूटोरियल भी पा सकते हैं, डिस्सेम्बलर को विफल कर सकते हैं, गलत डिबगर ब्रेकपॉइंट सेट कर सकते हैं और चेक कोड के साथ अपने कोड की रक्षा कर सकते हैं। अधिक लिंक के लिए ["क्रिप्टेड कोड" मेमरी "मेमोरी में"] खोजें।

लेकिन जैसा कि दूसरों ने पहले ही कहा था, यदि आपका कोड इसके लायक है, तो रिवर्स इंजीनियर अंत में सफल होंगे।


3

यदि हम सॉफ़्टवेयर लाइसेंसिंग पर ध्यान केंद्रित करते हैं, तो मैं एक और स्टैक ओवरफ्लो उत्तर पर एक नज़र डालने की सिफारिश करूंगा, जो मैंने यहां लिखा था कि लाइसेंस कुंजी सत्यापन प्रणाली का निर्माण कैसे किया जा सकता है।

GitHub पर एक ओपन-सोर्स लाइब्रेरी है जो आपको लाइसेंस सत्यापन बिट में मदद कर सकती है।

आप इसे स्थापित कर सकते हैं 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 सार्वजनिक कुंजी, आदि कॉन्फ़िगर किया गया है के बारे में अधिक पढ़ सकते हैं यहाँ


2

C / c ++ की बाइनरी फ़ाइल को सुरक्षित करने के लिए उसी तरह का उपयोग करें, अर्थात्, निष्पादन योग्य या लाइब्रेरी बाइनरी फ़ाइल में प्रत्येक फ़ंक्शन बॉडी को ओफ़्फ़ुसेट करें, प्रत्येक फ़ंक्शन प्रविष्टि की शुरुआत में एक निर्देश "कूद" डालें, ओफ़्फ़्यूस्ड कोड को पुनर्स्थापित करने के लिए विशेष फ़ंक्शन पर जाएं। बाइट-कोड पाइथन स्क्रिप्ट का बाइनरी कोड है, इसलिए

  • ऑब्जेक्ट को कोड करने के लिए पहले पाइथन स्क्रिप्ट संकलित करें
  • फिर प्रत्येक कोड ऑब्जेक्ट को पुनरावृत्त करें, प्रत्येक कोड ऑब्जेक्ट के co_code को निम्न के रूप में देखें
    0 JUMP_ABSOLUTE n = 3 + लेन (बायटेकोड)

    3
    ...
    ... यहाँ यह bytecode बाधित है
    ...

    n LOAD_GLOBAL? (__Pyarmor__)
    n + 3 CALL_FUNCTION 0
    n + 6 POP_TOP
    n + 7 JUMP_ABSOLUTE 0
  • .Pyc या .pyo फ़ाइल के रूप में संरक्षित ऑब्जेक्ट को सेव करें

उन विषम फ़ाइल (.pyc या .pyo) का उपयोग सामान्य अजगर दुभाषिया द्वारा किया जा सकता है, जब उन कोड ऑब्जेक्ट को पहली बार कहा जाता है

  • पहले ऑप JUMP_ABSOLUTE है, यह n को ऑफसेट करने के लिए कूद जाएगा

  • ऑफसेट n पर, निर्देश PyCFunction को कॉल करना है। यह फ़ंक्शन ऑफ़सेट 3 और n के बीच उन ओफ़्फ़ुसेटेड बायटेकोड को पुनर्स्थापित करेगा, और ओफ़्सेट में मूल बाइट-कोड 0. डाल देगा। ओफ़्फ़ुसेटेड कोड निम्न कोड द्वारा प्राप्त किया जा सकता है

        char * obfucated_bytecode;
        Py_ssize_t लेन;
        PyFrameObject * फ्रेम = PyEval_GetFrame ();
        PyCodeObject * f_code = फ्रेम-> f_code;
        PyObject * co_code = f_code-> co_code;      
        PyBytes_AsStringAndSize (co_code, और obfucated_bytecode, और लेन)
    
  • इस फ़ंक्शन के वापस आने के बाद, अंतिम निर्देश को ऑफसेट करने के लिए कूदना है। अब वास्तव में बाइट-कोड निष्पादित किया गया है।

इस तरह से अजगर लिपियों को बाधित करने के लिए एक उपकरण Pyarmor है।


1

cxfreeze (लिनक्स के लिए py2exe) का उपयोग करके काम करेंगे।

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

यह ubuntu रिपॉजिटरी में उपलब्ध है


5
मुझे लगता है कि बस .pyc फ़ाइलों को बंडल करता है। साइथॉन, शेड स्किन और PyPy बायटेकोड से आगे निकल जाते हैं।
सेसम टिम्मरमैन

1

अजगर स्रोत कोड को छिपाने पर एक व्यापक जवाब है, जो यहां पाया जा सकता है

संभावित तकनीकों पर चर्चा की गई है:
- संकलित बाइटकोड ( python -m compileall)
- निष्पादन योग्य रचनाकारों (या PyInstaller जैसे इंस्टॉलर ) का उपयोग करें
- एक सेवा के रूप में सॉफ़्टवेयर (मेरी राय में अपने कोड को छुपाने का सबसे अच्छा समाधान)
- पायथन स्रोत कोड ffuscators


लिंक example.com पर जाता है।
डारियन

@ डारियन आपको इस ओर इशारा करने के लिए धन्यवाद देता है। मैंने लिंक अपडेट किया।
माइक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.