安卓的花样锁(九宫格)是一个3×3的点阵,依次连接多个点,实现上锁/开锁的功能。
最少要连4个点,最多可以连9个点。在网上,还有一种暴力的删除手机上图形锁的方式,就是立即杀死图形锁。但如果你想访问别人的手机,但又不想引起他们的警惕...可以参考课文。
必要:手机必须是root,并且要开启调试模式。一般来说,如果你用过“小米助手同步助手”、“360手机助手”等手机软件,都是需要开启调试模式的。如果要删除嵌入的手机软件,必须root手机。
基本原则分析
首先,我们来看看Android是如何识别这9点的。根据阅读Android手机系统的源代码,每个点都有它的序号,形成一个3×3的引流矩阵,像:
00 01 02
03 04 05
06 07 08
如果开口图案设置为“L”形,如图所示:
那么积分顺序如下:00 03 06 07 08。系统记录下这一串数据,然后将这一串数据加密(十六进制)存储在手机中的/data/system/gesture.key文件中。大家用手机充电线把手机连接到电脑上,然后ADB连接手机,把文档下载到电脑上(指令:ADB pull/data/system/gesture . key gesture . key),如图:
用WinHex等十六进制编程进程打开gesture.key,会发现文档中包含了SHA1数据加密的字符串数组:c 8 c 0 b 24 a 15 DC 8 bbfd 411427973574695230458 f 0,如图:
下次打开的话,系统软件会根据你画的图案进行设计,看匹配的数字串是否与0003060708的数据加密结果相匹配。如果是,打开它;它并不总是锁着的。那么,如果把穷举法中的数字全部排序,会有几个?想到普通高中的阶乘,如果用四个点作为开模,就是9x8x7x6=3024种概率,那五个点是15120,六个点是60480,七个点是181440,八个点是362880,九个点是362880。总共有985,824个概率(但然后计算并不严格,因为同一平行线上的点只与它们的邻点相交)。
最多也就没有985824个概率。乍一看还挺大的,但是在电脑面前,用不了几秒钟就能把这一项消耗殆尽。
破译的全过程
如果你知道基本原理,只要写一个手写的程序就可以完成了。这里应用Python来实现这个目标。关键是使用hashlib控制模块(加密字符串数组的SHA1数据)和itertools控制模块(嵌入Python,转换成00-09的排列组合)。
关键步骤是:
1.ADB连接到移动电话以获取手势密钥文件。
2.加载密钥文件并存储在字符串数组STR _ A中。
3.转换成所有会知道的数字。
4.加密这个数字串的数据,得到字符串数组STR _ B。
5.比较字符串数组str_A和STR _ B。
6.如果字符串数组A和B相同,则意味着数字字符串num是要考虑的开始顺序。
7.复制数字字符串num。
以下是程序流程:
摘要
从程序进程本身来看,获得解锁密码后,应该跳出循环,停止执行程序。然而Python并没有跳出多个循环系统的句子。如果要跳出多个循环系统,只设置标志寄存器然后连续判断。从而使运算速度省去了“跳出循环”的过程。有没有更强的跳出多循环系统的方法?另外省略了很多容错机制的句子。
出于解密的目的,如果只是简单的忘记了手机上图形锁的登录密码,可以用更简单的方法:ADB连接手机,然后“adb rm /data/system/gesture.key”删除了gesture.key文件,那么图形锁就失效了,只要划一下就可以打开。但是这篇文章的开篇假设是“为了不被发现的进入别人的手机”,所以我拥有这篇文章。
最后一个小小的安全建议:如果手机是root,也要用XX同步助手,如果要设置模式锁定——手机的“设置”选项里有“锁定时取消USB调试模式”(这个名称因手机而异,有的有这个选项,有的没有)。开启该功能后,在手机锁定的情况下可以防止这种攻击。这个技术基本原理很简单。请教我们一些高端的Python编程方法。