उत्तर स्रोत में निहित है ... ऐसा लगता है कि पिन-लॉक का अनुरोध करने की संपत्ति में बनाया गया है build.prop
या default.prop
।
735 और 755 लाइनों के बीच टेलीफोनी मैनजर स्रोत में पाए गए संदर्भ पर एक नजर डालें। संक्षिप्तता के लिए,
public int getSimState() {
String prop = SystemProperties.get(TelephonyProperties.PROPERTY_SIM_STATE);
if ("ABSENT".equals(prop)) {
return SIM_STATE_ABSENT;
}
else if ("PIN_REQUIRED".equals(prop)) {
return SIM_STATE_PIN_REQUIRED;
}
else if ("PUK_REQUIRED".equals(prop)) {
return SIM_STATE_PUK_REQUIRED;
}
else if ("NETWORK_LOCKED".equals(prop)) {
return SIM_STATE_NETWORK_LOCKED;
}
else if ("READY".equals(prop)) {
return SIM_STATE_READY;
}
else {
return SIM_STATE_UNKNOWN;
}
}
कुंजी TelephonyProperties.PROPERTY_SIM_STATE
जो कहीं और संदर्भित की जाती है , लाइनों 94 और 98 के बीच।
//****** SIM Card
/**
* One of <code>"UNKNOWN"</code> <code>"ABSENT"</code> <code>"PIN_REQUIRED"</code>
* <code>"PUK_REQUIRED"</code> <code>"NETWORK_LOCKED"</code> or <code>"READY"</code>
*/
static String PROPERTY_SIM_STATE = "gsm.sim.state";
अपनी मशीन पर यहां स्रोत कोड के माध्यम से खोज करने के बाद, मैं आपको इस बात का विचार दूंगा कि इस विधि getSimState
को कितनी बार कहा जाता है, यह जानने के लिए जावा स्रोत के नामों पर ध्यान दें कि एंड्रॉइड के भीतर इसका एकीकरण कैसे किया जाए, न केवल टेलीफोनी परत में, बल्कि कहीं।
services/java/com/android/server/am/BatteryStatsService.java 219: int simState = TelephonyManager.getDefault().getSimState();
telephony/java/android/telephony/TelephonyManager.java 523: public int getSimState() { 551: * @see #getSimState 562: * @see getSimState
policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java 478: public IccCard.State getSimState() {
policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java 545: final IccCard.State state = mUpdateMonitor.getSimState();
policy/src/com/android/internal/policy/impl/LockPatternKeyguardViewProperties.java 57: final IccCard.State simState = mUpdateMonitor.getSimState();
policy/src/com/android/internal/policy/impl/LockScreen.java 273: mStatus = getCurrentStatus(updateMonitor.getSimState());
policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java 173: && (mUpdateMonitor.getSimState() == IccCard.State.ABSENT); 217: final IccCard.State simState = mUpdateMonitor.getSimState(); 469: && (mUpdateMonitor.getSimState() != IccCard.State.PUK_REQUIRED)) { 512: secure = mUpdateMonitor.getSimState() == IccCard.State.PIN_REQUIRED 513: || mUpdateMonitor.getSimState() == IccCard.State.PUK_REQUIRED; 643: final IccCard.State simState = mUpdateMonitor.getSimState(); 662: final IccCard.State simState
= mUpdateMonitor.getSimState();
policy/tests/src/com/android/internal/policy/impl/LockPatternKeyguardViewTest.java 49: public IccCard.State getSimState() {
क्या उन फ़ाइल नामों को लॉक स्क्रीन में एक सुराग, यूप दिया गया है ...
सिद्धांत
इस बिंदु पर रूट की आवश्यकता होती है, adb shell
और कॉल getprop
करके setprop
और ऐसा करने के लिए, केवल एक हिस्सा यह है, आह्वान करके
adb shell getprop
नीचे दी गई जानकारी के अनुसार प्रासंगिक जानकारी वापस मिलेगी
sh-4.1# getprop
[gsm.sim.state]: [READY]
लगता है कि यह सूक्ष्म संपत्ति गतिशील रूप से एक बैकिंग संपत्ति की दुकान में बनी हुई है, पावरिंग के क्षण से और तदनुसार समायोजित की जाती है, चीजों की संख्या, सेवा के आधार पर, और गलती से उस हैंडसेट को छोड़ने का उल्लेख नहीं करने के लिए जो सिम-कार्ड को खटखटा सकता है। इसका पाठक जो कार्ड की स्थिति को " नहीं-रेडी " या " अज्ञात " में बदल देगा। ( रेफरी: प्रणाली / कोर / शामिल / cutils / properties.h और प्रणाली / कोर / टूलबॉक्स / [ getprop | setprop ] ग)
अब इस बिंदु पर, सैद्धांतिक रूप से, स्क्रीन को लॉक करने से पहले सेटप्रॉप को आमंत्रित करके, इसे अस्थायी रूप से दरकिनार किया जा सकता है, लेकिन फिर से, जिसे टेलीफोनी परत द्वारा रीसेट किया जा सकता है! कोशिश की है कि नहीं! जो इस के लिए अग्रणी है ...
निष्कर्ष
एक ही तरीका है इस बंद किया जा सकता, प्रभावी ढंग से करने के लिए है वास्तविक सिम कार्ड पर पिन-लॉक अनुरोध को निष्क्रिय । यही वह जगह है जहां "जादू" बिट-फ्लैग उस पर संग्रहीत किया जाता है, जिसमें टेलीफोनी की आरआईएल परत मालिकाना htc / samsung / क्वालकॉम की लाइब्रेरी के माध्यम से इसे पढ़ती है, और जो संपत्ति के "पिन_अक्वायर्ड" के माध्यम से संपत्ति को बनाए रखने से रोकती है। Android की परतें।
केवल एंड्रॉइड डेवलपर्स के लिए एक संभावित काम-के आसपास :)
इसके लिए स्रोत को हैक करना और उसकी पुन: स्थापना की आवश्यकता होगी।
हवाई जहाज मोड के लिए, उस मोड में प्रवेश करते समय और हवाई जहाज मोड को छोड़ते हुए, संपत्ति को दो भागों में विभाजित किया जा सकता है, gsm.sim.state के रूप में छोड़ा जा सकता है, लेकिन किसी अन्य संपत्ति को इस तरह से तैयार करना, gsm.sim.state। airplane.mode और उसी के साथ एक मान निर्दिष्ट SIM_STATE_PIN_NOT_REQUIRED
करें, और उस प्रॉपर्टी को पढ़ने के लिए एरोप्लेन मोड चेक को संशोधित करें, और यदि उस पर सेट किया गया है, तो पिन डायलॉग बॉक्स न दिखाएं, अन्यथा आमतौर पर, इसे प्रॉम्प्ट करें।