教你破解Android手机图案锁

      咱们在以前的《忘记了手机锁怎么办》这篇文章中已经介绍了暴力删除手机图形锁、密码锁的方法。今天介绍另一种破解图案锁的方法。不过先要提醒你们,千万不要作坏事呦!php

1、前提条件安全

手机须要root,并且打开调试模式。通常来说,若是用过诸如“豌豆荚手机助手”、“360手机助手”一类的软件,都会被要求打开调试模式的。若是要删除手机内置软件,则须要将手机root。对于root有顾虑的童鞋,能够看看这篇文章《到底应该如何看待root这件事》http://www.morecomtech.com/community/article/jsfa/w2015110001.php加密

2、原理分析spa

首先科普一下,安卓手机是如何标记这9个点的。经过阅读安卓系统源码可知,每一个点都有其对应的编号,组成了一个3×3的矩阵,形如:调试

00 01 02orm

03 04 05字符串

06 07 08get

假如设定解锁图形为一个“L”形,如图:源码

那么这几个点的排列顺序是这样的:00 03 06 07 08。系统就记下来了这一串数字,而后将这一串数字(以十六进制的方式)进行SHA1加密,存储在了手机里的/data/system/gesture.key 文件中。咱们用数据线链接手机和电脑,而后ADB链接手机,将文件下载到电脑上(命令:adb pull /data/system/gesture.key gesture.key),如图:hash

用WinHex等十六进制编辑程序打开gesture.key,会发现文件内是SHA1加密过的字符串:c8c0b24a15dc8bbfd411427973574695230458f0,如图:

当你下次解锁的时候,系统就对比你画的图案,看对应的数字串是否是0003060708对应的加密结果。若是是,就解锁;不是就继续保持锁定。那么,若是穷举全部的数字串排列,会有多少呢?联想到高中的阶乘,若是用4个点作解锁图形的话,就是9x8x7x6=3024种可能性,那5个点就是15120,6个点的话60480,7个点181440,8个点362880,9个点362880。总共是985824种可能性(但这么计算并不严密,由于同一条直线上的点只能和他们相邻的点相连)。满打满算,也不到985824种可能性。乍一看很大,但在计算机面前,穷举出来这些东西用不了几秒钟。

3、破解过程

知道了原理,就着手写程序来实现吧。这里使用了Python来完成任务。主要应用了hashlib模块(对字符串进行SHA1加密)和itertools模块(Python内置,生成00-09的排列组合)。主要流程为:

一、ADB链接手机,获取gesture.key文件

二、读取key文件,存入字符串str_A

三、生成所有可能的数字串

四、对这些数字串进行加密,获得字符串str_B

五、将字符串str_A与str_B进行对比

六、若是字符串A,B相同,则说明数字串num就是想要的解锁顺序

七、打印出数字串num

下面为程序:

4、总结

从程序自己来讲,获得解锁密码后应该用break跳出循环并终止程序运行。但Python并无跳出多重循环的语句,若是要跳出多重循环,只能设置标志位而后不停进行断定。为了运行速度就略去了“跳出循环”这个步骤。(有没有更好的实现跳出多重循环的方法?)另外也略去了不少容错语句。

从破解目的来讲,若是单单是忘记了本身的手机图形锁密码,彻底能够用更简单的办法:ADB链接手机,而后“adb rm /data/system/gesture.key”删除掉gesture.key文件,此时图形锁就失效了,随意画一下就能解锁,在《忘记了手机锁怎么办》http://www.morecomtech.com/community/article/sjjc/w2015110501.php这篇文章中已经介绍过。

最后提一个安全小建议:若是手机已root,还要用“XX手机助手”,还想设置图形锁的话——在手机“设置”选项里,有一个“锁定状态下取消USB调试模式”(这个名字因手机而异,并且有的有此选项,有的手机就没有),开启此功能以后,在手机锁定状态下就可以防范此类攻击了。

 

 

做者:Keung

原文地址:http://www.morecomtech.com/community/article/sjjc/w2015110502.php

相关文章
相关标签/搜索