[ 路丁前言 ] 安卓机的图型锁(九宫格)是3×3的点阵式,按顺序联接多个点进而做到锁住/开启的作用。
至少必须联接4个点,数最多能联接9个点。在网上也是有暴力行为删掉手机上图型锁的方式,即立即弄死图型锁作用。但倘若你要进到他人的手机上,但又不愿造成其警惕得话……你能参照一下文中。
必要条件:手机上必须root,并且开启调试模式。一般来讲,假如使用过例如“小米助手同步助手”、“360手机小助手”一类的手机软件,都是被规定开启调试模式的。假如要删掉手机上内嵌手机软件,则必须将手机上root。
基本原理剖析
最先科谱一下,安卓机是怎样标识这9个点的。根据阅读文章安卓手机系统源代码得知,每一个点都是有其序号,构成了一个3×3的引流矩阵,形如:
00 01 02
03 04 05
06 07 08
倘若设置开启图型为一个“L”形,如图所示:
那麼这好多个点的顺序排列是那样的:00 03 06 07 08。系统软件就记录下来了这一串数据,随后将这一串数据(以十六进制的方法)开展SHA1数据加密,储存在了手机里的/data/system/gesture.key文件中。大家用手机充电线连接手机和电脑上,随后ADB连接手机,将文档下载到电脑上(指令:adb pull /data/system/gesture.key gesture.key),如图所示:
用WinHex等十六进制编写程序流程开启gesture.key,会发觉文档内是SHA1数据加密过的字符串数组:c8c0b24a15dc8bbfd411427973574695230458f0,如图所示:
如果你下一次开启的情况下,系统软件就比照你画的图案设计,看相匹配的数字串是否0003060708相匹配的数据加密結果。如果是,就开启;并不是就持续保持锁住。那麼,假如穷举法全部的数字串排序,会有多少呢?想到到普通高中的阶乘,假如用4个点做开启图型得话,便是9x8x7x6=3024种概率,那5个点就是15120,六个点得话60480,七个点181440,八个点362880,9个点362880。一共是985824种概率(但那么测算并不严实,由于同一条平行线上的点只有和她们邻近的点相接)。
满打满算,也不上985824种概率。乍一看挺大,但在电子计算机眼前,穷举法出去这种物品用不上几秒。
破译全过程
知道基本原理,就下手写程序来完成吧。这儿应用了Python来达到目标。关键运用了hashlib控制模块(对字符串数组开展SHA1数据加密)和itertools控制模块(Python内嵌,转化成00-09的排列与组合)。
关键步骤为:
1、ADB连接手机,获得gesture.key文件
2、载入key文件,存进字符串数组str_A
3、转化成所有将会的数字串
4、对这种数字串开展数据加密,获得字符串数组str_B
5、将字符串数组str_A与str_B开展比照
6、假如字符串数组A,B同样,则表明数字串num便是要想的开启次序
7、复印出数字串num
下边为程序流程:
小结
从程序流程自身而言,获得解锁密码后应当用break跳出循环并停止执行程序。但Python并沒有跳出来多种循环系统的句子,假如要跳出来多种循环系统,只有设定标志寄存器随后不断开展判断。以便运作速率就省去了“跳出循环”这一流程。(有木有更强的完成跳出来多种循环系统的方式?)此外也省去了许多 容错机制句子。
从破译目地而言,假如纯是忘了自身的手机上图型锁登陆密码,彻底可以用更简易的方法:ADB连接手机,随后“adb rm /data/system/gesture.key”删掉掉gesture.key文件,这时图型锁就无效了,随便画一下就能开启。但文中开场假定的是“以便不被发觉地进到到他人的手机里”,因此就拥有本文。
最终提一个安全性小提议:假如手机上已root,也要用“XX同步助手”,还想设定图型锁得话——在手机“设定”选择项里,有一个“锁住情况下撤销USB调试模式”(这一姓名因手机上而异,并且有的有这样选择项,有的手机上就沒有),打开此作用以后,在手机锁住情况下就可以预防该类进攻了。此篇技术性基本原理非常简单,敬请诸位大大的教给些高端大气的Python程序编写方法。
评论