
रेडेक्सर बाइनरी इंस्ट्रूमेंटेशन फ्रेमवर्क फॉर डाल्विक बाइटकोड
रेडेक्सर एक पुनर्रचना उपकरण है जो Android ऐप बाइनरी में हेरफेर करता है। यह उपकरण DEX फ़ाइल को मेमोरी डेटा संरचना में पार्स करने में सक्षम है; यह अनुमान लगाने में सक्षम है कि ऐप किन मापदंडों के साथ कुछ अनुमतियों का उपयोग करता है (हम इस सुविधा को RefineDroid नाम देते हैं); उस डेटा संरचना को संशोधित और अनपार्स करने में सक्षम है ताकि आउटपुट DEX फ़ाइल उत्पन्न हो (हम इन सुविधाओं को Dr. Android नाम देते हैं, जो Dalvik Rewriting for Android के लिए है)।
यह उपकरण OCaml 4.09.0 और Ruby 1.8.6(7) के अंतर्गत परीक्षण किया गया है, इसलिए आपको इन्हें (या इनके उच्च संस्करण) स्थापित करने की आवश्यकता है।
DEX प्रारूप में SHA-1 हस्ताक्षर (हैश) में हेरफेर करने के लिए, हम OCaml SHA लाइब्रेरी का उपयोग करते हैं ocamlfind/findlib के माध्यम से, जो एक OCaml लाइब्रेरी प्रबंधक है। दोनों को स्थापित करने का सबसे आसान तरीका OPAM का उपयोग करना है, जो एक OCaml पैकेज प्रबंधक है, जिसमें दोनों पैकेज हैं---OPAM ocamlfind और OPAM sha।
आप दोनों पैकेजों को सीधे बना और/या स्थापित भी कर सकते हैं। यदि आप Linux मशीन का उपयोग कर रहे हैं, तो आप आसानी से वितरण पा सकते हैं।
यदि नहीं, उदाहरण के लिए Mac का उपयोग कर रहे हैं, तो आपको इसे स्वयं बनाना होगा।
आप मूल स्रोत कोड यहाँ पा सकते हैं।
इसे make चलाकर बनाएँ, और परिणामी निर्देशिका को ocamlfind की रूट site-lib निर्देशिका से लिंक करें; या sudo make install।
यदि आप PC का उपयोग कर रहे हैं, तो आपको पहले ocamlfind/findlib और FlexDLL स्थापित करना होगा। कृपया सुनिश्चित करें कि आपके पर्यावरण चर निम्नानुसार सही ढंग से सेट हैं:
OCAMLLIB=C:\OCaml\lib
CAML_LD_LIBRARY_PATH=%OCAMLLIB%\stublibs
FLEXLINKFLAGS=-L%MinGW%\lib -L%MinGW%\lib\gcc\mingw32\N.N.N
OPAM पैकेज:
Android SDK (या स्रोत)
apk फ़ाइलों को अनपैक और रिपैक करने के लिए, हम apktool का उपयोग करते हैं, जो एक ओपन सोर्स APK पुनर्रचना उपकरण है। चूँकि यह aapt, Android Asset Packaging Tool का उपयोग करता है, आपको Android SDK या स्रोत स्थापित करने की आवश्यकता है। इसके अलावा, हम zipalign का उपयोग करते हैं, जो Android SDK से आता है, पुनर्लिखित ऐप्स को अनुकूलित करने के लिए।
आप Android आधार उपकरणों के पथ निम्नलिखित को अपने प्रोफ़ाइल में जोड़कर सेट कर सकते हैं:
ANDROID_HOME=$HOME/android-sdk # अपना खुद का पथ यहाँ!
export ANDROID_HOME
PATH=$PATH:$ANDROID_HOME/tools
PATH=$PATH:$ANDROID_HOME/platform-tools
PATH=$PATH:$ANDROID_HOME/build-tools/19.0.0 # स्थापित संस्करण संख्या
export PATH
मुख्य स्क्रिप्ट Ruby में लिखी गई हैं और उन्हें RubyGems, एक Ruby पैकेज प्रबंधक, और Nokogiri, मेनिफ़ेस्ट फ़ाइलों में हेरफेर करने के लिए एक XML लाइब्रेरी की आवश्यकता है।
यदि आप ग्राफ़ (जैसे कॉल ग्राफ़, नियंत्रण-प्रवाह ग्राफ़, डोमिनेटर ट्री, आदि) देखना चाहते हैं, तो आपको graphviz dot स्थापित करने की आवश्यकता है।
रेडेक्सर बनाने के लिए, बस make करें! आप शीर्ष स्तर पर रेडेक्सर बाइनरी देख सकते हैं।
$ make (clean)
उपकरण का उपयोग करने से पहले, apktool के लिए सबसे हालिया प्लेटफ़ॉर्म फ़ाइल स्थापित करना उपयोगकर्ताओं पर निर्भर है। उदाहरण के लिए, आपको ऐसा करने की आवश्यकता है
$ java -jar tools/apktool.jar if [उपयुक्त प्लेटफ़ॉर्म फ़ाइल]
आप HTML प्रारूप में API दस्तावेज़ भी उत्पन्न कर सकते हैं।
$ make api
आप उपकरण द्वारा प्रदान किए गए सभी विकल्प देख सकते हैं:
$ ruby scripts/cmd.rb -h
$ ruby scripts/cmd.rb --help
Android SDK में dexdump की तरह, रेडेक्सर आपको दी गई dex फ़ाइल के आंतरिक भाग को YAML प्रारूप में देखने की अनुमति देता है।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd unparse [--to blah.yml]
यह विकल्प एक निर्दिष्ट विधि के लिए निर्देश डंप करता है।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd dump_method --mtd cls.mtd
यह सुविधा रेडेक्सर के पार्सिंग और डंपिंग मॉड्यूल का परीक्षण करने के लिए है। यह संभवतः एक समान dex फ़ाइल उत्पन्न करता है।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd id [--to blah.dex]
आप dex फ़ाइल के बारे में बुनियादी आँकड़े भी देख सकते हैं, उदाहरण के लिए, # instr.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd info
यह विकल्प dex फ़ाइल में परिभाषित सभी वर्ग नाम प्रिंट करता है।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes
यह विशिष्ट तृतीय-पक्ष पुस्तकालयों को खोजने में उपयोगी हो सकता है, उदाहरण के लिए,
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes | egrep 'apache'
यह विकल्प dex फ़ाइल में API उपयोग प्रिंट करता है।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api [--sdk android.]
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api --sdk com.facebook.
क्या आप उत्सुक नहीं हैं कि Dalvik बाइटकोड में कुछ ऑपकोड कितने कम उपयोग होते हैं? यह आपको सभी ऑपकोड का हिस्टोग्राम दिखाएगा, या आप देख सकते हैं कि दिए गए ऐप में एक विशेष ऑपकोड कितनी बार उपयोग किया जाता है।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd opstat [--op opcode1,opcode2,...]
उदाहरण के लिए,
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat --op div-int/lit16,nop
यह विकल्प प्रसार-आधारित इंटेंट समाधान विश्लेषण करता है, और Activity वर्गों के बीच संक्रमण प्रिंट करता है।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd intent
यह विकल्प एक pdf फ़ाइल उत्पन्न करता है जो दी गई फ़ाइल का कॉल ग्राफ़ दर्शाता है। यदि आप pdf नाम निर्दिष्ट नहीं करते हैं, तो cg.pdf का उपयोग किया जाएगा।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd cg [--to blah.pdf] [--no-pdf]
यह विकल्प एक pdf फ़ाइल उत्पन्न करता है जो दी गई विधि का नियंत्रण-प्रवाह ग्राफ़ दिखाता है। वर्ग नाम के साथ एक डॉट द्वारा विधि नाम जोड़ें: class_name.method_name
$ ruby scripts/cmd.rb target.(apk|dex) --cmd cfg --mtd cls.mtd [--to blah.pdf] [--no-pdf]
यह विकल्प उपरोक्त सुविधा के समान है, सिवाय इसके कि यह (पोस्ट) डोमिनेटर ट्री दर्शाता है।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd (p)dom --mtd cls.mtd [--to blah.pdf] [--no-pdf]
यह विकल्प एक क्लासिक बैकवर्ड डेटा-प्रवाह विश्लेषण करता है।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd live --mtd cls.mtd
यह विकल्प एक क्लासिक फॉरवर्ड डेटा-प्रवाह विश्लेषण करता है।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd const --mtd cls.mtd
यह विकल्प एक क्लासिक फॉरवर्ड डेटा-प्रवाह विश्लेषण करता है।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd reach --mtd cls.mtd
यह विकल्प वर्ग निर्भरता ढूँढता है।
$ ruby scripts/cmd.rb target.(apk|dex) --cmd dependants --mtd cls.mtd
यह विकल्प दिए गए apk का प्रारंभकर्ता गतिविधि नाम प्रिंट करता है।
$ ruby scripts/cmd.rb target.apk --cmd launcher