锁屏Pin码破解

1.实验原理

Android系统会把pin设置的密码加密保存到password.key中,所以破解这个密码只要把该文件删除即可

2.打开模拟器设置pin密码,设置之后界面

3.打开cmd

查看文件:adb pull /date/system/password.key

删除文件:adb shell rm /date/system/password.key

再次打开屏幕测试pin密码可任意输入或者就直接没有就破解了。

密码算法分析:

在设置锁屏密码界面,用工具分析获取当前的View类,然后一步一步跟入,最终回到了一个锁屏密码工具类:LockPatternUtils.Java

输入密码(Pin或者更复杂的密码):

salt值:当用户首次提供密码时,由系统自动往这个密码里加一些“Salt值”,这个值是由系统随机生成的,并且只有系统知道。然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“Salt值”,然后散列,再比较散列值,已确定密码是否正确。 (综合上述即得就算两个手机的密码相同也因为salt值不同而解不开密码)

userId为用户当前id,一般设备不会有多个用户,所以这里一般userId默认值就是0。

这里现在最重要的是如何获取设备对应的salt值了,这个可以一步一步跟踪代码:

查看getSalt方法,他首先会根据字段key为:lockscreen.password_salt,进行从一个地方获取salt值,如果发现这个值为0,就随机生成一个,然后将其保存到那个地方去,最后会将salt转化成hex值即可。现在需要找到这个地方,继续跟踪代码:

这里猜想应该是保存到一个数据库中了,继续跟踪代码:

这里是通过SM中获取一个服务来进行操作了,像这种获取服务,最终实现逻辑都是在XXXService类中,所以这里应该是LockSettingsService.java类中,找到这个类,查看他的getLong方法:

其实到这里就非常肯定是数据库保存的了,继续跟踪代码:

这里果然是保存到一个数据库中,我们继续查看LockSettingStorage.java类:

  

这里看到了,数据库名字叫做:locksettings.db,继续看这个类:

由此我们就可以找到存储密码的文件

详细参考网址:https://blog.csdn.net/qq_36946260/article/details/75232263

猜你喜欢

转载自blog.csdn.net/mengtongxch/article/details/82958327
今日推荐