根据android四大框架来解说安全机制

  • 代码安全
java不同于C/C++,java是解释性语言,存在代码被反编译的隐患;
默认混淆器为proguard,最新版本为4.7; proguard还可用来压缩、优化java字节码,删除无用的类、字段、方法、属性、注释等。
配置方法为在Android.mk中设置LOCAL_PROGUARD_FLAG_FILES := proguard.flags
packages/apps/Launcher2/proguard.flags
//特定方法
-keep class com.android.launcher2.Launcher {
  public void previousScreen(android.view.View);
  public void nextScreen(android.view.View);
  public void launchHotSeat(android.view.View);
}
//特定类,“$”表示后面的类是前面的类的内部类
-keep class com.android.launcher2.AllApps3D$Defines {
  *;
}
-keep class com.android.launcher2.ClippedImageView {
  *;
}
  • 接入权限
权限主要用来对应用的操作增加限制,防止恶意应用进行非法操作给用户造成敏感数据泄漏和设备被非法控制,防止恶意收费等;
Android的接入权限
Normal权限
Dangerous权限
signatureOrSystem权限
Signature权限
框架层权限定义位置
frameworks/base/core/res/ AndroidManifest.xml权限可用于整个应用、Activity、Service等。
创建接入权限和权限组
<permission android:name=“android.permission.GET_ACCOUNTS”   
android:permissionGroup=“android.permission-group.ACCOUNTS”
android:protectionLevel="normal“
android:description=“@string/permdesc_getAccounts”
android:label="@string/permlab_getAccounts" />
<permission-group android:name=“android.permission-group.STORAGE”
android:label="@string/permgrouplab_storage“
android:description="@string/permgroupdesc_storage" />
  • 应用权限的设置
共享用户ID即共用一个进程
Android源代码树携带的系统证书包括“media”、“platform”、“shared”、“testkey”等,其中“media”证书用于多媒体、下载场景中;“platform”证书用于系统场景中;“shared”证书用于启动器、电话簿场景中;“testkey”证书用于开发场景中,这些证书位于build/target/product/security目录下;
目前支持的“sharedUserId”属性包括“com.android.cts.shareduid”、“com.android.cts.process.uidpid_test”、“android.uid.system”、“com.android.uid.test”、“android.uid.calendar” 、“android.media”、“com.android.framework.externalsharedpermstestapp”、“android.uid.shared”、“android.uid.phone”等。常用的包括“android.uid.system”、“android.media”、“android.uid.shared”等。
设置应用权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
权限验证
Android提供了多个方法可用于验证调用方是否具有相应的权限。
如果调用方拥有相应的权限,则权限验证的返回值为PackageManager. PERMISSION_GRANTED否则返回PackageManager.PERMISSION_DENIED。
示例
private int enforceAccessPermission() {
int ret =
mContext.checkCallingOrSelfPermission("android.permission.BIND_WALLPAPER ");
return ret;
}
  • 数字证书
Android的数字证书是免费的,分调试模式和发布模式两种;
通过命令行和Eclipse可以生成发布模式的数字证书;
在命令行方式下利用Keytool来生成数字证书,并利用Jarsigner来为APK进行数字签名;
使用ADT Export Wizard进行签名;
只有同一包名且采用同一数字证书的应用才被认为是同一个应用;
数字证书的最大用途是应用升级和设置应用间通信的权限;
Keytool生成数字证书
keytool -genkey -v -keystore android.keystore -alias miaozl-keyalg RSA -validity 20000
“keystore android.keystore”表示生成的证书为“android.keystore”,可以加上路径(默认在用户主目录下);“alias miaozl”表示证书的别名是“miaozl”;“keyalg RSA”表示采用的RSA算法;“validity 20000”表示证书的有效期是20000天。另外通过keypass可以设置数字证书私钥的密码,通过keysize可以设置算法的位长,默认为1024比特,推荐2048比特及更长,通过storepass可以设置证书的密码。
Jarsigner进行数字签名
jarsigner -verbose -keystore android.keystore demo.apk  证书别名
接下来jarsigner会提示输入密钥库的口令和证书别名的口令,全部输入后,即可完成签名
查看数字证书签名
#jarsigner -verify -verbose -certs demo.apk
  • 网络安全
