मैं जावास्क्रिप्ट को कैसे सुरक्षित (संरक्षित) कर सकता हूं? [बन्द है]


714

मैं एक जावास्क्रिप्ट एप्लिकेशन बनाना चाहता हूं जो खुला स्रोत नहीं है, और इस प्रकार मैं सीखना चाहता हूं कि मेरे जेएस कोड को कैसे बाधित किया जा सकता है? क्या यह संभव है?


15
मुझे इस कारण को सुनने में दिलचस्पी होगी कि आप जिस कोड को आगे बढ़ाने की कोशिश कर रहे हैं, वह एक उपयोगी उत्तर देने के लिए कुछ आवश्यक संदर्भ दे सकता है।
जॉनफैक्स

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


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

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

जवाबों:


404

कहानियो:

YUI कंप्रेसर का प्रयास करें । यह याहू यूआई टीम द्वारा निर्मित, संवर्धित और अनुरक्षित एक बहुत लोकप्रिय उपकरण है।

आप भी उपयोग कर सकते हैं:

अद्यतन: यह प्रश्न मूल रूप से 10 साल पहले पूछा गया था, और YUI अब नहीं रखा गया है। Google क्लोजर कंपाइलर अभी भी उपयोग में है, और UglifyJS नोड पैकेज मैनेजर के माध्यम से स्थानीय रूप से चलाया जा सकता है:npm install -g uglify-js

निजी स्ट्रिंग डेटा:

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

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

पक्षीय लेख:

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


32
मैं जोड़ना चाहता हूं कि आधार 64 एनकोड करने से सुरक्षा का कोई लाभ नहीं होगा, क्योंकि यह एक तुच्छ प्रतिवर्ती प्रक्रिया है। यहां तक ​​कि अगर यह डिक्रिप्ट क्लाइंट-साइड है, तो भी इसे एन्क्रिप्ट करने में मदद नहीं मिलेगी। एक स्ट्रिंग की सुरक्षा सुनिश्चित करने का एकमात्र तरीका ग्राहक केवल एन्क्रिप्टेड स्ट्रिंग को देखने के लिए है, और यह करने के लिए पारित हो जाता है
Claudiu

16
आगे की प्रक्रिया के लिए सर्वर।
Claudiu

9
FYI करें, ऑनलाइन YUI कंप्रेसर यहां पाया जा सकता है: refresh-sf.com/yui
mtness

7
यदि उन्हें उपयोग करने के लिए ब्राउज़र द्वारा डिक्रिप्ट किया जाना है, तो स्ट्रिंग मानों को एन्क्रिप्ट करना बेस64 एन्कोडिंग की तुलना में मामूली रूप से अधिक लाभकारी होगा। कारण यह है कि आपको ब्राउज़र को एन्क्रिप्शन कुंजी भी देनी होगी, और कुछ भी जो ब्राउज़र उपयोगकर्ता कर सकता है।
बेन

9
जब मैं YUI कंप्रेसर के साथ अपने minifying करता हूं तो मुझे यकीन है कि यह "सुरक्षित" मिनिफिकेशन विधियों का उपयोग करता है, अर्थात यह अर्ध-कॉलोन रखता है --preserve-semi। प्रायवेट वैरिएबल को a, b, c आदि के लिए रिवाइज करना आमतौर पर सुरक्षित होता है। एक और चीज जो मैं करता हूं वह यह है कि कोड में प्रत्येक अर्ध-बृहदान्त्र के बाद मिनीफ़ायर को एक पंक्ति विराम दें --line-break 0। तब उत्पादन में अगर यह त्रुटि करता है कि मेरे पास काम करने के लिए कम से कम एक वैध संदर्भ रेखा है और वह कोड मेरी विकास प्रति में पा सकते हैं। अन्यथा आप कोड की एक बड़ी लाइन पर एक त्रुटि के साथ समाप्त होते हैं और यह पता नहीं चलता कि त्रुटि कहां है।
ज़ुलाउज़

136

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

JQuery ने हाल ही में YUI कंप्रेशर से क्लोजर कंपाइलर में स्विच किया, और " ठोस सुधार " देखा


60
हां, लेकिन हाल ही में उन्होंने क्लोजर कंपाइलर छोड़ दिया और अब UglifyJS का उपयोग कर रहे हैं। क्लोजर कंपाइलर के साथ कंप्रेस करने के बाद JQuery कोड छोटी गाड़ी थी
Chielus

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

