首页
社区
课程
招聘
[原创]Android屏幕解锁图案破解
2013-3-27 14:29 140256

[原创]Android屏幕解锁图案破解

2013-3-27 14:29
140256
题目:Android屏幕解锁图案破解
  Android手机上有一个屏幕解锁的应用相信大家都不陌生,在 Android 设备上,用户可以通过设置锁定图案作为密码对设备用户界面进行锁定,锁定界面如下图所示。


  一般的Android手机的锁定界面由九个点构成,设定图案需满足三个要求:
  至少四个点;
  最多九个点;
  无重复点。
  这种看似复杂的解锁方式在 Android 存储时使用的是明文转换后采用散列方式存储。Android 设备图案锁定的加密存储过程:

  
  下面设置一个图形加密锁测试一下:
  第一步:图形输入。

  输入上图一样的图案(看上去是个“2”,使用了九个点。)
  第二步:明文加密。
  这一步是系统自动完成的,首先是九个点的数据含义,含义是这样的:从左上角起编号为 00,至右下角止编号为 08。那么上图中“2”的编码应该是000102050403060708。使用SHA1算法对上述十六进制编码进行计算后得到密文“333d9f31c209ce1217bc165c5baa7307b06bbf87”。这一步系统会自动将图案转换成编码,在将编码算出密文的。因此我们是看不到的。
  第三步:密文存储。
  计算好密文后,系统会将密文存储在/DATA/SYSTEM/GESTURE.KEY文件中,我们可以使用“adb pull /data/system/gesture.key gesture.key”将这个密码文件系在到本地,得到密码文件后,用记事本打开是乱码的,要用十六进制编辑器打开才可以看到密文。
  
  可以看到密文和上一步我们计算出来的是一样的。
  对上面算法总结一下规律。从密码明文的编码来看,各单数位数字为零,双数位数字不重复地排列,并将这个排列进行单次SHA1运算。那么也就是说,通过数学计算可知,由于单数位确定,双数位不重复,则根据 Android 图案锁定规则可以设置的锁定图案总数是固定的,4个数的密码个数为9*8*7*6=3024。5个数的密码个数为15120个。6个数的密码个数为60480个。7个数的密码个数为181440个。8个数和9个数的密码个数都是36288个。也就是说一共密码的可能个数为985824个。由于密码复杂程度不高,破解相对容易。只要做一个字典进行暴力猜解就可以将正确密码解出来且速度很快。生成的字典50多m,暴力破解速度基本是秒破的。

  当然如果只是为了搞定这个密码,还有更简单的方法,就是直接adb shell到设备上,然后执行“rm /data/system/gesture.key”命令将密码文件删掉就可以了,删除后相当于没有设备图案锁。
  破解android屏幕解锁图案就是这么简单,希望大家喜欢。
  
  

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞3
打赏
分享
最新回复 (81)
雪    币: 1413
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
Claud 6 2013-3-27 14:43
2
0
赞,写得不错。
倒数第二段的问题,在还没解锁的情况下,能不能adb shell?
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
kxzjchen 2013-3-27 14:44
3
0
牛逼啊,转帖了
雪    币: 576
活跃值: (1374)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
我是土匪 4 2013-3-27 14:44
4
0
学习了,谢谢分享。
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
kxzjchen 2013-3-27 14:44
5
0
嗯,同二楼问
雪    币: 137
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小林先生 2013-3-27 14:47
6
0
二楼问的对- -
雪    币: 114
活跃值: (155)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qqlinhai 2013-3-27 14:49
7
0
赞一个,支持楼主。
雪    币: 17475
活跃值: (5241)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
obaby 20 2013-3-27 14:50
8
0
这个要开启usb的调试模式,如果没有开启的话adb是连接不上的。
雪    币: 27
活跃值: (84)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
tihty 2 2013-3-27 15:10
9
0
有点意思..
雪    币: 3305
活跃值: (1103)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
CRoot 2013-3-27 15:46
10
0
同8楼问题,无root,无调试,怎么搞?溢出?
雪    币: 66
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
DUORAK 2013-3-27 15:51
11
0
好贴,接下来就可以拆机,拆存储模块,放到外部架的读取器上,XXOO之~
有木有adb shell就浮云了
雪    币: 1217
活跃值: (571)
能力值: (RANK:30 )
在线值:
发帖
回帖
粉丝
webappsec 2013-3-27 16:21
12
0
思路不错,实现起来不是这么容易啊
雪    币: 1025
活跃值: (239)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wcfq 2013-3-27 16:22
13
0
学习了支持俺支持
雪    币: 247
活跃值: (42)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
arsusanh 2013-3-27 16:43
14
0
为什么我用python加密000102050403060708的值是
b4ba1e9c84543210076404beece3efa9a51435e9呢?

python程序(版本2.7.3):

import hashlib
hash_new = hashlib.sha1()
with open ('c:\\1.txt','r+b') as fp:
    while True:
        data = fp.read()
        if not data:
            break
        hash_new.update(data)
hash_value = hash_new.hexdigest()
print hash_value
雪    币: 131
活跃值: (98)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
gamehacker 1 2013-3-27 17:52
15
0
to arsusanh

上传的附件:
雪    币: 131
活跃值: (98)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
gamehacker 1 2013-3-27 18:00
16
0
to Claud
模拟器中是不需要解锁,即可adb shell的。
雪    币: 131
活跃值: (98)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
gamehacker 1 2013-3-27 18:01
17
0
to obaby
是的,需要开启调试模式。
雪    币: 131
活跃值: (98)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
gamehacker 1 2013-3-27 18:02
18
0
to CRoot
adb shell貌似就已经可以root了。当然要开启调试的啦。
雪    币: 761
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
赤子Anatta 2013-3-27 18:12
19
0
怎样知道这一串乱码是由sha1方法加密的呢?
雪    币: 247
活跃值: (42)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
arsusanh 2013-3-28 10:33
20
0
没有搞懂这图的意思...
雪    币: 131
活跃值: (98)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
gamehacker 1 2013-3-28 15:46
21
0
000102050403060708是十六进制数据。你得1.txt用十六进制编辑器编辑,内容改为图中数据,在运行py脚本,结果就一样了。
雪    币: 7960
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guobing 2013-3-28 16:21
22
0
我的手机默认开启usb调试,,我勒个去。
雪    币: 216
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdfpll 2013-3-28 16:22
23
0
请问sha算法是怎么确定的呢?还有就是这个算法是在系统中哪个文件中实现的?是libcrypto.so吗?还望不吝赐教
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
icesord 2013-3-28 18:22
24
0
usb调试没开adb好用不?
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
samueltjl 2013-3-28 20:54
25
0
好像没有启动usb调试 是不能shell的。 您其他办法shell么?
游客
登录 | 注册 方可回帖
返回