一、Android中加密算法
上一篇文章已经介绍了Android中系统锁屏密码算法原理,这里在来总结说一下:
第一种:输入密码算法
将输入的明文密码+设备的salt值,然后操作MD5和SHA1之后在转化成hex值进行拼接即可,最终加密信息保存到本地目录:/data/system/password.key中
第二种:手势密码算法
将九宫格手势密码中的点数据转化成对应的字节数组,然后直接SHA1加密即可。最终加密信息保存到本地目录中:/data/system/gesture.key中
二、锁机样本原理解析
在上一篇文章中也说到了,为什么要看锁机密码加密算法,因为最近玩王者荣耀,下了一个外挂,结果被锁机了,太坑了,所以就来分析现在市场中通过锁机来勒索钱财的样本制作原理:
大部分都是采用了系统的设备管理器来获取权限进而修改密码,然后提示你需要重启设备才能有效,这样的样本通过特殊的应用名称和图标来诱导用户下载安装授权,一般小白用户为了玩农药,什么都不管了,直接从网上搜一个安装就开始操作了,结果被自己坑了,所以下载软件一定要去正规的应用市场去。别乱下载应用,而这样的锁机样本一般都是会选择加固,不过可惜他们为了节约成本都是用了非企业版的免费版加固,脱壳就比较简单了,然后逆向分析代码就可以找到他设置的锁机密码,然后解密即可。
而上面如果是一个小白用户被锁机了,几乎很难解决,因为这时候设备被锁屏了,连接电脑也是需要授权的,但是得先解锁,那么就会发现自己的手机和捡到的一样,没法操作了,不过可以选择拷贝rom到sd下,然后进行刷机或者恢复,这样的成本就很大了。所以一定要小心。
三、root权限修改锁机密码
分析完了上面的锁机样本之后,我们知道现阶段都是这种需要授权操作,而这种授权一看就有修改锁屏密码,一个人上当之后后面可能就没人在上当了,所以我们得想到其他的办法进行更加狠的招制作样本。而上面提到的设备管理器有很多用途的,以前应用为了防止被用户卸载,也申请了这个权限。因为一旦一个应用具备了设备管理器就不会被卸载了,因为他的权限已经非常高了。不能被卸载。不过可以在设置页面查看有多少应用具备这个权限:
为了安全起见,像这种权限一般都是要选择拒绝的,安全性非常危险。一旦授权了,不堪设想。
既然前一篇我们已经知道了,设备的锁机加密算法,而且也知道他存在哪里,何不利用root权限来进行简单操作无需申请权限即可修改锁机密码,而对于这些想玩游戏利用辅助工具,对于root权限他们是可以接受的,因为他们并不知道root之后是干嘛呢?以为是更好的体验游戏效果。有了root权限之后,我们就简单了。直接弄一个新的密码,不管是手势密码还是复杂字符密码,然后通过加密算法加密,然后在写入到指定的key文件。重启设备生效即可。代码这里就不多说了,原理很简单:
这样我们可以构造一个九宫格手势密码,或者是数字密码,然后加密得到内容,在写到key文件中:
然后我们就可以写一个简单的锁机样本应用了,直接将修改的密码加密内容写入到应用沙盒文件中,然后在将文件覆盖系统的密码key文件,最后还得重启设备生效。当然这里是修改了字符密码,我们为了更大化操作,可以把手势密码也操作一下,这样就不管用户设备采用的是哪种类型密码都可以修改成功了。
四、解决指纹锁问题
上面就利用root权限修改了用户的锁机密码,但是这里有一个问题,就是现在很多设备已经支持指纹锁了,而且指纹锁未来也是趋势,那么如果一个设备用了指纹锁,该怎么办?对于上面利用设备管理器权限就没法操作了。但是对于root权限我们仍然可以操作,我们在分析了锁机密码加密过程中发现,系统会把当前锁机类型值保存到数据库中:
这个值存在 /data/system/locksettings.db 数据库中,我们可以查看:
这个是十进制数据,我们可以转化成十六进制就是0x60000了,然后我们查看代码他对应的是哪种类型:
就是复杂的字符密码类型,当然还有其他类型,这个定义在DevicePolicyManager.java类中。那么到这里我们就有思路了,如果设备的类型是指纹锁,那么我们可以修改这个表格数据中的这个字段将其变成手势密码或者是字符密码类型,然后在将修改后的这两种类型密码写入到key文件,重启设备就就可以过滤了指纹锁密码了。因为我们有了root权限,读写这个数据库文件不难了,而具体实现代码这里就给了,感兴趣的同学可以尝试操作一下。