1
उपयोगी उपकरण है, लेकिन यह आपत्ति नहीं करता है जो शायद इसलिए किसी और ने इसका उल्लेख नहीं किया था।
मैडब्रेक्स

1
@ उन्नत एडवांटेज ( Developers.google.com/closure/compiler/docs/api-tutorial3 ) के साथ Madbreaks यह कोड को ओफ़्फ़्यूसेशन के बिंदु तक छोटा कर देगा। उदाहरण के लिए चर का नाम संक्षिप्तता के लिए बदला जा सकता है।
जेसन हॉल

Google सुरक्षा के लिए कोई विकल्प नहीं है
फ़िलिपो स्निपर

121

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

बौद्धिक संपदा कानून के बारे में एक वकील से बात करें और आपके कानूनी विकल्प क्या हैं। "ओपन सोर्स" का मतलब यह नहीं है कि "लोग स्रोत को पढ़ सकते हैं"। इसके बजाय, ओपन सोर्स एक विशेष लाइसेंसिंग मॉडल है जो आपके कोड को स्वतंत्र रूप से उपयोग करने और संशोधित करने की अनुमति देता है। यदि आप इस तरह का लाइसेंस नहीं देते हैं तो आपके कोड की नकल करने वाले लोग उल्लंघन करते हैं और (दुनिया के अधिकांश में) आपके पास उन्हें रोकने के लिए कानूनी विकल्प हैं।

एकमात्र तरीका जो आप वास्तव में अपने कोड की रक्षा कर सकते हैं, उसे शिप नहीं करना है। महत्वपूर्ण कोड सर्वर-साइड को स्थानांतरित करें और अपने सार्वजनिक जावास्क्रिप्ट कोड को अजाक्स कॉल करें।

यहाँ obfuscators के बारे में मेरा पूरा जवाब देखें।


14
लॉयर पर +1, लेकिन वह अन्य देशों / न्यायालयों में काम नहीं कर सकता है।
jmort253 23

16
वकील शायद खोए हुए कोड की तुलना में अधिक लागत / मुद्दों का निर्माण करते हैं, बहुत सावधानी से सोचते हैं और वकीलों को संलग्न करने के लिए बहुत सारे पैसे की व्यवस्था करते हैं !!
औरोरा

11
-1: मेरा मानना ​​है कि जावास्क्रिप्ट को समझने वाला वकील खोजना कठिन होगा ... "उल्लंघन" खोजने के लिए आवश्यक शुल्क और समय की राशि का उल्लेख नहीं करना। क्या कोई व्यक्ति वास्तव में उस लाइसेंस का उल्लंघन कर सकता है जो HTML / जावास्क्रिप्ट फ़ाइलों में दफन है यदि उसने कभी भी कुछ भी हस्ताक्षर नहीं किया है? AJAX कॉल के लिए +1।
Alerty

12
@ अधिकार 1) लाइसेंस मूल रूप से कॉपीराइट सामग्री के उपयोग को मंजूरी देने के बारे में हैं । आपको लाइसेंस के बिना इसका उपयोग करने का बहुत कम अधिकार है। अधिकार प्राप्त करने के लिए आपको इस पर हस्ताक्षर करने की आवश्यकता नहीं है। एक लाइसेंस एक अनुबंध से अलग है। 2a) चूंकि प्रश्न बिना अनुमति के HTML / Javascript का उपयोग करने और उपयोग करने वाले लोगों के बारे में है, इसलिए लाइसेंस "दफन" नहीं है, यह वहीं पर लिया जा रहा है। 2 बी) आपको लाइसेंस के बिना किसी और की कॉपीराइट सामग्री का उपयोग करने का अधिकार नहीं है। 3) वकील को जावास्क्रिप्ट को समझने की आवश्यकता नहीं है, बस बौद्धिक संपदा कानून।
श्वेर्न

