Smali - Decompiling/[Modifying]/Compiling
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
कभी-कभी यह दिलचस्प होता है कि आप एप्लिकेशन कोड को संशोधित करें ताकि आप छिपी हुई जानकारी तक पहुँच सकें (शायद अच्छी तरह से छिपे हुए पासवर्ड या झंडे)। फिर, यह दिलचस्प हो सकता है कि आप apk को डिकंपाइल करें, कोड को संशोधित करें और फिर से संकलित करें।
Opcodes reference: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Visual Studio Code और APKLab एक्सटेंशन का उपयोग करके, आप बिना किसी कमांड को निष्पादित किए एप्लिकेशन को स्वचालित रूप से डिकंपाइल, संशोधित, संकलित, साइन और इंस्टॉल कर सकते हैं।
एक और स्क्रिप्ट जो इस कार्य को बहुत आसान बनाती है वह है https://github.com/ax/apk.sh
APKTool का उपयोग करके आप smali कोड और संसाधनों तक पहुँच सकते हैं:
यदि apktool आपको कोई त्रुटि देता है, तो नवीनतम संस्करण स्थापित करने का प्रयास करें।
कुछ दिलचस्प फ़ाइलें जिन पर आपको ध्यान देना चाहिए:
res/values/strings.xml (और सभी xmls जो res/values/* के अंदर हैं)
AndroidManifest.xml
कोई भी फ़ाइल जिसका एक्सटेंशन .sqlite या .db है।
यदि apktool
को ऐप्लिकेशन को डिकोड करने में समस्याएँ हैं, तो https://ibotpeaches.github.io/Apktool/documentation/#framework-files पर एक नज़र डालें या -r
(संसाधनों को डिकोड न करें) तर्क का उपयोग करने का प्रयास करें। फिर, यदि समस्या किसी संसाधन में थी और स्रोत कोड में नहीं, तो आपको समस्या नहीं होगी (आप संसाधनों को भी डिकंपाइल नहीं करेंगे)।
आप निर्देशों को बदल सकते हैं, कुछ चर के मान को बदल सकते हैं या नए निर्देश जोड़ सकते हैं। मैं Smali कोड को VS Code का उपयोग करके बदलता हूँ, फिर आप smalise एक्सटेंशन स्थापित करते हैं और संपादक आपको बताएगा कि कोई निर्देश गलत है। कुछ उदाहरण यहाँ मिल सकते हैं:
या आप नीचे कुछ Smali परिवर्तनों की व्याख्या की जाँच कर सकते हैं।
कोड को संशोधित करने के बाद आप कोड को पुनः संकलित कर सकते हैं:
यह dist फ़ोल्डर के भीतर नए APK को संकलित करेगा।
यदि apktool एक त्रुटि फेंकता है, तो नवीनतम संस्करण स्थापित करने का प्रयास करें।
फिर, आपको एक की जनरेट करने की आवश्यकता है (आपसे एक पासवर्ड और कुछ जानकारी मांगी जाएगी जिसे आप यादृच्छिक रूप से भर सकते हैं):
अंत में, साइन करें नए APK को:
zipalign एक आर्काइव संरेखण उपकरण है जो Android एप्लिकेशन (APK) फ़ाइलों के लिए महत्वपूर्ण अनुकूलन प्रदान करता है। यहां अधिक जानकारी।
यदि आप apksigner का उपयोग करना पसंद करते हैं बजाय jarsigner के, तो आपको apk पर हस्ताक्षर करना चाहिए zipalign के साथ अनुकूलन लागू करने के बाद। लेकिन ध्यान दें कि आपको केवल एक बार एप्लिकेशन पर हस्ताक्षर करना है jarsigner के साथ (zipalign से पहले) या aspsigner के साथ (zipalign के बाद)।
निम्नलिखित Hello World Java कोड के लिए:
Smali कोड होगा:
The Smali instruction set is available here.
कुछ चर फ़ंक्शन की शुरुआत में const ऑपकोड का उपयोग करके परिभाषित किए जाते हैं, आप इसके मानों को संशोधित कर सकते हैं, या आप नए मान परिभाषित कर सकते हैं:
Recommendations:
यदि आप फ़ंक्शन के अंदर घोषित वेरिएबल्स का उपयोग करने जा रहे हैं (declared v0,v1,v2...) तो इन लाइनों को .local <number> और वेरिएबल्स के घोषणाओं (const v0, 0x1) के बीच रखें।
यदि आप फ़ंक्शन के कोड के बीच में लॉगिंग कोड डालना चाहते हैं:
घोषित वेरिएबल्स की संख्या में 2 जोड़ें: उदाहरण: .locals 10 से .locals 12।
नए वेरिएबल्स पहले से घोषित वेरिएबल्स के अगले नंबर होने चाहिए (इस उदाहरण में v10 और v11 होना चाहिए, याद रखें कि यह v0 से शुरू होता है)।
लॉगिंग फ़ंक्शन के कोड को बदलें और v10 और v11 का उपयोग करें v5 और v1 के बजाय।
याद रखें कि फ़ंक्शन की शुरुआत में .locals की संख्या में 3 जोड़ें।
यह कोड फ़ंक्शन के बीच में डाले जाने के लिए तैयार है (ज़रूरत के अनुसार वेरिएबल्स की संख्या बदलें)। यह this.o का मान लेगा, इसे String में परिवर्तित करेगा और फिर इसके मान के साथ एक toast बनाएगा।
सीखें और AWS हैकिंग का अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) सीखें और GCP हैकिंग का अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)