2012-10-30 8 views
14

मैं एक ऐप लिख रहा हूं जो लिनक्स कर्नेल में कुछ कमांड निष्पादित करने के लिए su का उपयोग करेगा। मैं सोच रहा था कि SuperUser कैसे पता लगाता है कि एप्लिकेशन रूट विशेषाधिकारों के लिए पूछ रहा है? इसके अलावा, क्या कोई ज्ञात तरीके हैं (obfuscation के माध्यम से) जिसमें इस चेक को छोड़ दिया जा सकता है?Android SuperUser ऐप कैसे पता लगाता है कि ऐप रूट अनुरोध करता है?

दूसरे शब्दों में: एंड्रॉइड/(सुपरयूसर) कैसे पता चलता है कि ऐप को रूट विशेषाधिकारों की आवश्यकता है, इस तथ्य के बावजूद कि एंड्रॉइड मेनिफेस्ट फ़ाइल में स्पष्ट रूप से अनुरोध नहीं किया गया है।

मैं इस सवाल को सुरक्षा दृष्टिकोण से पूछ रहा हूं। मैं यह जानना चाहता हूं कि यह कैसे काम करता है यह सुनिश्चित करने के लिए कि एक दुर्भावनापूर्ण ऐप SuperUser को बाईपास नहीं कर सकता है। सुपर उपयोगकर्ता अनुमतियों के साथ जो केवल एक ऐप्लिकेशन कर सकते हैं

Process p = Runtime.getRuntime().exec("su"); 

आप निष्पादित करने के लिए "सु" कोशिश कर रहे हैं:

उत्तर

14

जब आप इस चलाने! इसलिए जब भी एंड्रॉइड यह पता लगाता है कि आप "su" चलाने की कोशिश कर रहे हैं, तो यह होगा कि ऐप को सुपरसुर अनुमतियों की आवश्यकता होगी।

इसके अलावा, एंड्रॉइड में कुछ क्षेत्र आरक्षित है जो केवल एंड्रॉइड सिस्टम तक पहुंच सकता है। यदि आपका ऐप वहां कुछ एक्सेस करने का प्रयास कर रहा है, तो एंड्रॉइड समझ जाएगा कि सुपरसुर की आवश्यकता है।

उदाहरण के लिए, आप होस्ट फ़ाइल को संशोधित करने या DHCP जैसे कुछ नेटवर्क कॉन्फ़िगरेशन को संशोधित करने का प्रयास कर रहे हैं। या आप सिस्टम क्षेत्र से फ़ाइलों तक पहुंचने का प्रयास कर रहे हैं उदा। /data एंड्रॉइड जांच करेगा कि ऐप में सुपरसियर अनुमतियां हैं या नहीं, और फिर केवल ऐसी चीजों तक पहुंच प्रदान करेगी।

दुर्भावनापूर्ण सॉफ़्टवेयर के बारे में, जब भी किसी ऐप को सुपरसुर एक्सेस की आवश्यकता होती है, तो सिस्टम उपयोगकर्ता को ऐप को सुपरसुर अनुमतियां देने या अस्वीकार करने के लिए संकेत देगा। केवल तभी ऐप रूट पहुंच प्राप्त कर सकता है। इसलिए यह तय करने के लिए उपयोगकर्ता पर निर्भर है कि किसी भी ऐप के लिए रूट एक्सेस स्वीकार या अस्वीकार करना है या नहीं। (सिस्टम उपयोगकर्ता हर बार कोई एप्लिकेशन जब तक आप एक विशेष अनुप्रयोग के लिए स्वीकृति या इनकार की अपनी पसंद को याद करने की प्रणाली बताओ, कुछ ऐसा है जो जड़ उपयोग की जरूरत का उपयोग करने की कोशिश कर रहा है का संकेत देगा।)

पुनश्च: आप सोच सकते हैं website for Superuser app की जांच कर रहा है।

+1

+1 अच्छी व्याख्या –

+2

और 'सुपरसुर' ऐप केवल ** सु ** अधिकार प्रदाता के रूप में कैसे कार्य करता है? यह प्रभारी बनने के लिए क्या बनाता है? – waqaslam

+0

@Waqas यह आपके प्रश्न का उत्तर दे सकता है http://androidsu.com/superuser/ बस साइट का पता लगाएं। मैं जवाब में लिंक अपडेट कर दूंगा। दूसरों के लिए सहायक हो सकता है। :) –

6

दरअसल यह काफी सरल है। वेनिला एंड्रॉइड में su या superuser भी नहीं है। जब आप डिवाइस को रूट करते हैं तो आप रूट के रूप में खोल खोलते हैं। फिर आप su बाइनरी और superuser.apk इंस्टॉल करें। इंस्टॉल करने के बाद आप खोल को अपनी सामान्य अनुमतियों पर वापस सेट करें। रूट इन के लिए पूछने के लिए ये सभी रूट-केवल ऐप्स su पर कॉल कर सकते हैं।

जब su चलाया जाता है तो यह superuser.apk पर कॉल करता है जो आपको यह पूछता है कि आप विशेषाधिकारों को ऊपर उठाना चाहते हैं या नहीं। su बाइनरी और superuser.apk एंड्रॉइड के सामान्य सैंडबॉक्सिंग के माध्यम से सुरक्षित हैं। ध्यान दें कि एक बार जब आप ऐप रूट विशेषाधिकार देते हैं तो यह जो कुछ भी चाहता है वह करने के लिए स्वतंत्र है जिसमें अपने स्वयं के संस्करण के साथ ओवरराइटिंग सु शामिल है।

17

सुपरसुर सिस्टम के लिए दो भाग हैं - superuser binary (टर्मिनल पर su) और SuperUser.apk (सुइट का उपयोग करके ऐप्स प्रबंधित करने के लिए एंड्रॉइड ऐप)।su binary के स्रोत कोड को देखते हुए, जब आप के माध्यम से

Process p = Runtime.getRuntime().exec("su"); 

यह एंड्रॉयड मैसेजिंग प्रबंधक के माध्यम से एक आशय है कि एक आवेदन सुपर उपयोगकर्ता पहुँच के लिए अनुरोध किया है प्रकाशित करती सु पहुँच का अनुरोध।

sprintf(command, "/system/bin/am broadcast -a '%s' --es socket '%s' --ei caller_uid '%d' --ei allow '%d' --ei version_code '%d' > /dev/null",action, socket_path, ctx->from.uid, allow, VERSION_CODE); 

प्रबंधक ऐप इस इरादे के लिए सुनता है और उपयोगकर्ता से अनुरोध (अनुमति/अस्वीकार) को संभालने के लिए कहता है।

+0

आपके स्पष्टीकरण के मुताबिक, ऐसा लगता है कि 'सु' ने सुपरसियर.एपीके को गीलेर को बताने के लिए एक संदेश प्रसारित किया है, इसे रूट पहुंच की अनुमति देनी चाहिए या नहीं। तो मैं सोच रहा हूं, सुपरसियर.एपीके के बजाय उस अनुरोध का जवाब देने के लिए एक और ऐप को क्या रोकता है? (यदि यह संभव था तो यह एक बड़ी भेद्यता होगी, इसलिए मुझे लगता है कि यह नहीं है; केवल उत्सुक है) इसके अलावा, किसी ऐप को झूठे नाम के तहत रूट का अनुरोध करने से रोकने के लिए कौन सी सुरक्षा मौजूद है? (यानी malicious.apk उपयोगकर्ता को पहुंच देने में चाल करने के लिए भयानक-रूट-केवल-app.apk के नाम पर रूट का अनुरोध करता है) – youen

संबंधित मुद्दे