4
@Alerty आपत्तिजनक मत बनो। यह उन लोगों को दंडित करने के बारे में है जो बिना अनुमति के अपनी साइट पर उपयोग के लिए फाइल कॉपी करते हैं। आप जिस बारे में बात कर रहे हैं वह एक अनुबंध है, लाइसेंस नहीं। कॉन्ट्रैक्ट्स को आपसी सहमति की आवश्यकता होती है और एक देना और लेना होता है। लाइसेंस आपको बौद्धिक संपदा का उपयोग करने का अधिकार देते हैं। लाइसेंस एक तरह से हैं (मालिक आपको चीजें दे रहा है), आपको हस्ताक्षर करने की आवश्यकता नहीं है क्योंकि आप कुछ भी नहीं दे रहे हैं। कई "सॉफ्टवेयर लाइसेंस समझौते" वास्तव में अनुबंध हैं क्योंकि वे संपत्ति के लाइसेंस से परे और कभी-कभी हास्यास्पद चीजों पर मुकदमा करने का अधिकार से परे जाते हैं।
श्वर्न नोव 2'11

49

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

किसी ने तार को सुरक्षित रखने के लिए बेस 64 का उल्लेख किया। यह एक भयानक विचार है। Base64 तुरंत उन लोगों के प्रकारों से पहचानने योग्य है जो आपके कोड को रिवर्स इंजीनियर करना चाहते हैं। पहली बात यह है कि वे इसे अनकोड करेंगे और देखेंगे कि यह क्या है।


45
मैं जहां भी जाता हूं, सबसे आम जवाब "मैं अपनी जावास्क्रिप्ट को कैसे बाधित कर सकता हूं?" "आपको इस बारे में चिंता नहीं करनी चाहिए क्योंकि कोई इसे अप्रतिबंधित कर सकता है।" यह वास्तव में एक जवाब नहीं है।
ट्रैविस विल्सन

2
@Vivek: थोड़ा देर से, लेकिन वास्तव में मेरा मतलब "सर्वर-साइड कोड" है। केवल एक सर्वर पर ब्राउज़र में नहीं बल्कि जावास्क्रिप्ट को चलाना संभव है, लेकिन मुझे नहीं पता कि यह कितना सामान्य है।
Claudiu

8
@ ट्राविस: मैंने यह नहीं कहा "आपको इसके बारे में चिंता नहीं करनी चाहिए।" मैंने सिर्फ इतना कहा कि यदि आप एक बंद-स्रोत प्रोग्राम चाहते हैं, तो आप इसे क्लाइंट-साइड जावास्क्रिप्ट में नहीं लिखना चाहते हैं, क्योंकि आप जो भी ऑब्जेक्शनेशन करते हैं, वह इसे (बहुत आसानी से) रिवर्स-इंजीनियर होने से नहीं रोक पाएगा।
क्लेयूड्यू

8
सही। जो किसी भी तरह से जवाब नहीं देता है "मैं अपने जावास्क्रिप्ट को कैसे बाधित कर सकता हूं"। ऑबफस्यूशन एक अमूर्त अवधारणा नहीं है, यह एक तकनीकी है। सेशन ने बस पूछा "कैसे?"
मैडब्रेक्स

2
@Madbreaks: सवाल उनके कोड को ओपन सोर्स न बनाने के संदर्भ में था। तत्काल तकनीकी उत्तर को स्वीकार कर लिया गया है, लेकिन बेहतर संदर्भ में उत्तर (जैसा कि, आप वास्तव में क्या करने की कोशिश कर रहे हैं), IMO है, कि आपके पास क्लाइंट-साइड जावास्क्रिप्ट नहीं हो सकता है जो ओपन-सोर्स नहीं है, क्योंकि हर किसी के पास स्रोत है, चाहे आप इसे कैसे भी मानें। किसी भी तरह से दोनों उत्तर यहां हैं और लोग दोनों से पढ़ सकते हैं और लाभ उठा सकते हैं।
क्लॉडिउ

45

जावास्क्रिप्ट ओब्फसकेशन टूल की एक संख्या है जो स्वतंत्र रूप से उपलब्ध हैं; हालाँकि, मुझे लगता है कि यह ध्यान रखना महत्वपूर्ण है कि जावास्क्रिप्ट को उस बिंदु तक सीमित करना मुश्किल है जहां यह रिवर्स-इंजीनियर नहीं हो सकता है।

