简介:
android 通过代码混淆,应用权限,应用签名,虚拟机隔离等多种手段保护应用的安全。
第一道防线
代码安全机制——代码混淆 proguard
proguard(混淆器)它可以混淆关键代码、替换命名让破坏者阅读困难,同时也可以压缩代码、优化编译后的Java字节码。
第二道防线
应用接入权限控制——AndroidMainifest 文件权限声明、权限检查机制
只有当一个应用App具有相应的权限,才能在申请受限资源的时候,通过权限机制的检查并使用系统的Binder对象完成对系统服务的调用。
不足:1、被授予的权限无法停止。2、在应用声明App使用权限时,用户无法针对部分权限进行限制。3、权限的声明机制与用户的安全理念相关
系统按照以下顺序检查操作者的权限
首先判断permission名称,如果为空则直接返回PERMISSION_DENIED.
其次,判断Uid.如果为0则为Root权限,不做权限控制;如果为System Server的Uid则为系统服务,不做权限控制;如果Uid与参数中的请求Uid不同,则返回PERMISSION_DENIED.
最后,通过调用PackageManagerService.checkUidPermission()方法判断该Uid是否具有相应的权限,该方法会去XML的权限列表和系统级的platform.xml中进行查找。
第三道防线
应用签名机制——数字证书
Android中所有的App都会有一个数字证书,这就是App的签名,只有拥有相同数字签名的App,才会在升级时被认为是同一App.而且Android系统不会安装没有签名的App.
第四道防线
Linux内核层安全机制——Uid,访问权限控制
只有System.root用户才有权限访问到系统文件,而一般用户无法访问。
第五道防线
Android虚拟机沙箱机制——沙箱隔离
Android的app运行在虚拟机中,不同的应用之间不能互相访问,每个App都有对应的Uid.