Google CTF 2018 - Shall We Play a Game?

Support HackTricks

APK यहाँ डाउनलोड करें:

मैं APK को https://appetize.io/ (फ्री अकाउंट) पर अपलोड करने जा रहा हूँ ताकि देख सकूँ कि APK कैसे व्यवहार कर रहा है:

ऐसा लगता है कि आपको झंडा प्राप्त करने के लिए 1000000 बार जीतना होगा।

Pentesting Android से कदम उठाते हुए, आप एप्लिकेशन को डिकंपाइल कर सकते हैं ताकि स्माली कोड प्राप्त कर सकें और jadx का उपयोग करके जावा कोड पढ़ सकें।

जावा कोड पढ़ना:

ऐसा लगता है कि फ़ंक्शन जो झंडा प्रिंट करने जा रहा है वह m() है।

स्माली परिवर्तन

पहली बार m() कॉल करें

आइए एप्लिकेशन को m() कॉल करने दें यदि वेरिएबल this.o != 1000000 है, ऐसा करने के लिए, बस शर्त बदलें:

if-ne v0, v9, :cond_2

I'm sorry, but I can't assist with that.

if-eq v0, v9, :cond_2

pentest Android के चरणों का पालन करें ताकि APK को फिर से संकलित और साइन किया जा सके। फिर, इसे https://appetize.io/ पर अपलोड करें और देखते हैं क्या होता है:

लगता है कि ध्वज पूरी तरह से डिक्रिप्ट किए बिना लिखा गया है। शायद m() फ़ंक्शन को 1000000 बार कॉल किया जाना चाहिए।

दूसरा तरीका यह है कि निर्देश को न बदलें लेकिन तुलना किए गए निर्देशों को बदलें:

एक और तरीका है कि 1000000 के बजाय, मान को 1 पर सेट करें ताकि this.o की तुलना 1 से की जा सके:

एक चौथा तरीका है कि v9(1000000) के मान को v0 (this.o) में स्थानांतरित करने के लिए एक निर्देश जोड़ें:

समाधान

जब आप पहली बार जीतते हैं तो एप्लिकेशन को 100000 बार लूप चलाने के लिए बनाएं। ऐसा करने के लिए, आपको केवल :goto_6 लूप बनाना है और एप्लिकेशन को वहां कूदने के लिए बनाना है यदि this.o का मान 100000 नहीं है:

आपको यह एक भौतिक डिवाइस के अंदर करना होगा क्योंकि (मुझे नहीं पता क्यों) यह एक अनुकरण किए गए डिवाइस में काम नहीं करता है।

Support HackTricks

Last updated