Smali - Decompiling/[Modifying]/Compiling
कभी-कभी एप्लिकेशन कोड में परिवर्तन करना दिलचस्प हो सकता है ताकि आप छुपी जानकारी तक पहुंच सकें (शायद अच्छी तरह से ओबफस्केटेड पासवर्ड या फ्लैग्स). फिर, apk को डिकंपाइल करना, कोड में परिवर्तन करना और पुनः कंपाइल करना दिलचस्प हो सकता है।
ऑपकोड संदर्भ: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
तेज तरीका
Visual Studio Code और APKLab एक्सटेंशन का उपयोग करके आप स्वचालित रूप से डिकंपाइल कर सकते हैं, कोड में परिवर्तन कर सकते हैं, पुनः कंपाइल कर सकते हैं, एप्लिकेशन को साइन कर सकते हैं और इंस्टॉल कर सकते हैं बिना किसी कमांड को चलाए।
एक और स्क्रिप्ट जो इस कार्य को बहुत आसान बनाता है, वह है https://github.com/ax/apk.sh
APK को डिकंपाइल करें
APKTool का उपयोग करके आप smali कोड और संसाधनों तक पहुंच सकते हैं:
यदि apktool आपको कोई त्रुटि देता है, तो नवीनतम संस्करण इंस्टॉल करने का प्रयास करें।
कुछ रोचक फ़ाइलें जिन्हें आपको देखना चाहिए हैं:
res/values/strings.xml (और res/values/* के सभी xml)
AndroidManifest.xml
किसी भी फ़ाइल जिसका एक्सटेंशन .sqlite या .db है।
यदि apktool
में एप्लिकेशन को डिकोड करने में समस्या है, तो https://ibotpeaches.github.io/Apktool/documentation/#framework-files पर जांच करें या तरीका आज़माएं -r
(संसाधनों को डिकोड न करें)। फिर, यदि समस्या स्रोत कोड में नहीं थी बल्कि संसाधन में थी, तो आपको समस्या नहीं होगी (आप संसाधनों को भी डिकोड नहीं करेंगे)।
स्माली कोड बदलें
आप निर्देशों को बदल सकते हैं, कुछ चर मान को बदल सकते हैं या नए निर्देश जोड़ सकते हैं। मैं VS Code का उपयोग करके स्माली कोड बदलता हूँ, फिर आप smalise एक्सटेंशन इंस्टॉल करें और संपादक आपको बताएगा कि कोई निर्देश गलत है। कुछ उदाहरण यहाँ मिल सकते हैं:
या आप नीचे कुछ स्माली बदलाव का विवरण देखें।
APK को पुनः संकलित करें
कोड को संशोधित करने के बाद आप इसे फिर से संकलित कर सकते हैं:
यह नया APK dist फ़ोल्डर कंपाइल करेगा।
अगर apktool एक त्रुटि फेंकता है, तो नवीनतम संस्करण इंस्टॉल करने का प्रयास करें।
नया APK को साइन करें
फिर, आपको एक कुंजी उत्पन्न करनी होगी (आपसे पासवर्ड और कुछ जानकारी के लिए पूछा जाएगा जिसे आप यादृच्छिक रूप से भर सकते हैं):
अंत में, नए APK को साइन करें:
नई एप्लिकेशन को अनुकूलित करें
zipalign एक आर्काइव समरेखन उपकरण है जो Android एप्लिकेशन (APK) फ़ाइलों को महत्वपूर्ण अनुकूलन प्रदान करता है। अधिक जानकारी यहाँ।
नए APK को साइन करें (फिर से?)
यदि आप apksigner का उपयोग करना पसंद करते हैं जब jarsigner की बजाय, तो आपको zipaling के साथ ऑप्टिमाइजेशन लागू करने के बाद apk को साइन करना चाहिए। लेकिन ध्यान दें कि आपको केवल एक बार एप्लिकेशन को साइन करना है jarsigner के साथ (zipalign से पहले) या apksigner के साथ (zipalign के बाद)।
स्माली में परिवर्तन
निम्नलिखित Hello World जावा कोड के लिए:
यहाँ स्माली कोड होगा:
Light Changes
एक फ़ंक्शन के भीतर एक चर के प्रारंभिक मानों को संशोधित करें
कुछ चर फ़ंक्शन की शुरुआत में const ऑपकोड का उपयोग करके परिभाषित किए जाते हैं, आप इसके मानों को संशोधित कर सकते हैं, या आप नए परिभाषित कर सकते हैं:
मूल ऑपरेशन्स
बड़े परिवर्तन
लॉगिंग
सिफ़्टिंग
ध्यान दें कि फ़ंक्शन की शुरुआत में .locals की संख्या में 3 जोड़ना न भूलें।
यह कोड फ़ंक्शन के बीच में डालने के लिए तैयार है (जरूरी होने पर वेरिएबल्स की संख्या में परिवर्तन करें)। यह this.o का मान लेगा, इसे स्ट्रिंग में परिवर्तित करेगा और फिर इसके मान के साथ एक टोस्ट बनाएगा।
Last updated