जावा स्रोत कोड में Android DEX (VM bytecode) फ़ाइलों को एक डिकंपाइल कैसे किया जा सकता है?
जावा स्रोत कोड में Android DEX (VM bytecode) फ़ाइलों को एक डिकंपाइल कैसे किया जा सकता है?
जवाबों:
इन उपकरणों को प्राप्त करें:
1) डेक्स 2 ज़ार फ़ाइलों को डेक्स फ़ाइलों का अनुवाद करने के लिए
2) jd-gui जार में जावा फाइलों को देखने के लिए
स्रोत कोड काफी पठनीय है क्योंकि dex2jar कुछ अनुकूलन करता है।
और यहाँ कैसे विघटित करने की प्रक्रिया है:
Convert.dex को test_apk-debug.apk में test_apk-debug_dex2jar.jar में परिवर्तित करें
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex
नोट 1: विंडोज मशीनों में सभी
.sh
लिपियों को.bat
स्क्रिप्ट द्वारा बदल दिया जाता हैनोट 2: linux / mac के बारे में
sh
या मत भूलनाbash
। पूर्ण आदेश होना चाहिए:
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
नोट 3: इसके अलावा,
dex2jar-X.X
निर्देशिका जैसे निष्पादन की अनुमति जोड़ना याद रखेंsudo chmod -R +x dex2jar-2.0
JD-GUI में जार खोलें
कुछ हद तक स्पष्ट करने के लिए, दो प्रमुख रास्ते हैं जो आप यहाँ पर निर्भर करते हैं जो आप पूरा करना चाहते हैं:
Dalvik bytecode (dex) को पठनीय जावा स्रोत में विसर्जित करें। आप यह आसानी से dex2jar और jd-gui के साथ कर सकते हैं , जैसा कि उल्लेखित उल्लेख है। परिणामस्वरूप स्रोत किसी ऐप की कार्यक्षमता को पढ़ने और समझने के लिए उपयोगी है, लेकिन संभवतः 100% प्रयोग करने योग्य कोड का उत्पादन नहीं करेगा। दूसरे शब्दों में, आप स्रोत को पढ़ सकते हैं, लेकिन आप इसे वास्तव में संशोधित नहीं कर सकते हैं और इसे दोहरा सकते हैं। ध्यान दें कि यदि स्रोत को गार्ड के साथ बाधित किया गया है, तो परिणामस्वरूप स्रोत कोड को असंगत करने के लिए काफी अधिक कठिन हो जाएगा।
अन्य प्रमुख विकल्प स्माइली के लिए बाईटकोड को असेंबल करना है , एक विधानसभा भाषा जिसे इस उद्देश्य के लिए डिज़ाइन किया गया है। मैंने पाया है कि ऐसा करने का सबसे आसान तरीका एपीकेटूल है । एक बार जब आप एपीकेटूल स्थापित कर लेते हैं, तो आप इसे एपीके फ़ाइल में इंगित कर सकते हैं, और आपको एप्लिकेशन में निहित प्रत्येक वर्ग के लिए एक स्माली फ़ाइल वापस मिल जाएगी। आप पढ़ सकते हैं और स्माली को बदल सकते हैं या यहां तक कि नए जावा स्रोत से स्माईली उत्पन्न करके कक्षाओं को पूरी तरह से बदल सकते हैं (ऐसा करने के लिए, आप अपने .java स्रोत को। Jacac फ़ाइलों के साथ संकलित कर सकते हैं, फिर अपनी .class फ़ाइलों को .dex फ़ाइलों में एंड्रॉइड के साथ बदल सकते हैं। dx संकलक, और उसके बाद .smx (smali disassembler) का उपयोग करें। .Dx को .smali फ़ाइलों में बदलने के लिए, जैसा कि इस प्रश्न में वर्णित है।। यहां एक शॉर्टकट हो सकता है)। एक बार काम पूरा हो जाने के बाद, आप आसानी से एपीके के साथ वापस एपीके को आसानी से पैकेज कर सकते हैं। ध्यान दें कि एपीकेटूल परिणामस्वरूप एपीके पर हस्ताक्षर नहीं करता है, इसलिए आपको किसी अन्य एंड्रॉइड एप्लिकेशन की तरह इसका ध्यान रखना होगा ।
यदि आप स्माईली मार्ग पर जाते हैं, तो आप एपीके स्टूडियो को आज़माना चाह सकते हैं , एक आईडीई जो एपीके को डिकम्पोज करने और पुनः स्थापित करने और इसे डिवाइस पर इंस्टॉल करने में आपकी सहायता के लिए उपरोक्त कुछ चरणों को स्वचालित करता है।
संक्षेप में, आपकी पसंद बहुत अधिक या तो जावा में विघटित करने के लिए होती है, जो अधिक पठनीय है, लेकिन संभावना अपरिवर्तनीय है, या बदबूदार करने के लिए जुदा है, जो कि बदलाव करने और एक संशोधित ऐप को फिर से तैयार करने के लिए पढ़ने में अधिक लचीला है। आप जो दृष्टिकोण चुनते हैं वह इस बात पर निर्भर करेगा कि आप क्या हासिल करना चाहते हैं।
अन्त में, हिम्मत का सुझाव भी ध्यान देने योग्य है। यह .Dx और .apk फ़ाइलों को जावा .class फ़ाइलों में परिवर्तित करने के लिए एक रिटारगेटिंग टूल है, ताकि उन्हें विशिष्ट जावा स्टैटिक विश्लेषण टूल का उपयोग करके विश्लेषण किया जा सके।
मैं वास्तव में यहाँ जाने की सलाह दूंगा: https://github.com/JesusFreke/smali
यह BAKSMALI प्रदान करता है, जो DEX फ़ाइलों के लिए सबसे उत्कृष्ट रिवर्स-इंजीनियरिंग उपकरण है। यह यीशुफ़्रेके द्वारा बनाया गया है, वह व्यक्ति जिसने एंड्रॉइड के लिए फेमस रोम बनाए हैं।
./apktool d myprogram.apk
। मेरा जवाब देखिए ।
फ्रेड के उत्तर का एक और पूर्ण संस्करण :
पहले आपको DEX पर JAR की सभी (संकलित) कक्षाओं को निकालने के लिए एक उपकरण की आवश्यकता होती है ।
वहाँ एक है जिसे डीएक्स 2जर कहा जाता है , जो एक चीनी छात्र द्वारा बनाया गया है।
उसके बाद, आप का उपयोग कर सकते जद-जीयूआई को डिकंपाइल स्रोत कोड के लिए जार पर कक्षाएं।
परिणामी स्रोत काफी पठनीय होना चाहिए, क्योंकि dex2jar कुछ अनुकूलन करता है।
आप एपीकेटूल का उपयोग कर सकते हैं । यह स्वचालित रूप से सभी वर्गों ( .dex
), संसाधनों ( .asrc
) को निकाल देगा , फिर यह बाइनरी एक्सएमएल को मानव-पठनीय एक्सएमएल में बदल देगा , और यह आपके लिए कक्षाओं को भी अलग कर देगा।
Disassembly हमेशा विघटित होने की तुलना में अधिक मजबूत होगा, विशेष रूप से
JARs के साथ प्रो गार्ड के साथ बाधित!
एपीके को केवल एक निर्देशिका में डिकोड करने के लिए एपीकेटूल को बताएं , फिर जो आप चाहते हैं उसे संशोधित करें
और अंत में इसे एपीके में वापस एन्कोड करें । बस इतना ही।
महत्वपूर्ण: APKTool dissassembles । यह विघटित नहीं होता है ।
उत्पन्न कोड जावा स्रोत नहीं होगा।
लेकिन आपको इसे पढ़ने में सक्षम होना चाहिए, और यहां तक कि इसे संपादित भी करें यदि आप जैस्मीन से परिचित हैं ।
यदि आप जावा स्रोत चाहते हैं, तो कृपया मैनुअल तरीके से जाएं ।
कभी-कभी आप टूटे हुए कोड प्राप्त करते हैं, जब उपयोग करते हैं dex2jar
/ apktool
, सबसे विशेष रूप से छोरों में। इससे बचने के लिए, jadx का उपयोग करें , जो कि dava के द्वारा java source कोड में dalvik bytecode का निर्माण करता है, बिना पहली फाइल बनाए .jar
/ .class
जैसा dex2jar
कि (APKtool dex2jar का उपयोग करता है, मुझे लगता है)। यह ओपन-सोर्स और सक्रिय विकास में भी है। यहां तक कि यह GUI- कट्टरपंथियों के लिए एक GUI है। कोशिश करो!
javac "$(find . -name '*.java')"
?
मैंने उपयोग कर लिया है
लेकिन कोई भी google के अपने टूल को नहीं धड़कता है
चूंकि किसी ने इसका उल्लेख नहीं किया, इसलिए एक और उपकरण है: DED होमपेज
कैसे और कुछ स्पष्टीकरण स्थापित करें: स्थापना ।
इसका उपयोग शीर्ष बाज़ार ऐप्स की सुरक्षा के एक बहुत ही रोचक अध्ययन में किया गया था (वास्तव में संबंधित नहीं, बस अगर आप उत्सुक हैं तो): Android सर्वेक्षण सुरक्षा का एक सर्वेक्षण
चूँकि Dheeraj Bhaskar
उत्तर कई वर्षों से अपेक्षाकृत पुराना है।
यहाँ मेरा नवीनतम (2019 वर्ष) उत्तर है:
से dex
करने के लिए java sourcecode
, वर्तमान में समाधान के दो प्रकार हैं:
One Step
: सीधे रूपांतरित dex
करेंjava sourcecode
Two Step
: पहले परिवर्तित dex
करने के लिए jar
, दूसरे में परिवर्तित jar
करने के लिएjava sourcecode
dex
सीधे करने के लिएjava sourcecode
bin
फ़ोल्डर में कमांड लाइन jadx
या GUI संस्करण देख सकते हैं jadx-gui
, GUI संस्करण चलाने के लिए डबल क्लिक करें:jadx-gui
dex
फाइलफिर जावा स्रोत कोड दिखा सकते हैं:
File
-> save as gradle project
फिर जावा सोर्सकोड मिला:
dex
सेjar
डाउनलोड dex2jar ज़िप , unzip मिला d2j-dex2jar.sh
, फिर:
apk
को jar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
को jar
:sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
उदाहरण:
➜ v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜ v3.4.8 ll
-rw------- 1 crifan staff 9.5M 3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw------- 1 crifan staff 8.4M 3 19 14:04 com.huili.readingclub8825612.dex
jar
सेjava sourcecode
many
कोड विघटित हो जाएगाminor
कोड डिकॉम्पाइल एरर होगाno
कोड डीकंपाइल एरर
Procyon
यहाँ डेमो Procyon
जार को जावा स्रोत कोड में बदलें:
डाउनलोड प्रोसीओन-डिकम्पाइलर-0.5.34.jar
तब सिंटैक्स का उपयोग करना:
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName
उदाहरण:
java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/procyon-decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612
निर्यात स्रोत कोड खोलने के लिए संपादक VSCode का उपयोग करना, इस तरह देखें:
रूपांतरण शुद्धता: Jadx
> Procyon
> CRF
>JD-GUI
उपयोग की सिफारिश: (एक कदम समाधान है) Jadx
अधिक विस्तृत विवरण के लिए, कृपया मेरे ऑनलाइन चीनी ईबुक देखें : 应用 的 please please please please
dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dex
बस अपवाद मिला:java.io.IOException: the src file not a .dex or zip file
d2j-dex2jar.bat "D:\android\some_dex_file.dex"
ठीक है या नहीं?
>d2j-dex2jar.bat file.dex
लेकिन यह ठीक नहीं है। शायद यह है क्योंकि मेरी .dex
फ़ाइल से कॉपी किया गया था dalvik-cache
?
dex is copied from dalvik-cache
, होना चाहिएdex is decompiled from apk
एक बार जब आप अपनी एपीके फ़ाइल डाउनलोड कर लेते हैं, तो आपको संपादन योग्य जावा कोड / दस्तावेज़ प्राप्त करने के लिए निम्न चरणों को करने की आवश्यकता होती है।
Dedexer के साथ , आप .dex
फ़ाइल को dalvik bytecode ( .ddx
) में इकट्ठा कर सकते हैं ।
जहाँ तक मुझे पता है जावा के प्रति विघटन संभव नहीं है।
आप यहाँ दलित बाईटेकोड के बारे में पढ़ सकते हैं ।
Android रिवर्स इंजीनियरिंग संभव है । एपीजे फ़ाइल से .java फ़ाइल प्राप्त करने के लिए इन चरणों का पालन करें।
चरण 1 । Dex2jar का उपयोग करना
dex2jar sampleApp.apk
चरण 2 । Decompiling। JD-GUI का उपयोग करके .jar
हाल ही में डेबियन के पास पायथन पैकेज है androguard
:
Description-en: full Python tool to play with Android files
Androguard is a full Python tool to play with Android files.
* DEX, ODEX
* APK
* Android's binary xml
* Android resources
* Disassemble DEX/ODEX bytecodes
* Decompiler for DEX/ODEX files
संबंधित पैकेज स्थापित करें:
sudo apt-get install androguard python-networkx
Decompile DEX फ़ाइल:
$ androdd -i classes.dex -o ./dir-for-output
classes.dex
Apk + Decompile से निकालें :
$ androdd -i app.apk -o ./dir-for-output
Apk फाइल जावा आर्काइव (JAR) से अधिक कुछ नहीं है, आप पुरालेख से फाइल निकाल सकते हैं:
$ unzip app.apk -d ./dir-for-output
इनमें से अधिकांश जवाब पोस्ट किए जाने के बाद से बहुत कुछ बदल गया है। अब के दिनों में GUI के साथ कई आसान उपकरण हैं, जैसे:
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
उन्हें खोजने के लिए सबसे अच्छी जगह एक्सडीए डेवलपर्स फोरम पर है।
आप JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ) आज़मा सकते हैं , यह DEX अपघटन के लिए एक आदर्श उपकरण है।
और हाँ, यह ऑनलाइन (मेरी: 0) नई साइट पर भी उपलब्ध है: http://www.javadecompilers.com/apk/
यह निम्नलिखित पाँच चरणों में किया जा सकता है:
यह रत्न आपके लिए आवश्यक उपकरणों की स्थापना भी स्वचालित रूप से करता है
एंड्रॉइड ऐप को डिकंपाइल करने के लिए सबसे आसान तरीका है playstore से ShowJava नाम का ऐप डाउनलोड करना । बस उस एप्लिकेशन का चयन करें जिसे अनुप्रयोगों की सूची से विघटित होने की आवश्यकता है। तीन अलग-अलग डिकंपाइलर हैं जिनका उपयोग आप किसी एप्लिकेशन को डिकंपाइल करने के लिए कर सकते हैं -
सीएफआर 0.110, JaDX 0.6.1 या फ़र्नफ़्लॉवर (विश्लेषणात्मक डीकोम्पाइलर)।
यदि आप dex2jar डाउनलोड नहीं करना चाहते हैं, तो बस किसी भी एपीके को जार फ़ाइलों में अपघटित करने के लिए apk_grabber
अजगर स्क्रिप्ट का उपयोग करें। फिर आप उन्हें jd-gui के साथ पढ़ें।