उस अंत तक, कई विकल्प हैं जो मैंने कुछ हद तक ओवरटाइम के लिए उपयोग किए हैं:

  • YUI कंप्रेसर । याहू! जावास्क्रिप्ट कंप्रेसर कोड को संघनित करने का एक अच्छा काम करता है जो इसके लोड समय में सुधार करेगा। एक छोटे स्तर का ओफ्यूशेशन है जो अपेक्षाकृत अच्छी तरह से काम करता है। अनिवार्य रूप से, कंप्रेसर फ़ंक्शन के नामों को बदल देगा, सफेद स्थान को हटा देगा और स्थानीय चर को संशोधित करेगा। यह वही है जो मैं अक्सर उपयोग करता हूं। यह एक ओपन-सोर्स जावा-आधारित टूल है।

  • JSMin डगलस क्रॉकफोर्ड द्वारा लिखित एक उपकरण है जो आपके जावास्क्रिप्ट स्रोत को छोटा करने का प्रयास करता है। क्रॉकफोर्ड के स्वयं के शब्दों में, "जेएसएमिन को आक्षेप नहीं है, लेकिन यह बदसूरत करता है।" ब्राउज़रों में तेज़ी से लोड करने के लिए अपने स्रोत के आकार को छोटा करना प्राथमिक लक्ष्य है।

  • नि: शुल्क जावास्क्रिप्ट Obfuscator । यह एक वेब-आधारित टूल है जो वास्तव में इसे एन्कोड करके आपके कोड को बाधित करने का प्रयास करता है। मुझे लगता है कि एन्कोडिंग के रूप में इसके व्यापार-नापसंद (या आक्षेप) फाइलों की कीमत पर आ सकते हैं; हालाँकि, यह व्यक्तिगत प्राथमिकता का मामला है।


19
चूँकि जावास्क्रिप्ट कोड क्लाइंट की मशीन पर चलना चाहिए, यह उस बिंदु पर रोकना मुश्किल नहीं है जहाँ कोड को उल्टा-इंजीनियर नहीं किया जा सकता है लेकिन असंभव है
Schwern

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

1
@PeterR एक पाठ संपादक में खोज / प्रतिस्थापित करने के लिए अपने जीवन बनाने जा रहा है कि इसे पढ़ने या रिवर्स इंजीनियर की कोशिश करने में बहुत अधिक कठिन है। यह सही नहीं है, लेकिन संदर्भ सुराग को हटाकर झुंझलाहट / कठिनाई की एक अतिरिक्त परत जोड़ देता है। अधिकांश प्रोग्रामर आपके लिए उतने स्मार्ट नहीं हैं, जो इस तरह के एक महान निवारक बनाता है।
SED

1
@ क्या मुझे एक भी प्रोग्रामर पता नहीं है जो [ZER0O00OIFY, ZER0000OIFY, ZEROO00OIFY, ZEROOO0OIFY]कम से कम [var1, var2,..]एक मिनट के भीतर var के एक गुच्छा को ढूंढ / बदल न सके । मैं शाब्दिक रूप से डी-क्रुइलाइज़ कर सकता हूं, फिर से इंडेंट कर सकता हूं, और दो मिनट के भीतर वेर नाम बदल सकता हूं। और नहीं, मैं एक औसत जूनियर देव की तुलना में अधिक चालाक हूं। सरल तथ्य यह है, ग्राहक पक्ष जेएस को अस्पष्ट करने का कोई तरीका नहीं है। आप अपने आप को 5 मिनट, मैक्स खरीद सकते हैं, लेकिन इसका कोई फायदा नहीं है। यह सामान वास्तव में किसी को बेचने के लिए है जो जोड़ा गया "सुरक्षा" पर कोड नहीं जानता है। कोई भी व्यक्ति जिसने कभी JS की लाइन नहीं लिखी है, वह बकवास खरीदेगा।
पीटर आर

3
@PeterR "मैं शाब्दिक रूप से डी-क्रुइलाइज़, री-इंडेंट, और दो मिनट के भीतर var नामों की खोज / प्रतिस्थापित कर सकता हूं" - निश्चित रूप से, आगे बढ़ो और कोशिश करो कि एक मल्टी-पास मिनीफाइड, obfuscated, एक संरचना के साथ 20MB कोडबेस डेजल पर ले जाए सप्ताह मूल, टिप्पणी स्रोत कोड के साथ भी समझने के लिए। और इसे और भी कठिन बनाने के लिए, ओफ़्फ़क्यूशन टूल्स मौजूद हैं जो जानबूझकर इंडेंटेशन, लाइन्स इत्यादि को बदलने पर आपके कोड को तोड़ देते हैं।
जॉन वीज़

