mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-14 15:23:01 +00:00
222 lines
26 KiB
Markdown
222 lines
26 KiB
Markdown
# Smali - डिकंपाइलिंग/संशोधित/कंपाइलिंग
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की इच्छा है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
|
|
* खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष संग्रह [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* प्राप्त करें [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या मुझे **Twitter** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **अपने हैकिंग ट्रिक्स साझा करें और PRs सबमिट करें** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **को**
|
|
|
|
</details>
|
|
|
|
कभी-कभी यह दिलचस्प होता है कि आप एप्लिकेशन कोड में परिवर्तन करें ताकि आपको छिपी हुई जानकारी तक पहुंच मिले (शायद अच्छी तरह से छिपाए गए पासवर्ड या फ़्लैग्स). फिर, एपीके को डिकंपाइल करना, कोड में परिवर्तन करना और पुनः कंपाइल करना दिलचस्प हो सकता है।
|
|
|
|
**ओपकोड संदर्भ:** [http://pallergabor.uw.hu/androidblog/dalvik\_opcodes.html](http://pallergabor.uw.hu/androidblog/dalvik\_opcodes.html)
|
|
|
|
## तेज़ तरीका
|
|
|
|
**Visual Studio Code** और [APKLab](https://github.com/APKLab/APKLab) एक्सटेंशन का उपयोग करके आप **स्वचालित रूप से डिकंपाइल कर सकते हैं**, कोड में परिवर्तन कर सकते हैं, **पुनः कंपाइल कर सकते हैं**, एप्लिकेशन को साइन कर सकते हैं और इंस्टॉल कर सकते हैं बिना किसी आदेश को चलाए।
|
|
|
|
इस कार्य को बहुत आसान बनाने वाला एक और **स्क्रिप्ट** है [**https://github.com/ax/apk.sh**](https://github.com/ax/apk.sh)****
|
|
|
|
## APK को डिकंपाइल करें
|
|
|
|
APKTool का उपयोग करके आप **smali कोड और संसाधनों** तक पहुंच सकते हैं:
|
|
```
|
|
apktool d APP.apk
|
|
```
|
|
यदि **apktool** आपको कोई त्रुटि देता है, तो **नवीनतम संस्करण** की कोशिश करें। इंस्टॉल करने के लिए [यहां क्लिक करें](https://ibotpeaches.github.io/Apktool/install/)
|
|
|
|
कुछ **दिलचस्प फ़ाइलें** जिन पर आपको नज़र रखनी चाहिए हैं:
|
|
|
|
* _res/values/strings.xml_ (और res/values/\* के भीतर सभी xml)
|
|
* _AndroidManifest.xml_
|
|
* किसी भी फ़ाइल जिसका एक्सटेंशन _.sqlite_ या _.db_ है
|
|
|
|
यदि `apktool` कोड को **डिकोड** करने में **समस्या होती है**, तो [यहां देखें](https://ibotpeaches.github.io/Apktool/documentation/#framework-files) या तालिका **`-r`** का उपयोग करें (संसाधनों को डिकोड न करें)। फिर, यदि समस्या स्रोत कोड में नहीं है और संसाधन में है, तो आपको समस्या नहीं होगी (आप संसाधनों को भी डिकोड नहीं करेंगे)।
|
|
|
|
## Smali कोड बदलें
|
|
|
|
आप **इंस्ट्रक्शन** को **बदल सकते हैं**, कुछ चरों की **मान** बदल सकते हैं या **नए इंस्ट्रक्शन** जोड़ सकते हैं। मैं [**VS Code**](https://code.visualstudio.com) का उपयोग करके Smali कोड को बदलता हूँ, फिर आप **smalise एक्सटेंशन** इंस्टॉल करेंगे और संपादक आपको बताएगा कि क्या कोई **इंस्ट्रक्शन गलत है**।\
|
|
कुछ **उदाहरण** यहां मिल सकते हैं:
|
|
|
|
* [Smali changes examples](smali-changes.md)
|
|
* [Google CTF 2018 - Shall We Play a Game?](google-ctf-2018-shall-we-play-a-game.md)
|
|
|
|
या आप [**नीचे दिए गए Smali changes explained**](smali-changes.md#modifying-smali) की जांच कर सकते हैं।
|
|
|
|
## APK को पुनः कंपाइल करें
|
|
|
|
कोड को संशोधित करने के बाद आप इसे **पुनः कंपाइल** कर सकते हैं:
|
|
```bash
|
|
apktool b . #In the folder generated when you decompiled the application
|
|
```
|
|
यह नया APK **डिस्ट** फ़ोल्डर के अंदर **कंपाइल** करेगा।
|
|
|
|
अगर **apktool** एक **त्रुटि** दिखाता है, तो [**नवीनतम संस्करण** को इंस्टॉल करने](https://ibotpeaches.github.io/Apktool/install/) का प्रयास करें।
|
|
|
|
### **नया APK को साइन करें**
|
|
|
|
फिर, आपको एक **की जेनरेट** करनी होगी (आपसे पासवर्ड और कुछ जानकारी के लिए पूछा जाएगा जिसे आप यादस्थ भर सकते हैं):
|
|
```bash
|
|
keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias <your-alias>
|
|
```
|
|
अंत में, **नया APK** को **साइन** करें:
|
|
```bash
|
|
jarsigner -keystore key.jks path/to/dist/* <your-alias>
|
|
```
|
|
### नई एप्लिकेशन को अनुकूलित करें
|
|
|
|
**zipalign** एक आर्काइव संरेखण उपकरण है जो एंड्रॉइड एप्लिकेशन (APK) फ़ाइलों को महत्वपूर्ण अनुकूलन प्रदान करता है। [अधिक जानकारी यहाँ](https://developer.android.com/studio/command-line/zipalign)।
|
|
```bash
|
|
zipalign [-f] [-v] <alignment> infile.apk outfile.apk
|
|
zipalign -v 4 infile.apk
|
|
```
|
|
### **नया APK को साइन करें (फिर से?)**
|
|
|
|
यदि आप \[**apksigner**]\([**https://developer.android.com/studio/command-line/apksigner**](https://developer.android.com/studio/command-line/apksigner)) का उपयोग करना **पसंद करते हैं**, तो zipalign के साथ **अनुप्रयोग करने के बाद apk को साइन करना चाहिए**। लेकिन ध्यान दें कि आपको केवल एक बार अप्लिकेशन को साइन करना होगा, जारसाइनर (zipalign के पहले) या एस्पसाइनर (zipalign के बाद) के साथ।
|
|
```bash
|
|
apksigner sign --ks key.jks ./dist/mycompiled.apk
|
|
```
|
|
## Smali में परिवर्तन करना
|
|
|
|
निम्नलिखित Hello World Java कोड के लिए:
|
|
```
|
|
public static void printHelloWorld() {
|
|
System.out.println("Hello World")
|
|
}
|
|
```
|
|
स्माली कोड होगा:
|
|
```
|
|
.method public static printHelloWorld()V
|
|
.registers 2
|
|
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
|
|
const-string v1, "Hello World"
|
|
invoke-virtual {v0,v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
|
|
return-void
|
|
.end method
|
|
```
|
|
स्माली निर्देश सेट [यहाँ](https://source.android.com/devices/tech/dalvik/dalvik-bytecode#instructions) उपलब्ध है।
|
|
|
|
### हल्के परिवर्तन
|
|
|
|
### एक फ़ंक्शन के भीतर एक चर के प्रारंभिक मानों को संशोधित करें
|
|
|
|
कुछ चरों को फ़ंक्शन की शुरुआत में _const_ ऑपकोड का उपयोग करके परिभाषित किया जाता है, आप इसके मानों को संशोधित कर सकते हैं, या आप नए मानों को परिभाषित कर सकते हैं:
|
|
```
|
|
#Number
|
|
const v9, 0xf4240
|
|
const/4 v8, 0x1
|
|
#Strings
|
|
const-string v5, "wins"
|
|
```
|
|
### मूलभूत कार्य
|
|
|
|
#### Smali फ़ाइलों का बदलाव
|
|
|
|
एंड्रॉइड ऐप्स को पेंटेस्ट करते समय, आपको Smali फ़ाइलों को संपादित करने की आवश्यकता हो सकती है। Smali भाषा, जो एंड्रॉइड ऐप्स के लिए विकसित की गई है, द्वारा ऐप्लिकेशन कोड को प्रदर्शित करती है। इस भाषा में लिखे गए कोड को आप बदल सकते हैं और इसे अपनी आवश्यकताओं के अनुसार संशोधित कर सकते हैं।
|
|
|
|
#### Smali फ़ाइलों के बदलाव के लिए उपयोगी ऑपरेशन
|
|
|
|
1. नई वस्तुओं को जोड़ें: आप Smali फ़ाइल में नई वस्तुओं को जोड़ सकते हैं, जैसे कि नए फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में नई वस्तुओं को परिभाषित करना होगा और उन्हें संदर्भित करने के लिए उपयोग करना होगा।
|
|
|
|
2. मौजूदा वस्तुओं को संशोधित करें: आप Smali फ़ाइल में मौजूदा वस्तुओं को संशोधित कर सकते हैं, जैसे कि फ़ंक्शन कोड, वेरिएबल के मान, या क्लास के नाम। इसके लिए, आपको संशोधित करना चाहिए और फ़ाइल को सहेजना चाहिए।
|
|
|
|
3. वस्तुओं को हटाएं: आप Smali फ़ाइल से वस्तुओं को हटा सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में से वस्तुओं को हटाना होगा और फ़ाइल को सहेजना होगा।
|
|
|
|
4. वस्तुओं को पुनर्स्थापित करें: आप Smali फ़ाइल में वस्तुओं को पुनर्स्थापित कर सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में से वस्तुओं को हटाना होगा और फ़ाइल को सहेजना होगा।
|
|
|
|
5. वस्तुओं को खोजें और प्रतिस्थापित करें: आप Smali फ़ाइल में वस्तुओं को खोज सकते हैं और उन्हें प्रतिस्थापित कर सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में वस्तुओं को खोजना होगा और उन्हें संदर्भित करने के लिए उपयोग करना होगा।
|
|
|
|
6. वस्तुओं को विस्तारित करें: आप Smali फ़ाइल में वस्तुओं को विस्तारित कर सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में वस्तुओं को विस्तारित करना होगा और उन्हें संदर्भित करने के लिए उपयोग करना होगा।
|
|
|
|
7. वस्तुओं को संक्षेपित करें: आप Smali फ़ाइल में वस्तुओं को संक्षेपित कर सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में वस्तुओं को संक्षेपित करना होगा और उन्हें संदर्भित करने के लिए उपयोग करना होगा।
|
|
|
|
8. वस्तुओं को खोजें और उन्हें पढ़ें: आप Smali फ़ाइल में वस्तुओं को खोज सकते हैं और उन्हें पढ़ सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में वस्तुओं को खोजना होगा और उन्हें पढ़ने के लिए उपयोग करना होगा।
|
|
|
|
9. वस्तुओं को खोजें और उन्हें लिखें: आप Smali फ़ाइल में वस्तुओं को खोज सकते हैं और उन्हें लिख सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में वस्तुओं को खोजना होगा और उन्हें लिखने के लिए उपयोग करना होगा।
|
|
|
|
10. वस्तुओं को खोजें और उन्हें हटाएं: आप Smali फ़ाइल में वस्तुओं को खोज सकते हैं और उन्हें हटा सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में वस्तुओं को खोजना होगा और उन्हें हटाने के लिए उपयोग करना होगा।
|
|
|
|
11. वस्तुओं को खोजें और उन्हें पुनर्स्थापित करें: आप Smali फ़ाइल में वस्तुओं को खोज सकते हैं और उन्हें पुनर्स्थापित कर सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में वस्तुओं को खोजना होगा और उन्हें संदर्भित करने के लिए उपयोग करना होगा।
|
|
|
|
12. वस्तुओं को खोजें और उन्हें विस्तारित करें: आप Smali फ़ाइल में वस्तुओं को खोज सकते हैं और उन्हें विस्तारित कर सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में वस्तुओं को खोजना होगा और उन्हें संदर्भित करने के लिए उपयोग करना होगा।
|
|
|
|
13. वस्तुओं को खोजें और उन्हें संक्षेपित करें: आप Smali फ़ाइल में वस्तुओं को खोज सकते हैं और उन्हें संक्षेपित कर सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में वस्तुओं को खोजना होगा और उन्हें संदर्भित करने के लिए उपयोग करना होगा।
|
|
|
|
14. वस्तुओं को खोजें और उन्हें खोजें और पढ़ें: आप Smali फ़ाइल में वस्तुओं को खोज सकते हैं और उन्हें खोजें और पढ़ें सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में वस्तुओं को खोजना होगा और उन्हें पढ़ने के लिए उपयोग करना होगा।
|
|
|
|
15. वस्तुओं को खोजें और उन्हें खोजें और लिखें: आप Smali फ़ाइल में वस्तुओं को खोज सकते हैं और उन्हें खोजें और लिख सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके लिए, आपको Smali कोड में वस्तुओं को खोजना होगा और उन्हें लिखने के लिए उपयोग करना होगा।
|
|
|
|
16. वस्तुओं को खोजें और उन्हें खोजें और हटाएं: आप Smali फ़ाइल में वस्तुओं को खोज सकते हैं और उन्हें खोजें और हटा सकते हैं, जैसे कि फ़ंक्शन, वेरिएबल, या क्लास। इसके
|
|
```
|
|
#Math
|
|
add-int/lit8 v0, v2, 0x1 #v2 + 0x1 and save it in v0
|
|
mul-int v0,v2,0x2 #v2*0x2 and save in v0
|
|
|
|
#Move the value of one object into another
|
|
move v1,v2
|
|
|
|
#Condtions
|
|
if-ge #Greater or equals
|
|
if-le #Less or equals
|
|
if-eq #Equals
|
|
|
|
#Get/Save attributes of an object
|
|
iget v0, p0, Lcom/google/ctf/shallweplayagame/GameActivity;->o:I #Save this.o inside v0
|
|
iput v0, p0, Lcom/google/ctf/shallweplayagame/GameActivity;->o:I #Save v0 inside this.o
|
|
|
|
#goto
|
|
:goto_6 #Declare this where you want to start a loop
|
|
if-ne v0, v9, :goto_6 #If not equals, go to: :goto_6
|
|
goto :goto_6 #Always go to: :goto_6
|
|
```
|
|
### बड़े परिवर्तन
|
|
|
|
### लॉगिंग
|
|
```
|
|
#Log win: <number>
|
|
iget v5, p0, Lcom/google/ctf/shallweplayagame/GameActivity;->o:I #Get this.o inside v5
|
|
invoke-static {v5}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; #Transform number to String
|
|
move-result-object v1 #Move to v1
|
|
const-string v5, "wins" #Save "win" inside v5
|
|
invoke-static {v5, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I #Logging "Wins: <num>"
|
|
```
|
|
सिफारिशें:
|
|
|
|
* यदि आप किसी फंक्शन में घोषित चरों (घोषित v0, v1, v2...) का उपयोग करने जा रहे हैं, तो इन लाइनों को _.local \<number>_ और चरों के घोषणाओं (_const v0, 0x1_) के बीच में डालें।
|
|
* यदि आप किसी फंक्शन के कोड के बीच में लॉगिंग कोड डालना चाहते हैं:
|
|
* घोषित चरों की संख्या में 2 जोड़ें: उदाहरण के लिए, _.locals 10_ से _.locals 12_ तक।
|
|
* नए चरों को पहले घोषित चरों के अगले नंबर होना चाहिए (इस उदाहरण में _v10_ और _v11_ होने चाहिए, ध्यान दें कि यह v0 से शुरू होता है)।
|
|
* लॉगिंग फंक्शन कोड बदलें और _v5_ और _v1_ की जगह _v10_ और _v11_ का उपयोग करें।
|
|
|
|
### टोस्टिंग
|
|
|
|
ध्यान दें कि फंक्शन की शुरुआत में _.locals_ की संख्या में 3 जोड़ना न भूलें।
|
|
|
|
यह कोड **फंक्शन के बीच में** डालने के लिए तैयार है (**चरों** की संख्या को आवश्यकतानुसार **बदलें**)। यह **this.o** के **मान** को **String** में **परिवर्तित** करेगा और उसके मान के साथ एक **टोस्ट** बनाएगा।
|
|
```
|
|
const/4 v10, 0x1
|
|
const/4 v11, 0x1
|
|
const/4 v12, 0x1
|
|
iget v10, p0, Lcom/google/ctf/shallweplayagame/GameActivity;->o:I
|
|
invoke-static {v10}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
|
|
move-result-object v11
|
|
invoke-static {p0, v11, v12}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
|
|
move-result-object v12
|
|
invoke-virtual {v12}, Landroid/widget/Toast;->show()V
|
|
```
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की इच्छा है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
|
|
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFT संग्रह**](https://opensea.io/collection/the-peass-family)
|
|
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
|
|
* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में या मुझे **Twitter** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **को।**
|
|
|
|
</details>
|