加密算法(敏感数据)
DES(对称)、3DES(对称)、RSA(非对称)、MD5、RC2/RC4(对称)、IDEA、AES、BLOWFISH等
Web服务(HTTP层)
三种手段WS-Security、SSL、数字签名。目前ksoap不支持WS-Security
TCP层
SSL、TSL
数据链路层
WAPI
  • 数据库安全
Android采用的SQLite目前采用明文存储数据;安全涉及加密、读写、搜索等。
加密方法
加密算法(实现方法参考网上)
权限设置
权限设置
android:permission
android:readPermission
android:writePermission
读写权限示例
<provider
            android:name=".provider.AttachmentProvider"
            android:authorities="com.android.email.attachmentprovider"
            android:multiprocess="true"
            android:grantUriPermissions="true“  
android:readPermission="com.android.email.permission.READ_ATTACHMENT"/>
  • 数据库安全--搜索
<provider android:name="SuggestionsProvider"
            android:readPermission="android.permission.READ_SMS"
            android:authorities="com.android.mms.SuggestionsProvider" >
            <path-permission
                    android:pathPrefix="/search_suggest_query"
                    android:readPermission="android.permission.GLOBAL_SEARCH" />
            <path-permission
                    android:pathPrefix="/search_suggest_shortcut"
                    android:readPermission="android.permission.GLOBAL_SEARCH" />
        </provider>
  • 虚拟机
通常情况下,每个应用均拥有一个虚拟机。
通常情况下,应用间无法相互访问私有数据。
访问数据的方法为:
文件方式
数据库权限开放
配置文件开放
Intent通信
  • 文件访问控制
Android在权限管理上应用了Linux的ACL(Access Control List)权限机制,而非早期Unix采用的UGO权限机制。
分区层面
在系统运行时,最外层安全保护是由Linux系统提供的,其中system.img所在的分区是只读的,不允许用户写入,而data.img所在的分区是可读写的,用于存放用户数据。
分区的用户权限在init.rc中定义。
单独文件
单独文件访问权限控制分群组、用户、权限。
权限分可读、可写、可执行。
命令:chown\chgrp\chmod。
 
转自:http://blog.csdn.net/mad1989/article/details/16886189