23

मुझे क्या करना होगा:

A. हैकर को ट्रोल करो!

यह मेरे नकली / ओफ़्स्कुलेटेड गुप्त जावास्क्रिप्ट कोड LAUNCHER के दूसरे भाग में होगा। जिसे आप सोर्स कोड में देखते हैं।

यह कोड क्या है?

  1. असली कोड लोड करता है
  2. एक कस्टम हैडर सेट करता है
  3. एक कस्टम चर पोस्ट करता है

var ajax=function(a,b,d,c,e,f){
 e=new FormData();
 for(f in d){e.append(f,d[f]);};
 c=new XMLHttpRequest();
 c.open('POST',a);
 c.setRequestHeader("Troll1","lol");
 c.onload=b;
 c.send(e);
};
window.onload=function(){
 ajax('Troll.php',function(){
  (new Function(atob(this.response)))()
 },{'Troll2':'lol'});
}

B. कोड को थोड़ा कम करें

वो क्या है?

  1. Base64 में ऊपर जैसा ही कोड है
  2. यह SECRET जावास्क्रिप्ट कोड नहीं है

(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()

C वास्तविक कोड के साथ php फ़ाइल को प्रदर्शित करने के लिए एक कठिन बनाएँ

यह php कोड क्या है?

  1. सही रेफ़रर के लिए चेक (आपके लॉन्चर का डोमेन / डीआईआर / कोड)
  2. कस्टम हेडर के लिए चेक
  3. कस्टम POST चर के लिए जाँच करता है

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

<?php
$t1=apache_request_headers();
if(base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
 echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
 echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>

बेस 64 रेफ़रर = http://here.is/my/launcher.html

SECRET जावास्क्रिप्ट = document.body.appendChild(document.createElement('div')).innerText='Awesome';

FAKE = window.open('', '_self', '');window.close();

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

तो ... वहाँ एक आसान तरीका है कोड मिल रहा है? document.body.appendChild(document.createElement('div')).innerText='Awesome';

मुझे यकीन नहीं है कि अगर यह काम करता है, लेकिन मैं क्रोम और जाँच तत्वों, संसाधन, नेटवर्क, स्रोत, समयरेखा, प्रोफ़ाइल, ऑडिट का उपयोग कर रहा हूं, लेकिन मुझे ऊपर की रेखा नहीं मिली।

नोट 1: यदि आप इंस्पेक्ट एलिमेंट से ट्रोल.एफपी यूआरएल खोलते हैं-> क्रोम में नेटवर्क आपको नकली कोड मिलता है।

नोट 2: पूरा कोड आधुनिक ब्राउज़रों के लिए लिखा गया है। पॉलीफिल को अधिक कोड की आवश्यकता होती है।

संपादित करें

launcher.html

<!doctype html><html><head><meta charset="utf-8"><title></title><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>

Troll.php

<?php $t1=apache_request_headers();if(/*base64_encode($_SERVER['HTTP_REFERER'])=='PUT THE LAUNCHER REFERER HERE'&&*/$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';}else{echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';}; ?>

1
ओह और हाँ मैं जावास्क्रिप्ट कोड को भी बाधित करूंगा।
cocco

1
यह कुछ ऐसा है जिसके बारे में मैं सिर्फ पटाखा को ट्रोल करने के बारे में सोच रहा था। मैं PHP का उपयोग किए बिना कुछ इस तरह देखना चाहूंगा :)
pgarciacamou

6
भले ही यह मजाकिया हो, एक वेब डेवलपर जो साइट का ठीक से निरीक्षण करने में सक्षम है, किसी तरह स्रोत कोड प्राप्त कर सकता है। मैं वास्तव में सोचता हूं कि जिस समय आप इसे ऑनलाइन डालते हैं, उस समय किसी भी प्रकार के डेटा को छिपाने का कोई तरीका नहीं है।
cocco

यह किसी भी तरह का मोटापा नहीं है जो मुझे लगता है। हालाँकि, कंसोल को खोलना जानता है, वह base64 एन्कोडिंग / डिकोडिंग के बारे में भी जान सकता है, बहुत ही सरल।
टी। कठुआ

19

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


7
JScrambler सदस्यता बहुत महंगी है ... सबसे सस्ती सदस्यता के लिए न्यूनतम 3 महीने की कीमत $ 145 की आवश्यकता होती है - यह पागल है।
बारबशिन

1
उनके पास अब मुफ्त की योजना है। अन्य सदस्यता योजनाएं अभी भी उस तरह की हैं।
user7610

2
नि: शुल्क योजना में केवल अनुकूलन और न्यूनतम शामिल हैं।
जीन होमिनल

1
'नि: शुल्क योजना में अनुकूलन और न्यूनतम शामिल हैं', हाँ नहीं। आपत्ति और अनुकूलन एक साथ नहीं चलते हैं, क्षमा करें।
नीक न्यूमैन

2
आज JScrambler की वेबसाइट और अधिक-मूल्य निर्धारण योजनाओं को देखते हुए मैं एक मुफ्त विकल्प नहीं देख सकता। केवल एक नि: शुल्क परीक्षण ..
KDT

18

व्याख्या की गई भाषाओं के साथ समस्या यह है कि आप उन्हें काम करने के लिए स्रोत भेजते हैं (जब तक कि आपके पास बायटेकोड के लिए कंपाइलर नहीं है, लेकिन फिर से, यह विघटित करने के लिए काफी तुच्छ है)।

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


17

अधिकांश अन्य उत्तरों के विपरीत, जो मैं YUI कंप्रेसर के खिलाफ सुझाता हूं; आपको Google बंद का उपयोग करना चाहिए ।

ज्यादा नहीं क्योंकि यह अधिक संपीड़ित करता है, लेकिन ज्यादातर इसलिए कि यह जावास्क्रिप्ट त्रुटियों को पकड़ लेगा जैसे कि a = [1,2,3,];IE जाना हैयरवायर।


5
त्रुटियों के खिलाफ अपने कोड की जाँच नहीं करनी चाहिए और असंगति को किसी भी तरह से आगे बढ़ने से पहले किया जाना चाहिए ?? वास्तव में obfuscating के साथ कुछ नहीं करना है
phil294

13

एक गैर-ओपन-सोर्स जावास्क्रिप्ट-आधारित एप्लिकेशन काफी मूर्खतापूर्ण है। जावास्क्रिप्ट एक क्लाइंट-साइड व्याख्या की गई भाषा है .. ओफ़्यूसकेशन बहुत संरक्षण नहीं है ..

JS obfuscation आमतौर पर स्क्रिप्ट के आकार को कम करने के लिए किया जाता है, बजाय इसे "सुरक्षित" करने के। यदि आप ऐसी स्थिति में हैं जहाँ आप नहीं चाहते कि आपका कोड सार्वजनिक हो, तो जावास्क्रिप्ट सही भाषा नहीं है।

चारों ओर बहुत सारे उपकरण हैं, लेकिन अधिकांश में एक कारण के लिए "कंप्रेसर" (या "मिनिफायर") शब्द है।


11

आप क्लाइंट साइड कोड को सुरक्षित नहीं कर सकते हैं: Google क्रोम पर बस F12 दबाएं, जावास्क्रिप्ट निष्पादन को रोकें और आपको सभी स्ट्रिंग, यहां तक ​​कि एन्क्रिप्ट किए गए भी मिलेंगे। इसे सुशोभित करें और चर नाम बदलें और आपको लगभग मूल कोड मिलेगा।

यदि आप सर्वर साइड जावास्क्रिप्ट (यानी NodeJS) लिख रहे हैं, तो आपके सर्वर में किसी को हैक होने का डर है और हैकर को और अधिक कठिन बनाना चाहते हैं, जिससे आपको अपनी पहुंच वापस पाने के लिए अधिक समय मिल सके, फिर javacript compilers का उपयोग करें :

आपको उन्नत संकलन पर क्लोजर कंपाइलर का उपयोग करने की आवश्यकता है, क्योंकि यह एकमात्र उपकरण है जो आपके सभी चर का नाम बदल देता है, भले ही उन का उपयोग कई फ़ाइलों / मॉड्यूल में किया गया हो। लेकिन यह सिर्फ एक समस्या है: यह केवल काम करता है यदि आप इसे कोडिंग शैली में लिखते हैं


क्लोजर कंपाइलिंग कोड नहीं है: पी
नीक न्यूमैन

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

1
अच्छा विचार नहीं। यदि मिनिफ़ायर में बग है तो मिनिफ़ाइंग / कंपाइलिंग कोड सर्वर-साइड सुरक्षा संबंधी समस्याएं पेश कर सकता है: zyan.scripts.mit.edu/blog/backdooring-js
mgol

आपके द्वारा उद्धृत बग केवल UglifyJS पर लागू होता है: यह क्लोजर कंपाइलर पर लागू नहीं होता है।
गुस्तावो रॉड्रिक्स

उन सभी के लिए जो जावास्क्रिप्ट फ़ाइलों को छोटा करने की परवाह करते हैं, एक जावास्क्रिप्ट संयुक्त राष्ट्र-minifier भी है। तो मुझे नहीं लगता, कि सुरक्षा की एक परत है
फिलीपो स्निपर

11

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

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


1
लेकिन obfuscating जरूरी नहीं कि इसे एक पंक्ति में संपीड़ित करता है, यह फ़ंक्शन और चर नामों को बदलने या स्ट्रिंग्स को बेस 64 में बदलने के रूप में सरल हो सकता है। न्यूनतम एक कोड पर सभी कोड डालता है।
rw-nandemo

आजकल UglifyJS सबसे अच्छा विकल्प लगता है। लेखक एक शांत आदमी भी है! :)
Tsvetomir Tsonev

