Android之安全机制

根据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

时间: 2024-10-22 04:32:32

Android之安全机制的相关文章

Android事件分发机制详解:史上最全面、最易懂

前言 Android事件分发机制是每个Android开发者必须了解的基础知识 网上有大量关于Android事件分发机制的文章,但存在一些问题:内容不全.思路不清晰.无源码分析.简单问题复杂化等等 今天,我将全面总结Android的事件分发机制,我能保证这是市面上的最全面.最清晰.最易懂的 本文秉着"结论先行.详细分析在后"的原则,即先让大家感性认识,再通过理性分析从而理解问题: 所以,请各位读者先记住结论,再往下继续看分析: 文章较长,阅读需要较长时间,建议收藏等充足时间再进行阅读 目

Android ScrollView 滚动机制

Android ScrollView 滚动机制 我们都知道通过View#scrollTo(x,y)既可以实现将View滚动的效果,如果再添加Scroller类,就可以实现滚到效果.但是,这背后是如何实现的呢?这个问题涉及到View的绘图机制.我们先看看View的绘图的基本流程 (图片来自于网上比较常见的view绘图流程图) 关于三个阶段的简单描述: 1. measure:预估计ViewTree的各个View的占用空间. 2. layout :   确定ViewTree中各个View所处的空间位置

Android的消息机制之ThreadLocal的工作原理

提到消息机制大家应该都不陌生,在日常开发中不可避免地要涉及到这方面的内容.从开发的角度来说,Handler是Android消息机制的上层接口,这使得开发过程中只需要和Handler交互即可.Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去执行.很多人认为Handler的作用是更新UI,这说的的确没错,但是更新UI仅仅是Handler的一个特殊的使用场景,具体来说是这样的:有时候需要在子线程中进行耗时的IO操作,这可能是读取文件或者访问网络等,当耗时操作

Android异步消息处理机制(3)asyncTask基本使用

本文翻译自android官方文档,结合自己测试,整理如下. 概述 AsyncTask抽象类,翻译过来就是异步任务,能够合理并方便的使用UI线程.该类可以实现将后台操作结果显示在UI线程中,而不需要我们自己实现子线程或者handler(当然它内部也是借助这两者实现的). 虽然AsyncTask可以提供后台运行并将结果显示在UI上,但是理想情况应该是后台操作最多只能是几秒钟,若要执行长时间的操作强烈建议使用java中的Executor,ThreadPoolExecutor,FutureTask等.

聊一聊Android的事件机制

侯 亮 1概述 在Android平台上,主要用到两种通信机制,即Binder机制和事件机制,前者用于跨进程通信,后者用于进程内部通信. 从技术实现上来说,事件机制还是比较简单的.从大的方面讲,不光是Android平台,各种平台的消息机制的原理基本上都是相近的,其中用到的主要概念大概有: 1)消息发送者: 2)消息队列: 3)消息处理循环. 示意图如下: 图中表达的基本意思是,消息发送者通过某种方式,将消息发送到某个消息队列里,同时还有一个消息处理循环,不断从消息队列里摘取消息,并进一步解析处理.

Android事件分发机制

转载请注明出处:http://blog.csdn.net/chziroy/article/details/44401615 要理解Android事件分发机制,首先得了解几个概念,也算是总结,如果暂时看不懂也无妨,本文会讲解这几个问题. 1,点击屏幕,首先事件的传递从Activity的dispatchTouchEvent()方法开始. 2,关于Android事件分发机制,相关方法的方法有三个:onTouchEvent(),dispatchTouchEvent(),还有onInterceptTouc

从NDK在非Root手机上的调试原理探讨Android的安全机制(转载)

从NDK在非Root手机上的调试原理探讨Android的安全机制 最近都在忙着研究Android的安全攻防技术,好长一段时间没有写博客了,准备回归老本行中--Read the funcking android source code.这两天在看NDK文档的时候,看到一句话"Native debugging ... does not require root or privileged access, aslong as your application is debuggable".咦

Android的Message机制

对于Android的Message机制主要涉及到三个主要的类,分别是Handler.Message.Looper:首先对每个类做一个简单介绍:然后再介绍所谓的Android的Message机制是如何实现的,最后给了一个示例. 一.介绍三个相关的类 1. Handler主要有两个用途:首先是可以定时处理或者分发消息,其次是可以添加一个执行的行为在其它线程中执行, 对于Handler中的方法,可以选择你关心的操作去覆盖它,处理具体的业务操作,常见的就是对消息的处理可以覆盖public voidhan

转 理解Android系统Binder机制

一.Binder机制概述 在Android开发中,很多时候我们需要用到进程间通信,所谓进程间通信,实现进程间通信的机制有很多种,比如说socket.pipe等,Android中进程间通信的方式主要有三种: 1.标准Linux Kernel IPC 接口: 2.标准D-BUS接口: 3.Binder接口. 其中,Binder机制是使用最且最被认可的,因为Binder机制有以下优点: 1.相对于其它IPC机制,Binder机制更加简洁和快速: 2.消耗的内存相对更少: 3.传统的IPC机制可能会增加

图解 Android 事件分发机制

首发原文:http://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649548149&idx=1&sn=709149df682c7d3a6e453c9ef0626a1f&chksm=f1180e08c66f871eb2e7e39e057a5b090214fd71adcd98aa36b3d7fcecf77ad5d08138c50131#rd 在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