
एक पैटर्न-आधारित Dalvik डीऑबफस्केटर जो शब्दार्थ विश्लेषण को बेहतर बनाने के लिए सीमित निष्पादन का उपयोग करता है
एक पैटर्न-आधारित Dalvik डीऑबफसकेटर जो सिमैंटिक विश्लेषण को बेहतर बनाने के लिए सीमित निष्पादन का उपयोग करता है। साथ ही, यह दूसरे Android डीऑबफसकेटर Simplify के लिए प्रेरणा है।
पहले

बाद में

sha1: a68d5d2da7550d35f7dbefc21b7deebe3f4005f3
md5: 2dd2eeeda08ac8c15be8a9f2d01adbe8
चूंकि आप एक शीर्ष एंड्रॉइड रिवर्सर हैं, मुझे यकीन है कि आपके पास पहले से ही Smali और Baksmali आपके पथ पर हैं। यदि किसी अजीब कारण से यह पहले से स्थापित नहीं है, तो यह आपको शुरू करने में मदद करेगा, लेकिन कृपया चलाने से पहले इसकी सावधानीपूर्वक जांच करें:
mkdir ~/bin || cd ~/bin
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/smali-2.2.5.jar && mv smali-*.jar smali.jar
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/baksmali-2.2.5.jar && mv baksmali-*.jar baksmali.jar
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/smali
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/baksmali
chmod +x ./smali ./baksmali
export PATH=$PATH:$PWD
सुनिश्चित करें कि adb आपके पथ पर है।
gem install dex-oracle
या, यदि आप स्रोत से बनाना पसंद करते हैं:
git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle install
Oracle के काम करने के लिए आपके पास या तो एक एमुलेटर चल रहा होना चाहिए या एक डिवाइस प्लग इन होना चाहिए। न्यूनतम आवश्यक एंड्रॉइड संस्करण 5.0 है!
Oracle को एक चालू एंड्रॉइड सिस्टम पर विधियों को निष्पादित करने की आवश्यकता होती है। यह या तो डिवाइस पर या एमुलेटर पर हो सकता है (पसंदीदा)। यदि यह एक डिवाइस है, तो सुनिश्चित करें कि आपको उस पर संभावित रूप से शत्रुतापूर्ण कोड चलाने में कोई आपत्ति नहीं है।
यदि आप एमुलेटर का उपयोग करना चाहते हैं और आपके पास पहले से एंड्रॉइड SDK स्थापित है, तो आप इसके साथ एमुलेटर इमेज बना और शुरू कर सकते हैं:
android avd
Usage: dex-oracle [opts] <APK / DEX / Smali Directory>
-h, --help Display this screen
-s ANDROID_SERIAL, Device ID for driver execution, default=""
--specific-device
-t, --timeout N ADB command execution timeout in seconds, default="120"
-i, --include PATTERN Only optimize methods and classes matching the pattern, e.g. Ldune;->melange\(\)V
-e, --exclude PATTERN Exclude these types from optimization; including overrides
--disable-plugins STRING[,STRING]*
Disable plugins, e.g. stringdecryptor,unreflector
--list-plugins List available plugins
-v, --verbose Be verbose
-V, --vverbose Be very verbose
उदाहरण के लिए, केवल एक APK obad.apk के अंदर Lcom/android/system/admin/CCOIoll नामक क्लास में विधियों को डीऑबफसकेट करने के लिए:
dex-oracle -i com/android/system/admin/CCOIoll obad.apk
Oracle एंड्रॉइड ऐप्स (APK), Dalvik निष्पादनयोग्य (DEX), और Smali फ़ाइलों को इनपुट के रूप में लेता है। पहले, यदि इनपुट APK या DEX है, तो इसे Smali फ़ाइलों में डिसअसेंबल किया जाता है। फिर, Smali फ़ाइलों को विभिन्न प्लगइन्स को भेजा जाता है जो विश्लेषण और संशोधन करते हैं। प्लगइन्स ऐसे पैटर्न की खोज करते हैं जिन्हें पढ़ने में आसान किसी चीज़ में रूपांतरित किया जा सकता है। यह समझने के लिए कि कोड क्या कर रहा है, कुछ Dalvik विधियों को वास्तव में निष्पादित किया जाता है और आउटपुट एकत्र किया जाता है। इस प्रकार, कुछ विधि कॉल को स्थिरांक से बदला जा सकता है। उसके बाद, सभी Smali फ़ाइलों को अपडेट किया जाता है। अंत में, यदि इनपुट APK या DEX फ़ाइल थी, तो संशोधित Smali फ़ाइलों को पुनः संकलित किया जाता है और एक अद्यतन APK या DEX बनाया जाता है।
विधि निष्पादन Driver द्वारा किया जाता है। इनपुट APK, DEX, या Smali को dexmerge का उपयोग करके Driver के साथ एकल DEX में जोड़ा जाता है और इसे डिवाइस या एमुलेटर पर धकेल दिया जाता है। प्लगइन्स तब Driver का उपयोग कर सकते हैं जो इनपुट DEX से विधियों को निष्पादित करने के लिए Java रिफ्लेक्शन का उपयोग करता है। वापसी मानों का उपयोग केवल पैटर्न पहचान से परे सिमैंटिक विश्लेषण को बेहतर बनाने के लिए किया जा सकता है। यह विशेष रूप से कई स्ट्रिंग डिक्रिप्शन विधियों के लिए उपयोगी है, जो आमतौर पर एक एन्क्रिप्टेड स्ट्रिंग या कुछ बाइट सरणी लेते हैं। एक सीमा यह है कि निष्पादन केवल स्थैतिक विधियों तक ही सीमित है।
Oracle के साथ आने वाले तीन प्लगइन्स हैं:
यदि आप एक नए प्रकार का ऑबफस्केशन पाते हैं, तो Oracle के साथ डीऑबफसकेट करना संभव हो सकता है। Smali को देखें और पता लगाएं कि क्या कोड को या तो:
यदि इनमें से कोई भी मामला है, तो आपको अपना खुद का प्लगइन लिखने का प्रयास करना चाहिए। अपना प्लगइन बनाने के चार चरण हैं:
शामिल प्लगइन्स चरण #3 और #4 को समझने के लिए एक अच्छा मार्गदर्शक होना चाहिए। Driver को चरण #2 में मदद करने के लिए डिज़ाइन किया गया है।
बेशक, आप जिस भी ऑबफस्केशन का सामना करते हैं उसे साझा करने के लिए आपका हमेशा स्वागत है और हो सकता है कि कोई अंततः उस तक पहुंच जाए।
पहले, सुनिश्चित करें कि dx आपके पथ पर है। यह Android SDK का हिस्सा है, लेकिन यह संभवतः आपके पथ पर नहीं है जब तक कि आप हार्डकोर न हों।
driver फ़ोल्डर Gradle द्वारा प्रबंधित एक Java प्रोजेक्ट है। इसे Eclipse, IntelliJ, आदि में आयात करें और जो भी बदलाव चाहें करें। Driver को अपडेट करना समाप्त करने के लिए, ./update_driver चलाएँ। यह Driver को पुनर्निर्माण करेगा और आउटपुट JAR को DEX में बदल देगा।
यदि आपके एमुलेटर या डिवाइस पर Driver कोड निष्पादित करने में कोई समस्या है, तो monitor (Android SDK का हिस्सा) खोलना सुनिश्चित करें और वहाँ किसी भी सुराग की जाँच करें। भले ही त्रुटि आपको समझ में न आए, यदि आप इसे उस समस्या के साथ पोस्ट करते हैं जो आप बनाएंगे तो यह मदद करेगा।
सभी Android प्लेटफॉर्म dex-oracle के साथ अच्छी तरह से काम नहीं करते हैं। उनमें से कुछ मनमानी DEX फ़ाइलों को निष्पादित करने का प्रयास करते समय विफल हो जाते हैं। यदि आपको Segfaults या Driver क्रैश की समस्या हो रही है, तो ARM के साथ Android 4.4.2 API स्तर 19 का उपयोग करने का प्रयास करें।
यह संभव है कि एक प्लगइन एक पैटर्न देखता है जिसे वह ऑबफस्केशन समझता है लेकिन वास्तव में वह कुछ कोड है जिसे निष्पादित नहीं किया जाना चाहिए। यह असंभव लगता है क्योंकि ऑबफस्केशन पैटर्न वास्तव में असामान्य हैं, लेकिन यह संभव है। यदि आप पाते हैं कि कोई विशेष प्लगइन समस्या पैदा कर रहा है और आप सुनिश्चित हैं कि ऐप उस विशेष ऑबफस्केटर द्वारा संरक्षित नहीं है, अर्थात ऐप DexGuarded नहीं है, लेकिन DexGuard प्लगइन कुछ निष्पादित करने का प्रयास कर रहा है, तो बस इसे अक्षम करें।