คำตอบอยู่ในแหล่งที่มา ... มันน่าจะเป็นที่คุณสมบัติการร้องขอขาล็อคที่ถูกสร้างขึ้นในหรือbuild.prop
default.prop
ดูการอ้างอิงที่พบในแหล่ง TelephonyManager ระหว่างบรรทัดที่ 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
เรียกว่าบ่อยแค่ไหนสังเกตชื่อของแหล่งที่มาของจาวาเพื่อที่จะรู้ว่ามันถูกรวมเข้ากับ Android อย่างไรไม่ใช่แค่ในเลเยอร์ Telephony ที่อื่น ๆ
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() {
ทำชื่อไฟล์เหล่านั้นให้เบาะแส yup ในหน้าจอล็อค ...
ทฤษฎี
สิ่งนี้ต้องการรูท ณ จุดนี้โดยการเรียกใช้adb shell
และการเรียกใช้getprop
และsetprop
การทำเช่นนี้ส่วนเดียวคือโดยการเรียกใช้
adb shell getprop
จะกลับข้อมูลที่เกี่ยวข้องดังที่แสดงด้านล่าง
sh-4.1# getprop
[gsm.sim.state]: [READY]
คุณสมบัติที่ละเอียดอ่อนนี้ดูเหมือนจะถูกเก็บไว้ในที่เก็บข้อมูลสำรองแบบไดนามิกจากช่วงเวลาของการเปิดเครื่องและปรับเปลี่ยนตามจำนวนสิ่งบริการและไม่พูดถึงการวางโทรศัพท์มือถือซึ่งอาจทำให้ซิมการ์ดหลุดออกมาโดยบังเอิญ ผู้อ่านซึ่งจะเปลี่ยนสถานะของการ์ดเป็น " ไม่พร้อม " หรือ " ไม่ทราบ " ( อ้างอิง: ระบบ / core / include / cutils / properties.hและsystem / core / toolbox / [ getprop | setprop ] .c)
ทีนี้มาถึงจุดนี้ในทางทฤษฎีแล้วการเรียกใช้ setprop ก่อนที่จะล็อคหน้าจอมันอาจถูกหลบหลีกชั่วคราว ยังไม่ได้ลอง! ซึ่งนำไปสู่สิ่งนี้ ...
ข้อสรุป
เพียงวิธีนี้สามารถปิดคือการได้อย่างมีประสิทธิภาพปิดการใช้งานคำขอขาล็อคที่เกิดขึ้นจริงซิมการ์ด นั่นคือที่เก็บบิตมายากล "มายากล" ที่ซึ่งเลเยอร์ RIL ของโทรศัพท์อ่านผ่านห้องสมุดของ htc / samsung / qualcomm กรรมสิทธิ์และจะป้องกันการแพร่กระจายของคุณสมบัติ "PIN_REQUIRED" ผ่าน เลเยอร์ของ Android
วิธีแก้ปัญหาที่เป็นไปได้สำหรับนักพัฒนา Android เท่านั้น :)
สิ่งนี้จะต้องมีการแฮ็กและการคอมไพล์แหล่งที่มาใหม่
สำหรับโหมดเครื่องบินเมื่อเข้าสู่โหมดนั้นและออกจากโหมดเครื่องบินคุณสมบัติสามารถแยกออกเป็นสองgsm.sim.stateสามารถเหลือได้เหมือนเดิม แต่ประดิษฐ์คุณสมบัติอื่นเช่นgsm.sim.state airplane.modeและกำหนดค่าตามแนวของSIM_STATE_PIN_NOT_REQUIRED
และแก้ไขการตรวจสอบโหมดการบินเพื่ออ่านคุณสมบัตินั้นและหากตั้งค่าเป็นสิ่งนั้นอย่าแสดงกล่องโต้ตอบพินมิฉะนั้นจะแสดงขึ้นมาตามปกติ