
Dalvik बाइटकोड (DEX/APK) को समतुल्य जावा बाइटकोड में अनुवाद करता है, जिससे जावा विश्लेषण उपकरण उच्च शुद्धता के साथ एंड्रॉइड अनुप्रयोगों को प्रोसेस कर सकते हैं, विशेष रूप से सीमांत मामलों के लिए।
नोट: यह रिपॉजिटरी पुरानी हो सकती है। भविष्य के विकास https://github.com/Storyyeller/enjarify पर होंगे।
Enjarify एक उपकरण है जो Dalvik बाइटकोड को समतुल्य Java बाइटकोड में अनुवाद करने के लिए है। यह Java विश्लेषण उपकरणों को Android अनुप्रयोगों का विश्लेषण करने की अनुमति देता है।
Enjarify एक शुद्ध python 3 एप्लिकेशन है, इसलिए आप इसे git clone करके चला सकते हैं। सीधे चलाने के लिए, मान लें कि आप रिपॉजिटरी के शीर्ष निर्देशिका में हैं, आप बस कर सकते हैं
python3 -O -m enjarify.main yourapp.apk
सामान्य उपयोग के लिए, आप शायद रैपर स्क्रिप्ट का उपयोग करना चाहेंगे और इसे अपने PATH पर सेट करना चाहेंगे।
सुविधा के लिए, एक रैपर शेल स्क्रिप्ट, enjarify.sh प्रदान की गई है। यदि उपलब्ध हो तो यह Pypy का उपयोग करने का प्रयास करेगा, क्योंकि यह CPython से तेज़ है। यदि आप Enjarify को कहीं से भी कॉल करने में सक्षम होना चाहते हैं, तो आप अपने PATH पर कहीं से एक सिम्लिंक बना सकते हैं, जैसे ~/bin। ऐसा करने के लिए, मान लें कि आप रिपॉजिटरी के शीर्ष स्तर के अंदर हैं,
ln -s "$PWD/enjarify.sh" ~/bin/enjarify
एक रैपर बैच स्क्रिप्ट, enjarify.bat प्रदान की गई है। इसे कहीं से भी कॉल करने में सक्षम होने के लिए, बस रिपॉजिटरी की रूट निर्देशिका को अपने PATH में जोड़ें। बैच स्क्रिप्ट हमेशा python3 को इंटरप्रेटर के रूप में आमंत्रित करेगी। यदि आप pypy का उपयोग करना चाहते हैं, तो बस स्क्रिप्ट को संपादित करें।
मान लें कि आपने स्क्रिप्ट को अपने PATH पर सही ढंग से सेट किया है, आप इसे कहीं से भी सिर्फ enjarify टाइप करके कॉल कर सकते हैं, उदाहरण के लिए
enjarify yourapp.apk
उपयोग का सबसे बुनियादी रूप सिर्फ इनपुट के रूप में एक apk फ़ाइल या dex फ़ाइल निर्दिष्ट करना है। यदि आप एक मल्टीडेक्स apk निर्दिष्ट करते हैं, तो Enjarify स्वचालित रूप से सभी dex फ़ाइलों का अनुवाद करेगा और परिणामों को एक एकल संयुक्त jar में आउटपुट करेगा। यदि आप एक dex फ़ाइल निर्दिष्ट करते हैं, तो केवल वह dex फ़ाइल अनुवादित की जाएगी। उदाहरण के लिए, मान लें कि आपने मैन्युअल रूप से dex फ़ाइलें निकाली हैं, आप कर सकते हैं
enjarify classes2.dex
डिफ़ॉल्ट आउटपुट फ़ाइल वर्तमान निर्देशिका में [inputname]-enjarify.jar है। आउटपुट के लिए फ़ाइल नाम स्पष्ट रूप से निर्दिष्ट करने के लिए, -o या --output विकल्प पास करें।
enjarify yourapp.apk -o yourapp.jar
डिफ़ॉल्ट रूप से, Enjarify आउटपुट फ़ाइल को ओवरराइट करने से इनकार करेगा यदि वह पहले से मौजूद है। आउटपुट को ओवरराइट करने के लिए, -f या --force विकल्प पास करें।
Dex2jar एक पुराना उपकरण है जो Dalvik को Java बाइटकोड में अनुवाद करने का प्रयास करता है। यह अधिकांश समय उचित रूप से काम करता है, लेकिन बहुत सारी अस्पष्ट सुविधाएँ या किनारे के मामले इसे विफल करने या चुपचाप गलत परिणाम उत्पन्न करने का कारण बन सकते हैं। इसके विपरीत, Enjarify को यथासंभव अधिक से अधिक मामलों में काम करने के लिए डिज़ाइन किया गया है, यहां तक कि उस कोड के लिए भी जहां Dex2jar विफल होगा। अन्य बातों के अलावा, Enjarify यूनिकोड क्लास नामों, कई प्रकारों के रूप में उपयोग किए जाने वाले स्थिरांकों, अंतर्निहित कास्टों, सामान्य नियंत्रण प्रवाह में कूदने वाले अपवाद हैंडलरों, बहुत अधिक स्थिरांकों को संदर्भित करने वाली क्लासों, बहुत लंबी विधियों, कैचऑल हैंडलर के बाद अपवाद हैंडलरों, और गलत प्रकार के स्थैतिक प्रारंभिक मानों को सही ढंग से संभालता है।
Enjarify वर्तमान में वैकल्पिक मेटाडेटा जैसे सोर्सफ़ाइल विशेषताएँ, पंक्ति संख्याएँ और एनोटेशन का अनुवाद नहीं करता है।
Enjarify यथासंभव अधिक से अधिक क्लासों का सफलतापूर्वक अनुवाद करने का प्रयास करता है, लेकिन कुछ संभावित मामले हैं जहाँ यह Android, Java या दोनों की सीमाओं के कारण संभव नहीं है। सौभाग्य से, यह केवल कृत्रिम परिस्थितियों में होता है, इसलिए व्यवहार में यह समस्या नहीं होनी चाहिए।
PyPy CPython की तुलना में बहुत तेज़ है। PyPy स्थापित करने के लिए, http://pypy.org/ देखें। सुनिश्चित करें कि आपको नियमित PyPy के बजाय PyPy3 मिले। लिनक्स रैपर स्क्रिप्ट स्वचालित रूप से pypy3 कमांड का उपयोग करेगी यदि उपलब्ध हो। विंडोज पर, आपको स्वयं रैपर स्क्रिप्ट संपादित करनी होगी।
डिफ़ॉल्ट रूप से, Enjarify बाइटकोड पर अनुकूलन चलाता है जो इसे मनुष्यों के लिए अधिक पढ़ने योग्य बनाता है (कॉपी प्रसार, अप्रयुक्त मूल्य निष्कासन, आदि)। यदि आपको इसकी आवश्यकता नहीं है, तो आप --fast विकल्प के साथ अनुकूलन को अक्षम करके चीजों को गति दे सकते हैं। ध्यान दें कि अत्यंत दुर्लभ मामले में जहां एक क्लास अनुकूलन के बिना क्लासफ़ाइल में फिट होने के लिए बहुत बड़ी है, Enjarify स्वचालित रूप से सभी अनुकूलन सक्षम करके इसे पुनः प्रयास करेगा, इसलिए यह विकल्प सफलतापूर्वक अनुवादित क्लासों की संख्या को प्रभावित नहीं करता है।
यह एक आधिकारिक Google उत्पाद नहीं है (प्रयोगात्मक या अन्यथा), यह सिर्फ कोड है जो Google के स्वामित्व में है।