डिबगिंग के बारे में, आप ज्यादातर सोर्सपैप उत्पन्न कर सकते हैं जिसे आप परीक्षण करते समय शामिल कर सकते हैं ताकि आप देख सकें कि किस लाइन में त्रुटि हुई है, भले ही वह छोटा हो।
लुका स्टीब

5

मैं पहले YUI कंप्रेसर की तरह कुछ के साथ minify करने का सुझाव दूंगा, और फिर http://www.javascriptobfuscator.com/ जैसी किसी चीज का उपयोग करके सभी स्ट्रिंग और संख्याओं को HEX मानों में बदल दूंगा

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


5

डीन एडवर्ड का पैकर एक उत्कृष्ट पर्यवेक्षक है, हालांकि यह मुख्य रूप से कोड को बाधित करता है, न कि आपके द्वारा अपने कोड के किसी भी स्ट्रिंग तत्वों को।

देख: ऑनलाइन जावास्क्रिप्ट कम्प्रेशन टूल और ड्रॉपडाउन से पैकर (डीन एडवर्ड्स) का चयन करें


यह व्यर्थ है। इसे jsbeautifier.org के
Maciej Krawczyk

4

मैं इस धारणा के अधीन हूं कि कुछ उद्यमों (जैसे: जैकबी) ने जेएस फाइलों के बजाय * .gif फ़ाइलों के अंदर एन्क्रिप्टेड जावास्क्रिप्ट कोड डाला, जो कि आक्षेप का एक अतिरिक्त उपाय है।


