【www.guakaob.com--实践技能】
篇一:《如何破解安卓手机图案解锁》
新技能Get!如何破解安卓手机图案解锁
安卓手机的图形锁(九宫格)是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,6个点的话60480,7个点181440,8个点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编程技巧。
篇二:《Android图案解锁code》
Main_Acitivity.java
package com.example.lackpatternview;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.RelativeLayout;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RelativeLayout relativelayout = new RelativeLayout(this);
lackparrternview lackparrtern=new lackparrternview(this);
relativelayout.setBackgroundColor(TRIM_MEMORY_BACKGROUND); relativelayout.addView(lackparrtern);
setContentView(relativelayout);/*实例化*/怎样解锁绘制图案。
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Lackparrternview.java
package com.example.lackpatternview;
import java.util.ArrayList;
import java.util.List;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class lackparrternview extends View{
/**
* 图案解锁
* */
//选中点的数量
private static final int POINT_SIZE=5;
//矩阵
private Matrix matrix=new Matrix();
//画笔
Paint paint =new Paint(Paint.ANTI_ALIAS_FLAG);
//9个点 private Point[][] points=new Point[3][3]; private float height,width,offsetX = 0,offsetY=0,bitmapR,movingX,movingY; private Bitmap pointnormal,pointpressed,pointerror,linepressed,lineerror; private boolean isInit,isSelect,isFinish,movingNopoint; //点的集合 private List<Point> Pointlist=new ArrayList<Point>(); public lackparrternview(Context context) { super(context); // TODO 自动生成的构造函数存根 }//构造函数 public lackparrternview(Context context, AttributeSet attrs) {怎样解锁绘制图案。
super(context, attrs); // TODO 自动生成的构造函数存根 }//构造函数 public lackparrternview(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO 自动生成的构造函数存根 }//构造函数 @Override protected void onDraw(Canvas canvas){ if(!isInit){ InitPoints(); } //画点 points2Cancas(canvas); } //画线 if(Pointlist.size()>0){ Point a=Pointlist.get(0); for(int i=0;i<Pointlist.size();i++){ Point b=Pointlist.get(i); line2canvas(canvas,a,b); a=b; } } //绘制鼠标坐标点 if(movingNopoint){ line2canvas(canvas,a,new Point(movingX,movingY)); }
//将点绘制到画布上
private void points2Cancas(Canvas canvas){
for(int i=0;i<points.length;i++){
for(int j=0;j<points[i].length;j++){
Point point=points[i][j];
if(point.state==Point.STATE_ERROR){
canvas.drawBitmap(pointerror, point.x-bitmapR, point.y-bitmapR, paint); }
else if(point.state==Point.STATE_NORMAL){
canvas.drawBitmap(pointnormal, point.x-bitmapR, point.y-bitmapR, paint);怎样解锁绘制图案。
paint); } }
/**
} } else{ canvas.drawBitmap(pointpressed,point.x-bitmapR, } point.y-bitmapR, * 画线 * @param canvas 画布 * * */ private void line2canvas(Canvas canvas,Point a,Point b){ float linelength=(float) Point.distance(a, b); float degrees=getdegrees(a,b); canvas.rotate(degrees,a.x,a.y); if(a.state==Point.STATE_PRESSED){ matrix.setScale(linelength/linepressed.getWidth(), 1); matrix.postTranslate(a.x-linepressed.getWidth()/2, a.y-linepressed.getHeight()/2); canvas.drawBitmap(linepressed, matrix, paint); } else{ matrix.setScale(linelength/lineerror.getWidth(), 1); matrix.postTranslate(a.x-lineerror.getWidth()/2, a.y-lineerror.getHeight()/2); canvas.drawBitmap(lineerror, matrix, paint); } canvas.rotate(-degrees,a.x,a.y); } //初始化9个点 private void InitPoints(){ //1.获取布局宽高 width=getWidth(); height=getHeight(); //2.获取偏移量 //横屏 if(width>height){ offsetX=(width-height)/2; width=height; } //竖屏 else{
offsetY=(height-width)/2; height=width; } //3.图片资源 pointerror=BitmapFactory.decodeResource(getResources(),R.drawable.point_error); pointnormal=BitmapFactory.decodeResource(getResources(),R.drawable.point_normal); pointpressed=BitmapFactory.decodeResource(getResources(),R.drawable.point_pressed); linepressed=BitmapFactory.decodeResource(getResources(),R.drawable.line_pressed); lineerror =BitmapFactory.decodeResource(getResources(),R.drawable.line_error); //4.点的坐标 points[0][0]=new Point(offsetX + width/4,offsetY + width/4); points[0][1]=new Point(offsetX + width/2,offsetY + width/4); points[0][2]=new Point(offsetX + width - width/4,offsetY + width/4); points[1][0]=new Point(offsetX + width/4,offsetY + width/2); points[1][1]=new Point(offsetX + width/2,offsetY + width/2); points[1][2]=new Point(offsetX + width - width/4,offsetY + width/2); points[2][0]=new Point(offsetX + width/4,offsetY + width - width/4); points[2][1]=new Point(offsetX + width/2,offsetY + width - width/4); points[2][2]=new Point(offsetX + width - width/4,offsetY + width - width/4); //5.图片资源半径 bitmapR=pointnormal.getWidth()/2; //6.初始化完成 isInit=true; } public boolean onTouchEvent(MotionEvent event){ movingX = event.getX(); movingY = event.getY(); movingNopoint=false;//此点不可用 isFinish=false; Point point =null; switch(event.getAction()){ case MotionEvent.ACTION_DOWN: resetPoint(); point=checkSelectPoint();
篇三:《忘记手机解锁图案该怎么办?》
忘记手机解锁图案该怎么办?
这个问题在Android系统手机当中比较常见,图案解锁方式就是被它给带动流行起来的。现在依旧有不少人偏爱这种图案解锁方式,毕竟这样的操控既新颖而且确实比数字密码解锁有乐趣的多了。但是随着大量入门用户接触到这类智能手机并且使用这种解锁方式时,由于操控不当就出现了不少问题,最常见的情况就是忘记了设定的解锁图案,结果导致手机无法解锁使用。
【忘记手机解锁图案该怎么办】方法一:
比较常见的就是Google账号解锁,当你使用手机之前就注册了Google账号并且在手机当中进行了账户添加登陆,就算你忘记了解锁图案也可以通过输入Google账号来解决此问题。不过由于大量的入门用户才接触智能手机,虽然Android系统火热但是用户对它还不太了解,很多人都没有Google账号,所以这个方法的普及程度并不是很理想。
【忘记手机解锁图案该怎么办】方法二:
还有一个比较直接的方法,在关机情况下通过特殊按键组合进入工程模式(比如HTC手机同时按下音量减和电源键,三星手机同时按下音量+电源+HOME三个按键),然后选择wipe进行清空,这样相当于重新恢复手机出厂设置,再次开机之后就没有解锁这一步直接就能进入手机界面。不过并不是所有手机都适用此方法,因为有的Android手机不一定自带有可以wipe的Recovery,还有一些手机即便是双wipe了,图案解锁还是存在依旧跳不过去解锁的这一步骤。
方法三:
当然如果你实在是搞不明白弄不清楚,那么直接在网上下载相应的软件,然后按照教程步骤点击几下鼠标就可以清除手机图案进行解锁了,这也不失为是一个傻瓜式的便捷办法。
忘记手机解锁图案,第三方软件可以轻松搞定
篇四:《智能机手机绘制解锁图案忘记了怎么办?》
忘记解锁图案后,先不用慌张。连续输入错误的解锁图案5次,手机将会提示你输入Gmail账号进行解锁,按向导提示通过邮件就可以找回密码了。如果手机没有绑定Gmail账户,则无法通过邮件进行解锁,这时可以通过如下方法进行解锁。篇五:《忘记手机解锁图案怎么办》
选到一个有swip data(清除数据) 的选项条,你的联系人是放在了SIM卡不,电源键当确定,电源键确定2次,按住音量上键+电源键10秒左右,应该是很多英文的,可以进入REC模式,或者有备份也行。然后手机关机,手机重启了就好了。这个和你恢复出厂设置是一样的,所以会清除手机内存上的联系人,然后选择reboot system (重启手机),然后你的音量键当上下,确定下,还有安装好的软件也会清掉, 追问 我进入REC模式里没有swip data啊 回答 第二个还是第三个就是啊,追问 我这里只有wipe data 回答 呃。。忘记手机解锁图案怎么办。那就是我记错了,就是这个。SWIP是分区用的,WIPE才是清除的意思。。最近有点头昏不好意思。那你就对那个选确定,清除之后选重启就好了 追问 我选择reboot system后不重启啊 回答 。。。忘记手机解锁图案怎么办。选择之后要电源键确定,还是没反应那就选最后一个吧,最后一个好像是关机,不确定的话你就把那行英文百度下什么意思。不是的话那就。。扣电池,开机。反正清除数据你的锁屏就没了。 追问 可是还是有啊解锁图案啊?我试了好几回了 回答 呃。。那你把那个wipe cache(清除缓存)也确定下。我知道有些三星机型两个wipe都弄了依然不能去掉解锁的,中兴的好像不会吧。还是不行的话你加我QQ。63048913。我把全部方法给你说下,最有效的是强刷,强刷之后肯定没了 提问者评价 谢谢!上一篇:性交时女方总想咬男人
下一篇:寒假社会实践500字