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.youkuaiyun.com/qq_36946260/article/details/75232263
本文介绍了九宫格密码的实验原理,包括不同数量点的口令可能性,以及如何通过adb命令提取和分析加密后的SHA1数据。通过编程遍历所有可能的九宫格组合,与gesture.key文件中的加密值对比,最终找到匹配的密码位置。文章还讨论了LockPatternUtils.java中的算法,并提供了构造手势数据的示例代码。
1771

被折叠的 条评论
为什么被折叠?