4

इस उपकरण का प्रयास करें जावास्क्रिप्ट ऑबफ्यूज़ेटर

मैंने इसे अपने एचटीएमएल 5 गेम पर इस्तेमाल किया, इसने न केवल इसका आकार 950KB से घटाकर 150 कर दिया, बल्कि सोर्स कोड को अपठनीय क्लोजर कंपाइलर भी बना दिया और मिनिफायर्स उल्टा हो गया है।


4

मैं सालों से जसोब का उपयोग कर रहा हूं और यह सबसे अच्छा ऑबफ्यूजेटर है।
इसमें एक उन्नत यूआई है लेकिन अभी भी सहज और उपयोग में आसान है।
यह HTML और CSS फाइलों को भी हैंडल करेगा।

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

उपयोगकर्ता अभी भी आपके स्रोत को देख सकते हैं, लेकिन जब आपके निजी चर को किसी चीज़ से परिवर्तित किया जाता है, तो इसे समझना अधिक कठिन होता _sUserPreferredNickNameहै a

इंजन स्वचालित रूप से लक्षित चर की संख्या को टैली करेगा और अधिकतम संपीड़न प्राप्त करने के लिए उन्हें प्राथमिकता देगा।

मैं जसोब के लिए काम नहीं करता हूं और मुझे उन्हें बढ़ावा देने के लिए कुछ भी नहीं मिलता है, बस कुछ दोस्ताना सलाह दे रहा हूं।
नकारात्मक पक्ष यह है कि यह मुफ़्त नहीं है और थोड़ा महंगा है, लेकिन अभी भी इसके लायक है जब विकल्पों के खिलाफ ढेर किया जाता है - 'मुक्त' विकल्प भी करीब नहीं आते हैं।


