android黑科技系列——修改锁屏密码和恶意锁机样本原理分析
一、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权限,读写这个数据库文件不难了,而具体实现代码这里就给了,感兴趣的同学可以尝试操作一下。
对于现在各种恶意锁机软件,Google官方在不同版本已经给出了防护方案(以下内容摘自安全网络):
Android L(Android 5.0-5.1)
在早期Android版本中,通过getRunningTasks方法可获取当前运行栈顶程序,但自Android
5.0起该方法被弃用,同时getRunningAppProcesses与getAppTasks方法的使用也受到了限制,由此抑制了劫持Activity类勒索软件的出现。
Android M(Android 6.0)
大部分手机勒索软件的惯用伎俩是通过SYSTEM_ALERT_WINDOW权限来打开特定系统类型窗口并将其显示在所有其他应用程序和窗口之上,以此达到锁定用户设备的目的。Android
M的出现使得勒索软件制马人在实施手机勒索时遇到了一大瓶颈——动态权限申请,由于自Android
M起,SYSTEM_ALERT_WINDOW开始被列为一种危险程度较高的权限而被特殊处理——即需要用户动态授权。这一改变意味着只要勒索软件的目标系统为Android
M,其就不能如往常一样在用户毫无防备的情况下锁定用户设备,而是必然有一个用户授权阶段,这对勒索软件的发展起到了一定程度的阻碍作用。
Android N(Android 7.0-7.1)
与之前版本可任意设置或重置锁屏密码不同的是,Android
N中明确规定,第三方应用开发者只能使用DevicePolicyManager.resetPassword为无密码设备设置初始密码,而不能重置或清除已有的设备密码。Android
N中对于resetPassword API所添加的限制能阻止木马对已有锁屏密码的重置,从而使得部分勒索软件失效。
而对于窗口样式锁机最为常见,就是利用WindowManager设置最高权限,导致设备点击任何地方没有反应,而在Android
O中已经对这个窗口权限做了严重限制:Android
O预览版一经发布就给了勒索软件致命打击,新系统禁用了5种窗口。如下图所示,其中包括3种勒索软件常用的系统窗口类型,窗口置顶类勒索木马“赖以生存”的系统窗口类型被限制使用了。
在Android
O之前版本中,勒索软件通过调用特定系统窗口类型将自身窗口完全覆盖在第三方应用程序与其他系统窗口之上,用户无法响应其他窗口,由此设备被锁定;但在Android
O中,这几种具有置顶权限的系统窗口类型被弃用,勒索软件制作者找不到其他能完全覆盖第三方应用程序与其他系统窗口的窗口类型,窗口置顶类锁屏将无法实施。
在Android
6.0之前,使用系统类窗口进行手机勒索十分简单,只需要在AndroidManifest清单文件中申请SYSTEM_ALERT_WINDOW权限即可使用TYPE_SYSTEM_ALERT、TYPE_SYSTEM_ERROR等高级别窗口,用户开启手机勒索软件后无需额外操作甚至来不及做出反应,系统窗口就已置顶,手机即刻被锁定。
自Android 6.0起至Android
7.1,Android系统开启动态权限模型,SYSTEM_ALERT_WINDOW权限开始被列为一项特殊权,尽管其权限级别(Signature)不是Dangerous,但开发者在使用之前也必须动态获得用户授权,只有在用户进行授权后,应用才可以随意使用TYPE_SYSTEM_ALERT、TYPE_SYSTEM_OVERLAY、TYPE_SYSTEM_ERROR等高级别窗口。在这一阶段,用户通过一项Action——MANAGE_OVERLAY_PERMISSION打开设置“在其他应用的上层显示”页面,如下图所示,用户手动允许后,系统高级别窗口权限开放,此时即可成功使用这些窗口进行手机勒索。
五、技术总结
到这里,我们就分析了如何修改Android中锁屏密码,主要有两种方式:
第一种:利用设备管理器权限,直接用系统提供的api修改
第二种:利用root权限和锁屏密码算法直接修改系统锁机密码文件内容
而这两种方式操作完成之后都需要重启设备生效,而对于这两种方式各有利弊,不过针对于一些游戏外挂root权限一般都是具备的,所以第二种是最优方案。而对于一些普通恶意应用root权限很少,可以利用第一种方式进行操作是最优方案。
加密算法源码:https://github.com/fourbrother/AndroidScreenOffPwd
六、安全提示
但是到这里,是否对于这些恶意锁机软件用户就不能避免呢?当然可以避免,只要你不要有歪想法,比如你玩游戏为何想到外挂?你为何要去下载哪些不好的应用,因为你心中有杂念。如果你是一个纯真的用户,可能不会选择其他渠道下载应用,会去正规的市场中下载应用,这样你不可能被搞,如果你是一个心无杂念的用户,肯定不会随意授权给应用,不会选择root设备。那么究其原因,哪些非法分子就是利用一小部分人的歪念心里,制作了这个样本开始勒索。而如果一旦被勒索了,第一时间是想到的自己解决,刷机或者恢复,不可进行交钱解决,因为对于那些勒索钱财的,不可放纵,就是不要给钱。宁愿不要手机,也不给你。当然最后还想想说Android中的这个设备管理器权限特别是修改密码这个操作本来其实为了用户设备丢失,进行定位擦除数据或者修改密码来避免手机更多信息被窃取弄的,但是这样的api被乱用之后也是不合理的,如果可以期待系统能更加的优化这一块的功能。
android黑科技系列——修改锁屏密码和恶意锁机样本原理分析的更多相关文章
- android黑科技系列——微信抢红包插件原理解析和开发实现
一.前言 自从几年前微信添加抢红包的功能,微信的电商之旅算是正式开始正式火爆起来.但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导 ...
- android黑科技系列——手机端破解神器MT的内购VIP功能破解教程
一.前言 在破解app的时候,我们现在几乎都是在PC端进行操作,但是之前bin神的MT管理器,可以在手机端直接破解,不过也有很大的局限性,但是对于一些简单的app破解没问题的.这个工具其实原理也很简单 ...
- android黑科技系列——破解游戏之修改金币数
我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是Android中的游戏,在网上搜索一下移动端游戏外挂,可能会找到一款 ...
- android黑科技系列——自动注入代码工具icodetools
一.前言 在前面已经介绍完了 自动给apk中注入日志代码工具icodetools原理了,在那里我们曾经说过其实离真正的可使用价值有点距离,本篇就对这个工具进行一些优化,让其真正意义上开始能工作量产.当 ...
- android黑科技系列——静态分析技术来破解Apk
一.前言 从这篇文章开始我们开始我们的破解之路,之前的几篇文章中我们是如何讲解怎么加固我们的Apk,防止被别人破解,那么现在我们要开始破解我们的Apk,针对于之前的加密方式采用相对应的破解技术,And ...
- android黑科技系列——解析公众号文章消息和链接文章消息自动打开原理
一.辅助功能方案分析 关于WX的各种功能插件已经非常普遍了,而现在的插件都是依赖于Xposed框架进行的,所以个人觉得WX应该在这方便应对Xposed框架的使用防护,防止插件满天飞的现象,本文来介绍一 ...
- android黑科技系列——Apk混淆成中文语言代码
一.前言 最近想爆破一个app,没有加壳,简单的使用Jadx打开查看源码,结果把我逗乐了,代码中既然都是中文,而且是一些比较奇葩的中文字句,如图所示: 瞬间感觉懵逼了,这app真会玩,我们知道因为Ja ...
- android黑科技系列——Xposed框架实现拦截系统方法详解
一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...
- android黑科技系列——爆破一款应用的签名验证问题
一.前言 在之前的文章中说过Android中的安全和破解是相辅相成的,为了防止被破解,很多应用做了一些防护策略,但是防护策略也是分等级,一般简单的策略就是混淆代码和签名校验,而对于签名校验很多应用都是 ...
随机推荐
- 洛谷 1486 郁闷的出纳员【Treap】
[题意概述] 要求维护一个序列支持以下操作: 1,插入元素x: 2,把序列的所有元素加上x: 3,把序列的所有元素减去x,同时低于一个给定的下限的元素马上被删除: 4,询问序列中第k大的元素. [题解 ...
- hdu 5182 PM2.5
问题描述 目前,我们用PM2.5的含量来描述空气质量的好坏.一个城市的PM2.5含量越低,它的空气质量就越好.所以我们经常按照PM2.5的含量从小到大对城市排序.一些时候某个城市的排名可能上升,但是他 ...
- 学习记录--如何将exec执行结果放入变量中?
declare @num int, ) set @sqls='select @a=count(*) from tb ' exec sp_executesql @sqls,N'@a int output ...
- tipsText表单验证(注册)
注册表单验证脚本 <script src="/assets/skins/js/jquery-1.11.2.min.js"></script> <scr ...
- SCU Censor
Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text p . Her j ...
- PHP array_diff()
定义和用法 array_diff() 函数返回两个数组的差集数组.返回的数组的元素都取自被比较的数组(既第一个数组). 在返回的数组中,键名保持不变. 语法 array_diff(array1,arr ...
- spring 计时器
spring 计时器 可以这样: http://blog.csdn.net/u010648555/article/details/52162840 也可以使用annotation <!-- 设置 ...
- IO 字节流学习
复制图片和MP3 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.Fil ...
- 【翻译自mos文章】在12c数据库中,哪种audit trail 受到支持?
在12c数据库中,哪种audit trail 受到支持? 来源于:What Audit Trail Types Are Supported For A 12c Database? (文档 ID 198 ...
- C++开发人脸性别识别总结
历时一个月,最终在昨天把<C++开发人脸性别识别总结>系列博客完毕了,第一篇博客发表在2015年12月29日,截止昨天2016年2月29日最后一篇完毕,去除中间一个月的寒假,正好一个月,首 ...