Smali - Decompiling/[Modifying]/Compiling
कभी-कभी यह दिलचस्प होता है कि आप एप्लिकेशन कोड को संशोधित करें ताकि आप छिपी हुई जानकारी तक पहुँच सकें (शायद अच्छी तरह से छिपे हुए पासवर्ड या झंडे)। फिर, यह दिलचस्प हो सकता है कि आप apk को डिकंपाइल करें, कोड को संशोधित करें और फिर से संकलित करें।
Opcodes reference: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Fast Way
Visual Studio Code और APKLab एक्सटेंशन का उपयोग करके, आप बिना किसी कमांड को निष्पादित किए एप्लिकेशन को स्वचालित रूप से डिकंपाइल, संशोधित, संकलित, साइन और इंस्टॉल कर सकते हैं।
एक और स्क्रिप्ट जो इस कार्य को बहुत आसान बनाती है वह है https://github.com/ax/apk.sh
Decompile the APK
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 कोड बदलें
आप निर्देशों को बदल सकते हैं, कुछ चर के मान को बदल सकते हैं या नए निर्देश जोड़ सकते हैं। मैं Smali कोड को VS Code का उपयोग करके बदलता हूँ, फिर आप smalise एक्सटेंशन स्थापित करते हैं और संपादक आपको बताएगा कि कोई निर्देश गलत है। कुछ उदाहरण यहाँ मिल सकते हैं:
या आप नीचे कुछ Smali परिवर्तनों की व्याख्या की जाँच कर सकते हैं।
APK को पुनः संकलित करें
कोड को संशोधित करने के बाद आप कोड को पुनः संकलित कर सकते हैं:
यह dist फ़ोल्डर के भीतर नए APK को संकलित करेगा।
यदि apktool एक त्रुटि फेंकता है, तो नवीनतम संस्करण स्थापित करने का प्रयास करें।
नए APK पर हस्ताक्षर करें
फिर, आपको एक की जनरेट करने की आवश्यकता है (आपसे एक पासवर्ड और कुछ जानकारी मांगी जाएगी जिसे आप यादृच्छिक रूप से भर सकते हैं):
अंत में, साइन करें नए APK को:
नए एप्लिकेशन का अनुकूलन
zipalign एक आर्काइव संरेखण उपकरण है जो Android एप्लिकेशन (APK) फ़ाइलों के लिए महत्वपूर्ण अनुकूलन प्रदान करता है। यहां अधिक जानकारी।
नए APK पर हस्ताक्षर करें (फिर से?)
यदि आप apksigner का उपयोग करना पसंद करते हैं बजाय jarsigner के, तो आपको apk पर हस्ताक्षर करना चाहिए zipalign के साथ अनुकूलन लागू करने के बाद। लेकिन ध्यान दें कि आपको केवल एक बार एप्लिकेशन पर हस्ताक्षर करना है jarsigner के साथ (zipalign से पहले) या aspsigner के साथ (zipalign के बाद)।
Smali को संशोधित करना
निम्नलिखित Hello World Java कोड के लिए:
Smali कोड होगा:
The Smali instruction set is available here.
Light Changes
किसी फ़ंक्शन के अंदर एक चर के प्रारंभिक मानों को संशोधित करें
कुछ चर फ़ंक्शन की शुरुआत में const ऑपकोड का उपयोग करके परिभाषित किए जाते हैं, आप इसके मानों को संशोधित कर सकते हैं, या आप नए मान परिभाषित कर सकते हैं:
बुनियादी संचालन
बड़े परिवर्तन
लॉगिंग
Recommendations:
यदि आप फ़ंक्शन के अंदर घोषित वेरिएबल्स का उपयोग करने जा रहे हैं (declared v0,v1,v2...) तो इन लाइनों को .local <number> और वेरिएबल्स के घोषणाओं (const v0, 0x1) के बीच रखें।
यदि आप फ़ंक्शन के कोड के बीच में लॉगिंग कोड डालना चाहते हैं:
घोषित वेरिएबल्स की संख्या में 2 जोड़ें: उदाहरण: .locals 10 से .locals 12।
नए वेरिएबल्स पहले से घोषित वेरिएबल्स के अगले नंबर होने चाहिए (इस उदाहरण में v10 और v11 होना चाहिए, याद रखें कि यह v0 से शुरू होता है)।
लॉगिंग फ़ंक्शन के कोड को बदलें और v10 और v11 का उपयोग करें v5 और v1 के बजाय।
Toasting
याद रखें कि फ़ंक्शन की शुरुआत में .locals की संख्या में 3 जोड़ें।
यह कोड फ़ंक्शन के बीच में डाले जाने के लिए तैयार है (ज़रूरत के अनुसार वेरिएबल्स की संख्या बदलें)। यह this.o का मान लेगा, इसे String में परिवर्तित करेगा और फिर इसके मान के साथ एक toast बनाएगा।
Last updated