
तेज़ Android APK डीकंपाइलर फ्रंट-एंड जो सीधे कंपाइल किए गए DEX आर्टिफैक्ट्स को क्वेरी करता है, बिना प्रीप्रोसेसिंग के मिलीसेकंड में क्लासेस और क्रॉस-रेफरेंसेस निकालता है।
विशाल Android APK को डीकंपाइल करते समय, मानक प्रक्रिया प्रतीक्षा करना है। हम उपकरणों के गीगाबाइट्स RAM खाने, आर्टिफैक्ट्स को पूरी तरह से फुलाने, और भारी ग्लोबल इंडेक्स और क्रॉस रेफरेंस बनाने में दसियों मिनट बिताने का इंतज़ार करते हैं... यह सब बाद में तेज़ कोड खोज की गारंटी के लिए है, लेकिन यहाँ विरोधाभास है। एक कंपाइल किया गया आर्टिफैक्ट पहले से ही अत्यधिक संरचित होता है, आधुनिक डीकंपाइलर इसका उपयोग कभी नहीं करते, वे पहले से संरचित डेटा पर कोड संबंधों का एक फुलाया हुआ डेटाबेस पुनर्निर्माण करने में भारी मात्रा में समय और मेमोरी बर्बाद करते हैं। यह इंजीनियरिंग दृष्टिकोण सामान्य ज्ञान की अवहेलना करता है। जब मैं APK से किसी भी कोड संबंध को मिलीसेकंड में सीधे निकाल सकता हूँ, तो क्या इस प्रीप्रोसेसिंग का अभी भी कोई मूल्य है?
डीकंपाइलरों को भारी प्रीप्रोसेसिंग में मजबूर करने के बजाय, हम कंपाइल किए गए आर्टिफैक्ट को सीधे एक डेटाबेस के रूप में क्वेरी करना चुनते हैं। हमने एक स्टेटलेस, ज़ीरो-ओवरहेड इंजन बनाया है जो मिलीसेकंड में मांग पर कोड निकालता और खोजता है। इस ब्रीफिंग में, हम पारंपरिक बाधाओं को दरकिनार करने के लिए आवश्यक अंतर्निहित इंजीनियरिंग का पता लगाएंगे। हम प्रदर्शित करेंगे कि कैसे Deflate बिटस्ट्रीम के भीतर सीधे प्रोबिंग करके पूर्ण इन्फ्लेट को त्यागना है, अप्रासंगिक डेटा ब्लॉक्स को छुए बिना मुख्य मेटाडेटा निकालने के लिए सघन Huffman लुकअप टेबल बनाना। इसके अलावा, हम R8 कंपाइलर के ऑप्टिमाइज़ेशन विवरण समझाएंगे, विशेष रूप से कैसे डिटरमिनिस्टिक कॉन्स्टेंट रीलोकेशन और इंस्ट्रक्शन डीडुप्लीकेशन अत्यधिक संकेंद्रित भौतिक लेआउट छोड़ देते हैं, हम इस कंपाइलर व्यवहार को हथियार बनाकर बिजली-तेज़ क्रॉस DEX कोड खोजों को निष्पादित करते हैं। इन कच्चे बाइटकोड ऑफसेट्स को वापस मेथड्स पर मैप करने के लिए, हमने एक O(1) इंस्ट्रक्शन लोकेटिंग प्रिमिटिव इंजीनियर किया, भारी मैपिंग टेबल बनाए बिना कॉन्स्टेंट-टाइम मेथड रिज़ॉल्यूशन प्राप्त किया। अंत में, लक्ष्य पर पहुंचने पर, Droid ASC केवल विशिष्ट बाइटकोड्स और उसकी निर्भरताएँ निकालता है, तत्काल डीकंपाइलेशन के लिए पूरी तरह से मेमोरी में एक न्यूनतम और स्व-संगत DEX को गतिशील रूप से पुनर्निर्माण करता है।
हम इस आर्किटेक्चर को 352MB के व्यावसायिक APK के विरुद्ध लाइव प्रदर्शित करेंगे। Droid ASC ग्लोबल क्रॉस रेफरेंस खोजों को 1.79 सेकंड में निष्पादित करता है और केवल 141MB RAM का उपयोग करके लक्ष्य क्लासेस को 177 मिलीसेकंड में डीकंपाइल करता है। आर्टिफैक्ट को एक रीड-ओनली डेटाबेस के रूप में मानकर और ज़ीरो प्रीप्रोसेसिंग के साथ काम करके, हम डीकंपाइलर को उसके मूल सार में वापस लाते हैं। यह अब एक फुलाया हुआ इंडेक्सिंग टूल नहीं है, बल्कि एक बिजली-तेज़, ऑन-डिमांड डीकंपाइलेशन इंजन है जो मौलिक रूप से पुनर्परिभाषित करता है कि हम कंपाइल किए गए कोड का विश्लेषण कैसे करते हैं।