जेसन एक पर्यवेक्षक की तुलना में अधिक छोटा प्रतीत होता है। क्या मैं कुछ भूल रहा हूँ?
एलन मैकबी - एमएसएफटी

4

क्या आपने केले की कोशिश की है ? यह अत्यधिक संपीड़ित और पूरी तरह से अपठनीय कोड का उत्पादन करता है।


18
यह कोड को अच्छी तरह से संपीड़ित करता है, लेकिन बस eval()अंतिम पंक्ति में बदलकर console.log()आपके कंसोल को पूरी चीज से बाहर निकाल देगा
LobsterMan

4

मैं java-script के लिए क्लोज़-कंपाइलर उपयोगिता का उपयोग कर रहा हूँ। यह कोड को छोटा करता है और इसमें अधिक विकल्प हैं। यह उपयोगिता Google कोड पर URL: क्लोजर टूल्स के नीचे उपलब्ध है

लेकिन अब एक दिन मैं UglifyJS के बारे में बहुत कुछ सुन रहा हूं। आप क्लोजर कंपाइलर और UglifyJS के बीच विभिन्न तुलना पा सकते हैं जिसमें Uglify एक विजेता लगता है।
UglifyJS: Node.js के लिए एक फास्ट न्यू जावास्क्रिप्ट कंप्रेसर बंद होने के साथ बराबर है

जल्द ही मैं UglifyJS को मौका दूंगा।



3

यह एक छोटा करता है लेकिन इसमें कोई बाधा नहीं है। यदि आप कमांड लाइन जावा का उपयोग नहीं करना चाहते हैं तो आप अपनी जावास्क्रिप्ट को वेबफॉर्म में पेस्ट कर सकते हैं।


1
नोट: लिंक अब मृत है।
स्कॉट सी विल्सन

1
@ScottWilson धन्यवाद, इसे अपडेट किया गया
क्रिस एस

2

आपको निश्चित रूप से Obfuscriptor पर एक नज़र डालने पर विचार करना चाहिए ।

मैं विशिष्ट जावास्क्रिप्ट से परे चला जाता हूं, जो कि हमने अन्य उपकरणों जैसे YUI कंप्रेसर या Google क्लोजर से देखा है

बाधित कोड अधिक एन्क्रिप्टेड जैसा दिखता है। इससे पहले कि मैं कुछ भी देखा है के विपरीत।


लिंक के लिए धन्यवाद! बस कोशिश की obfuscriptor और कोड एन्क्रिप्टेड वास्तव में (कोई कुंजी के साथ ???)। और मेरी स्क्रिप्ट को 211 से 36 केबीपी तक संकुचित कर दिया!

ध्यान दें कि Obfuscriptor आपको अलर्ट करता है कि यह IE के साथ काम नहीं करता है। यह कुछ के लिए एक सौदा ब्रेकर है।
एलन मैकबी - एमएसएफटी

1
उत्तर पर लिंक अब टूल को इंगित नहीं करता है। मुझे इसका एक और सजीव संदर्भ नहीं मिला।
बूझेरबर्ट

पहला लिंक मृत है। "ऑबफ्यूस्क्रिप्ट"
अल्फ़ अल्ताउल

2

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

Dojo - केवल जावास्क्रिप्ट लाइब्रेरी क्लोजर कंपाइलर के साथ संगत है

क्लोजर एडवांस्ड मोड के साथ संकलित कोड रिवर्स-इंजीनियर के लिए लगभग असंभव है, यहां तक ​​कि एक ब्यूटिफायर के माध्यम से गुजर रहा है, क्योंकि पूरे कोड बेस (लाइब्रेरी शामिल है) को बाधित किया गया है। यह औसतन 25% छोटा भी है।

जावास्क्रिप्ट कोड जो कि केवल छोटा है (YUI कंप्रेसर, Uglify इत्यादि) एक ब्यूटिफायर से गुजरने के बाद रिवर्स-इंजीनियर के लिए आसान है।


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