mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
6.0 KiB
6.0 KiB
Reversing Native Libraries
{{#include ../../banners/hacktricks-training.md}}
अधिक जानकारी के लिए देखें: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
एंड्रॉइड ऐप्स प्रदर्शन-क्रिटिकल कार्यों के लिए आमतौर पर C या C++ में लिखी गई नेटीव लाइब्रेरी का उपयोग कर सकते हैं। मैलवेयर निर्माता भी इन लाइब्रेरी का उपयोग करते हैं, क्योंकि इन्हें DEX बाइटकोड की तुलना में रिवर्स इंजीनियर करना कठिन होता है। यह अनुभाग एंड्रॉइड के लिए अनुकूलित रिवर्स इंजीनियरिंग कौशल पर जोर देता है, न कि असेंबली भाषाओं को सिखाने पर। संगतता के लिए ARM और x86 संस्करणों की लाइब्रेरी प्रदान की जाती हैं।
मुख्य बिंदु:
- एंड्रॉइड ऐप्स में नेटीव लाइब्रेरी:
- प्रदर्शन-गहन कार्यों के लिए उपयोग किया जाता है।
- C या C++ में लिखा गया, जिससे रिवर्स इंजीनियरिंग चुनौतीपूर्ण हो जाती है।
.so
(शेयर की गई वस्तु) प्रारूप में पाया जाता है, जो लिनक्स बाइनरी के समान है।- मैलवेयर निर्माता विश्लेषण को कठिन बनाने के लिए नेटीव कोड को प्राथमिकता देते हैं।
- जावा नेटीव इंटरफेस (JNI) और एंड्रॉइड NDK:
- JNI जावा विधियों को नेटीव कोड में लागू करने की अनुमति देता है।
- NDK नेटीव कोड लिखने के लिए एंड्रॉइड-विशिष्ट उपकरणों का एक सेट है।
- JNI और NDK जावा (या कोटलिन) कोड को नेटीव लाइब्रेरी के साथ जोड़ते हैं।
- लाइब्रेरी लोडिंग और निष्पादन:
- लाइब्रेरी को
System.loadLibrary
याSystem.load
का उपयोग करके मेमोरी में लोड किया जाता है। - लाइब्रेरी लोडिंग पर JNI_OnLoad निष्पादित होता है।
- जावा द्वारा घोषित नेटीव विधियाँ नेटीव कार्यों से लिंक होती हैं, जिससे निष्पादन सक्षम होता है।
- जावा विधियों को नेटीव कार्यों से लिंक करना:
- डायनामिक लिंकिंग: नेटीव लाइब्रेरी में कार्यों के नाम एक विशिष्ट पैटर्न से मेल खाते हैं, जिससे स्वचालित लिंकिंग की अनुमति मिलती है।
- स्टैटिक लिंकिंग: लिंकिंग के लिए
RegisterNatives
का उपयोग करता है, जो कार्य नामकरण और संरचना में लचीलापन प्रदान करता है। - रिवर्स इंजीनियरिंग उपकरण और तकनीकें:
- Ghidra और IDA Pro जैसे उपकरण नेटीव लाइब्रेरी का विश्लेषण करने में मदद करते हैं।
JNIEnv
JNI कार्यों और इंटरैक्शन को समझने के लिए महत्वपूर्ण है।- लाइब्रेरी लोड करने, विधियों को लिंक करने और नेटीव कार्यों की पहचान करने का अभ्यास करने के लिए व्यायाम प्रदान किए गए हैं।
संसाधन:
- ARM असेंबली सीखना:
- अंतर्निहित आर्किटेक्चर की गहरी समझ के लिए सुझावित।
- ARM Assembly Basics Azeria Labs से अनुशंसित है।
- JNI और NDK दस्तावेज़ीकरण:
- Oracle का JNI विनिर्देशन
- एंड्रॉइड के JNI टिप्स
- NDK के साथ शुरुआत करना
- नेटीव लाइब्रेरी का डिबगिंग:
- JEB Decompiler का उपयोग करके एंड्रॉइड नेटीव लाइब्रेरी का डिबगिंग
{{#include ../../banners/hacktricks-training.md}}