AD

形同虚设——android屏幕锁bypass

Android存在三种屏幕解锁保护:图案解锁、PIN密码解锁和密码解锁。

一般Android手机的锁定界面由九个点构成,设定图案需满足三个要求:
至少四个点;
最多九个点;
无重复点。
这种看似复杂的解锁方式在 Android 存储时使用的是明文转换后采用散列方式存储。Android 设备图案锁定的加密存储过程:
名称:  22.png<br/>查看次数: 0<br/>文件大小:  38.8 KB

第一步:图形输入。
名称:  33.png<br/>查看次数: 0<br/>文件大小:  77.6 KB
输入上图一样的图案(看上去是个“2”,使用了九个点。)
第二步:明文加密。
这一步是系统自动完成的,首先是九个点的数据含义,含义是这样的:从左上角起编号为 00,至右下角止编号为 08。那么上图中“2”的编码应该是 000102050403060708。使用SHA1算法对上述十六进制编码进行计算后得到密文 “333d9f31c209ce1217bc165c5baa7307b06bbf87”。这一步系统会自动将图案转换成编码,在将编码算出密文的。因此 我们是看不到的。
第三步:密文存储。
计算好密文后,系统会将密文存储在/DATA/SYSTEM/GESTURE.KEY文件中,我们可以使用“adb pull /data /system/gesture.key gesture.key”将这个密码文件系在到本地,得到密码文件后,用记事本打开是乱码的,要用十六进制编辑 器打开才可以看到密文。
名称:  44.png<br/>查看次数: 0<br/>文件大小:  21.6 KB
可以看到密文和上一步我们计算出来的是一样的。
从密码明文的编码来看,各单数位数字为零,双数位数字不重复地排列,并将这个排列进行单次SHA1运算。那么也就是说,通过 数学计算可知,由于单数位确定,双数位不重复,则根据 Android 图案锁定规则可以设置的锁定图案总数是固定的,4个数的密码个数为 9*8*7*6=3024。5个数的密码个数为15120个。6个数的密码个数为60480个。7个数的密码个数为181440个。8个数和9个数的密码 个数都是36288个。也就是说一共密码的可能个数为985824个。

第一种破解方式:

由于密码复杂程度不高,破解相对容易。只要做一个字典进行暴力猜解就可以将正确密码 解出来且速度很快。生成的字典50多m,暴力破解速度基本是秒破的。
名称:  55.png<br/>查看次数: 0<br/>文件大小:  12.3 KB

第二种方法:

直接adb shell到设备上,然后执行“rm /data/system/gesture.key”命令将密码文件删掉就可以了,删除后相当于没有设备图案锁。

第三种方法:

可以使用java.lang.Object.android.app.KeyguardManger中的子类KeyguardLock可以控制Disable掉这些屏幕锁界面,从而达到不用输入密码,直接过掉屏幕锁界面来使用手机
主要使用KeyguardLock.disableKeyguard()和KeyguardLock.enableKeyguard()方法来Disable、enable屏幕锁界面


2 代码说明
Demo程序主要代码如下:

//获取KeyguardManager

KeyguardManager manager = (KeyguardManager)

getSystemService(KEYGUARD_SERVICE);

If(manager.inKeyguardRestrictedInputMode())

{

//处于锁定界面,界面则通过KeyguardLock类方法来解锁

KeyguardLock keyguard = manager.newKeyguardLock(getLocalClassName()); keyguard.disableKeyguard();

}

需要权限:

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
1. 图案锁界面使用此方法
调用disableKeyguard() 方法disable图案锁屏界面后,按home键会触发锁屏界面enable重新显示锁屏界面。
2. Pin密码锁界面使用此方法
调用disableKeyguard()方法后disable图案界面后,按home键会出现闪屏。不会返回主页面
3. 密码锁界面使用此方法
调用disableKeyguard()方法后disable图案界面后,按home键会出现闪屏。不会返回主页面

虽然不知道Google为什么提供这样一个api,但开发者利用此api几乎就可以使Android的屏幕锁保护功能形同虚设了,而且调用此方法后home键出现的异常现象应该是个bug吧。
PS注意事项:
由于屏幕锁定时通过电脑上豌豆荚等软件只能安装Apk,并不能启动apk,所以此Demo程序写成了开机启动,即当屏幕锁屏时,通过电脑豌豆荚等软件安装此软件后重启即可实现Pass掉屏幕锁界面。

 

其他参考资料:aviv.pdf

http://hi-android.info/src/com/android/internal/widget/LockPatternUtils.java.html

http://bbs.pediy.com/showthread.php?t=167693

http://bbs.pediy.com/showthread.php?t=167693



 

评论

此博客中的热门博文

简单粗暴导出小米便签

我——终于一个人了

Ubiquiti_Networks_UniFi_Cloud_Key_authed_rce