hacktricks/mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md

123 lines
7.2 KiB
Markdown

# Google CTF 2018 - क्या हम एक खेल खेलें?
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) के साथ जीरो से हीरो तक AWS हैकिंग सीखें</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>!</strong></a></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके।
</details>
यहां APK डाउनलोड करें:
मैं APK को [https://appetize.io/](https://appetize.io) (मुफ्त खाता) पर अपलोड करने जा रहा हूँ ताकि देखा जा सके कि apk कैसे व्यवहार कर रहा है:
![](<../../.gitbook/assets/image (46).png>)
लगता है कि आपको झंझट जीतने के लिए 1000000 बार जीतना होगा।
[pentesting Android](./) से कदमों का पालन करते हुए आप एप्लिकेशन को डिकॉम्पाइल करके smali कोड प्राप्त कर सकते हैं और jadx का उपयोग करके जावा कोड पढ़ सकते हैं।
जावा कोड पढ़ना:
![](<../../.gitbook/assets/image (47).png>)
ऐसा लगता है कि वह फ़ंक्शन जो ध्वज प्रिंट करेगा **m().**
## **Smali परिवर्तन**
### **पहली बार m() को कॉल करें**
आइए ऐप्लिकेशन को m() को कॉल करने के लिए अगर चर _this.o != 1000000_ है तो उसे बदल दें, बस शर्त को बदलें:
```
if-ne v0, v9, :cond_2
```
# Google CTF 2018: Shall we play a game?
---
## Android Application Analysis
### Task 1: Peruse the app
1. **APK Analysis**
- Decompile the APK using JADX or APKTool.
- Look for interesting strings, APIs, and classes.
2. **Static Analysis**
- Analyze the source code for vulnerabilities.
- Look for sensitive data handling, insecure storage, etc.
3. **Dynamic Analysis**
- Run the app in an emulator or device.
- Monitor network traffic, API calls, and behavior.
### Task 2: Find the flag
1. **Reverse Engineering**
- Use JADX, JEB, or Ghidra for disassembling.
- Look for clues, hidden functionalities, or obfuscated code.
2. **File System Analysis**
- Check for configuration files, databases, or shared preferences.
- Look for hardcoded secrets or keys.
3. **Network Traffic Analysis**
- Capture and analyze the app's network requests.
- Look for any sensitive information being transmitted.
### Task 3: Exploit the vulnerability
1. **Code Injection**
- Look for places where user input is not sanitized.
- Try injecting code to execute arbitrary commands.
2. **Security Bypass**
- Identify authentication or authorization flaws.
- Attempt to bypass login screens or access restricted functionalities.
3. **Data Tampering**
- Modify requests/responses to manipulate app behavior.
- Try changing parameters to escalate privileges or access unauthorized data.
By following these steps, you can effectively analyze and exploit Android applications for security testing purposes.
```
if-eq v0, v9, :cond_2
```
![पहले](<../../.gitbook/assets/image (48).png>)
![बाद में](<../../.gitbook/assets/image (49).png>)
[Android पेंटेस्टिंग](./) के चरणों का पालन करें ताकि APK को पुनः कंपाइल और साइन किया जा सके। फिर, इसे [https://appetize.io/](https://appetize.io) पर अपलोड करें और देखें कि क्या होता है:
![](<../../.gitbook/assets/image (50).png>)
लगता है कि फ्लैग बिना पूरी तरह से डिक्रिप्ट किए बिना लिखा गया है। संभावित है कि m() फ़ंक्शन को 1000000 बार कॉल किया जाना चाहिए।
**इसके अलावा** इसे करने का एक तरीका यह है कि निर्देश को बदलने की बजाय तुलना की गई निर्देशों को बदलें:
![](<../../.gitbook/assets/image (55).png>)
**एक और तरीका** यह है कि 1000000 के साथ तुलना करने की बजाय, मान को 1 पर सेट करें ताकि this.o को 1 के साथ तुलना किया जाए:
![](<../../.gitbook/assets/image (57).png>)
चौथा तरीका यह है कि v9(1000000) के मान को v0 _(this.o)_ में ले जाने के लिए एक निर्देश जोड़ें:
![](<../../.gitbook/assets/image (58).png>)
![](<../../.gitbook/assets/image (52).png>)
## समाधान
जब आप पहली बार जीतते हैं, तो ऐप्लिकेशन को लूप को 100000 बार चलाने के लिए बनाने की आवश्यकता है। इसे करने के लिए, आपको केवल **:goto\_6** लूप बनाना है और ऐप्लिकेशन **वहाँ जाने के लिए जाना चाहिए अगर `this.o`** 100000 का मूल्य नहीं है\:
![](<../../.gitbook/assets/image (59).png>)
आपको इसे एक भौतिक उपकरण के अंदर करने की आवश्यकता है क्योंकि (मुझे नहीं पता क्यों) यह एक अनुकृत उपकरण में काम नहीं करता।