Android之安全机制的更多相关文章

  1. Android的Handler机制

    Handler机制的原理 Android 的 Handler 机制(也有人叫消息机制)目的是为了跨线程通信,也就是多线程通信.之所以需 要跨线程通信是因为在 Android 中主线程通常只负责 UI ...

  2. 讲讲Android事件拦截机制

    简介 什么是触摸事件?顾名思义,触摸事件就是捕获触摸屏幕后产生的事件.当点击一个按钮时,通常会产生两个或者三个事件--按钮按下,这是事件一,如果滑动几下,这是事件二,当手抬起,这是事件三.所以在And ...

  3. Android多线程通信机制

    掌握Android的多线程通信机制,我们首先应该掌握Android中进程与线程是什么. 1. 进程 在Android中,一个应用程序就是一个独立的进程(应用运行在一个独立的环境中,可以避免其他应用程序 ...

  4. Android事件分发机制(下)

    这篇文章继续讨论Android事件分发机制,首先我们来探讨一下,什么是ViewGroup?它和普通的View有什么区别? 顾名思义,ViewGroup就是一组View的集合,它包含很多的子View和子 ...

  5. Android事件分发机制(上)

    Android事件分发机制这个问题不止一个人问过我,每次我的回答都显得模拟两可,是因为自己一直对这个没有很好的理解,趁现在比较闲对这个做一点总结 举个例子: 你当前有一个非常简单的项目,只有一个Act ...

  6. Android 事件拦截机制一种粗鄙的解释

    对于Android事件拦截机制,相信对于大多数Android初学者是一个抓耳挠腮难于理解的问题.其实理解这个问题并不困难. 首先,你的明白事件拦截机制到底是怎么一回事?这里说的事件拦截机制,指的是对触 ...

  7. android事件分发机制

    android事件分发机制,给控件设置ontouch监听事件,当ontouch返回true时,他就不会走onTouchEvent方法,要想走onTouchEvent方法只需要返回ontouch返回fa ...

  8. Android系统Surface机制的SurfaceFlinger服务渲染应用程序UI的过程分析

    参考:Android系统Surface机制的SurfaceFlinger服务渲染应用程序UI的过程分析 一句话概括一下Android应用程序显示的过程:Android应用程序调用SurfaceFlin ...

  9. Android Handler处理机制 ( 一 )(图+源码分析)——Handler,Message,Looper,MessageQueue

    android的消息处理机制(图+源码分析)——Looper,Handler,Message 作为一个大三的预备程序员,我学习android的一大乐趣是可以通过源码学习 google大牛们的设计思想. ...

  10. Android事件分发机制完全解析,带你从源码的角度彻底理解

    Android事件构成 在Android中,事件主要包括点按.长按.拖拽.滑动等,点按又包括单击和双击,另外还包括单指操作和多指操作.所有这些都构成了Android中的事件响应.总的来说,所有的事件都 ...

随机推荐

  1. win10安装

    1.启动盘制作 首先我们需要登陆“微软中国下载中心”,从中下载一款名为“MediaCreationTool”的工具,利用该工具可以制作Win10安装U盘.直接通过以下地址快速进入“Windows下载中 ...

  2. jQuery学习(二) 自定义扩展函数

    jQuery函数调用写法很优雅,在项目开发过程中,有需要自定义函数经常被使用到,将这些函数放置到项目ExtTool.js中,为了编码方式的统一,也希望这些自定义函数与jQuery函数一致的调用方式.在 ...

  3. Django-模板语言和过滤器

    Django模板语言 首先模板只是一个文本文件,它可以生成任何基于文本的格式(HTML.XML.CSS等),模板中包含变量,在模板被渲染的时候替换为最终的值,以及控制模板逻辑的标签. 变量使用{{ 变 ...

  4. cocos2dx中调用TinyXml读取xml配置文件 || cocos2d-x 中跨平台tinyxml读取xml文件方式

    TiXmlDocument *doc = newTiXmlDocument; #if (CC_TARGET_PLATFORM ==CC_PLATFORM_ANDROID) //Android平台tin ...

  5. 02 Go 1.2 Release Notes

    Go 1.2 Release Notes Introduction to Go 1.2 Changes to the language Use of nil Three-index slices Ch ...

  6. scala可变长度参数(转)

    可变长度参数 Scala 允许你指明函数的最后一个参数可以是重复的.这可以允许客户向函数传入可变长度参数列表.想要标注一个重复参数,在参数的类型之后放一个星号.例如: scala> def ec ...

  7. 小程序开发总结一:mpvue框架及与小程序原生的混搭开发

    mpvue-native:小程序原生和mpvue代码共存 问题描述 mpvue和wepy等框架是在小程序出来一段时间之后才开始有的,所以会出现的问题有:需要兼容已有的老项目,有些场景对小程序的兼容要求 ...

  8. CF293B Distinct Paths题解

    CF293B Distinct Paths 题意 给定一个\(n\times m\)的矩形色板,有kk种不同的颜料,有些格子已经填上了某种颜色,现在需要将其他格子也填上颜色,使得从左上角到右下角的任意 ...

  9. Pytest里,mark装饰器的使用,双引号,没引号,这种差别很重要

    按最新版的pytest测试框架. 如果只是单一的mark,不要加任何引号. 如果是要作and ,not之类的先把,一定要是双引号! 这个要记清楚,好像和以前版本的书上介绍的不一样,切记! import ...

  10. USACO 4.3 Buy Low, Buy Lower

    Buy Low, Buy Lower The advice to "buy low" is half the formula to success in the stock mar ...