https://github.com/user-attachments/assets/4c4a6813-8561-490c-a573-ef113da861b6
# from PyPI
pip install droidasc
# or from source
pip install .
इंस्टॉलेशन के बाद, droidasc CLI कमांड विश्व स्तर पर उपलब्ध है:
usage: droidasc [-h] {getclass,listclass,getmanifest,findrefs} ...
ASC tooling entry.
positional arguments:
{getclass,listclass,getmanifest,findrefs}
getclass Locate the target class in APK, extract one DEX in memory, then decompile.
listclass List classes defined across all DEX entries in APK.
getmanifest Decode AndroidManifest.xml from APK and print it as XML.
findrefs Find code references for string/type/method/field across all DEX entries in APK.
options:
-h, --help show this help message and exit
examples:
droidasc app.apk --gui
droidasc getclass app.apk Lcom/poc/Main; -o Main.java
droidasc getclass app.apk com.poc.Main --threads 16
droidasc listclass app.apk -o classes.txt
droidasc listclass app.apk --prefix com.poc
droidasc getmanifest app.apk -o AndroidManifest.xml
droidasc findrefs app.apk string token -o string_refs.txt
droidasc findrefs app.apk type com.poc.Main
droidasc findrefs app.apk method onCreate --class com.poc.Main
droidasc findrefs app.apk method notify --class MainActivity --fuzzy-class -o method_refs.txt
droidasc findrefs app.apk field apiKey -o field_refs.txt
listclass APK/DEX परिभाषा क्रम में Dalvik क्लास डिस्क्रिप्टर प्रिंट करता है, प्रति पंक्ति एक।
-o के साथ, आउटपुट stdout के बजाय चयनित फ़ाइल में लिखा जाता है।
--prefix com.poc Lcom/poc द्वारा फ़िल्टर करता है; पहले से सामान्यीकृत प्रीफ़िक्स जैसे
Lcom/poc अपरिवर्तित रखा जाता है।
आप पहले की तरह python main.py का भी उपयोग कर सकते हैं — यह उसी एंट्री पॉइंट पर प्रतिनिधित्व करता है।
| प्रायोजक | राशि |
|---|---|
| HTTChina | 5000¥ |
| c01ns | 11.9¥ |
| gguowang AND cococount | 2¥ |
| Ylarod | 50.11¥ |
सभी प्रायोजकों को उनके समर्थन के लिए धन्यवाद!
ASC इस आशा के साथ बनाया गया है कि यह वास्तव में सभी को उनके रिवर्स इंजीनियरिंग वर्कफ़्लो को बेहतर बनाने में मदद कर सके — उबाऊ हिस्सों को तेज़ करने से लेकर असंभव को सामान्य बनाने तक।
Androguard प्रोजेक्ट को धन्यवाद Droid ASC द्वारा उपयोग किए जाने वाले Android रिवर्स-इंजीनियरिंग और DEX विश्लेषण आधार प्रदान करने के लिए।