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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值