Android 的锁屏画面 居然可以无需密码就解除?我凌乱了。

Source & APK, 摘要:

 wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
  ghostView = new View(this);
  lp = new LayoutParams();
  lp.type = LayoutParams.TYPE_SYSTEM_ERROR;
  lp.width = 0;
  lp.height = 0;
  lp.flags = 0;
  lp.flags |= LayoutParams.FLAG_NOT_FOCUSABLE;
  lp.flags |= LayoutParams.FLAG_NOT_TOUCHABLE;
  lp.flags |= LayoutParams.FLAG_SHOW_WHEN_LOCKED;
  lp.flags |= LayoutParams.FLAG_TURN_SCREEN_ON;
  lp.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
  lp.flags |= LayoutParams.FLAG_DISMISS_KEYGUARD;

 wm.addView(ghostView, lp);  //这是做了一个最顶层的悬浮无焦点的幽灵窗口,迫使开亮屏幕。

  keyGuardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
  keyGuardLock = keyGuardManager.newKeyguardLock(getPackageName());
 keyGuardLock.disableKeyguard();  //缺了这个就不能解锁了。

安装了之后就可以启动service
adb shell pm start asc.tool.passwordforgotunlocker/. PasswordForgotUnlockerService --user 0


这就可以挪走密码锁定屏幕了,然后可以任意操作app,除了一点:不能按HOME按钮。当然,可以通过BACK键退回到Home画面,然后启动任何app都行。

贴两幅图,按图中的"ON+Unlock"就可以解锁。 (本身这个Sample是没有画面的,这是贴的另一个使用了这里介绍的技术的东西)




于是我就想着,设法让这个app一旦安装就自动执行,那 发布这个app到play store上,然后从PC的play store网页里向android device安装(前提是device里加入了相同的goole account),这样岂不是就可以解锁了?有点荒唐?

验证了一下,发现以前2.3时代能够静态登陆的Broadcast Event Receiver方式不管用了,
例如子AndroidManifest.xml里加入

 <receiver android:name="asc.tool.passwordforgotunlocker.MyReceiver">
   <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
    <action android:name="android.intent.action.SCREEN_ON" />
    <action android:name="android.intent.action.TIME_TICK" />
   </intent-filter>
  </receiver>

  

都不行了,有人验证过后两个event非得手动通过执行registerReiver api来注册,但是第一个BOOT_COMPLETED居然也不行,我很惊讶,难道google特意这样?这个app是没有任何luancher icon的,安装完了也不会在HOME里有任何显示。没兴趣研究了。

更新:Android 5.0开始不能这样绕过密码输入了。
---------------------------------------------------------------------------------------------------

顺便发现在Play store里有个Android Device Manager早就做了这些了,还不止,还可以定位,振铃,删除数据。开始像是偷偷做的,因为Android 2.3位置,都没有明确的设定告诉用户有这些功能和提供选项。Android 4.x开始 好歹提供了一个Google Settings的app让人知道有这么个东西在起作用。稍微看了一下,发现这些功能似乎来自于系统内置的Android Developer Service里?

条件(方法):在Android手机里的Account设定里,加入一个google account(其实就是一个gmail地址就可以了。然后用这个gmail进入play store,到设定画面,执行Device Manager就可以。

当手机找不到的时候可以用这个。甚至可以在一台手机上安装一个Android Device Manager App来寻找另一台。

详细的请看 How to use Android Device Manager - AndroidPIT

Android 的锁屏画面 居然可以无需密码就解除?我凌乱了。



你可能感兴趣的:(android,unlock)