1.实验原理
九宫格的九个点可分别对应1-9这九个数字,分布样式为:
1 2 3
4 5 6
7 8 9
将数字之间的连接路径转换为这9个数字,并按9个数字的16进制对其进行SHA1加密,并存储到gesture.key文件中。
Android九宫格默认至少得有 4个数的口令:
4个数的输入口令可能个数为9*8*7*6=3024
5个数的输入口令可能个数为9*8*7*6*5=15120
6个数的输入口令可能个数为9*8*7*6*5*4=60480
7个数的输入口令可能个数为9*8*7*6*5*4*3=181440
8个数的输入口令可能个数为9*8*7*6*5*3*2*1=362880
9个数的输入口令可能个数为9*8*7*6*5*4*3*2*1=362880
一共有985824个可能的输入口令。
2.设置密码,查看效果
3.破解九宫格
使用adb命令来连接模拟器,提取加密过后的SHA1数据,用命令行进入到adb目录下可查看其用法:
用adb shell连接模拟器,对九宫格图案进行提取分析
图片存储在/data/system/gesture.key文件中:
用adp pull将改文件复制出进行分析
用winhex打开文件gesture.key
通过编程的方法遍历九宫格的所有情况,然后和这个文件的加密值一一比较,找出相同情况
本实验通过(java代码实现)
得到密码位置为1258
九宫格密码破解算法分析:
由pin密码破解可得,代码依然在LockPatternUtils.java中
九宫格图案转化成字节数组,然后在SHA1加密即可,
关于九宫格不再多说了,从0开始顺时针计数到8,类似如下:
这里看代码,有行和列之分,所以比如L形状的手势密码应该是:00 03 06 07 08,这样组成的五个长度的字节。这里为了验证手势密码是否正确
然后在/data/system目录下生成一个密码文件:/data/system/gesture.key,然后用winhex查看一下该文件
根据原始代码构造出一个手势数据
(源码)
(构造的手势代码)
手势点应该是:00 01 02 05 08,打印看看结果:
总结:
将九宫格手势密码中的点数据转化成对应的字节数组,然后直接SHA1加密即可。最终加密信息保存到本地目录中:/data/system/gesture.key中
详细参考网址:https://blog.csdn.net/qq_36946260/article/details/75232263