《Android群英传》读书笔记9.Android系统信息与安全机制

1. Android系统信息获取

要获取系统的配置信息,通常可以从以下两个方面获取

1.1. android.os.Build

Build类包含了系统编译时的大量设备、配置信息

1.2. SystemProperty

SystemProperty包含了许多系统配置属性值和参数,很多信息与通过Build获取的值是相同的

1.3. Android系统信息实例
String board = Build.BOARD;
String brand = Build.BRAND;

String os_version = System.getProperty("os.version");
String os_name = System.getProperty("os.name");

系统信息最根本的来源在system/build.prop文件中,包含了很多RO属性值。进入/system目录,通过cat build.prop命令查看文件信息。同时,在adb shell中,还可以通过getprop来获取对应属性的值,如getprop ro.build.id
除了上面两个方法,Android系统还有/proc目录来存储系统信息,这里的信息比通过Build获得的信息更加丰富

2. Android Apk应用信息获取之PackageManager

  • ActivityInfo: 封装了在Manifest文件中<activity></activity><receiver></receiver>之间的所有信息,包括nameiconlabellaunchmod
  • ServiceInfo: 封装了<service></service>之间的所有信息
  • ApplicationInfo: 封装了<application></application>之间的信息。ApplicationInfo包含很多Flag,FLAG_SYSTEM表示为系统应用,FLAG_EXTERNAL_STORAGE表示为安装在SDCard上的应用
  • PackageInfo: 封装Manifest文件的相关节点信息,而PackageInfo包含了所有的Activity、Service等信息
  • ResolveInfo: 封装的是包含<intent>信息的上一级信息,用来帮助找到那些包含特定Intent条件的信息

有了上面这些用于封装的Bean对象之后,PackageManager就可以通过调用各种方法,返回不同类型的Bean对象了

  • 如果当前应用的flags & ApplicationInfo.FLAG_SYSTEM != 0则为系统应用
  • 如果当前应用的flags & ApplicationInfo.FLAG_SYSTEM == 0则为第三方应用
  • 当系统应用经过升级后,也将成为第三方应用:flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP != 0
  • 如果当前应用的flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE != 0则为安装在SDCard上的应用

3. Android Apk应用信息获取之ActivityManager

PackageManager重点在于获得应用的包信息,而ActivityManager重点在于获得在运行的应用程序信息

  • ActivityManager.MemoryInfo: MemoryInfo有几个非常重要的字段:availMem系统可用内存,totalMem总内存,threshold低内存的阈值,lowMemory是否处于低内存
  • Debug.MemoryInfo: ActivityManager.MemoryInfo通常用于获取全局的内存使用信息,而Debug.MemoryInfo用于统计进程下的内存信息
  • RunningAppProcessInfo: 运行进程的信息,存储的字段就是进程相关的信息,processName进程名,pid进程pid,uid进程uid,pkgList该进程下的所有包
  • RunningServiceInfo: 用于封装运行的服务信息,同样包含了一些服务进程的信息,同时还有一些其他信息

4. 解析Packages.xml获取系统信息

在系统初始化的时候,PackageManager的底层实现类PackageManagerService会去扫描系统中的一些特定的目录,并解析其中的Apk文件。同时,Android把它获得的应用信息,保存在/data/system/packages.xml中,当系统中的Apk安装、删除、升级时,它也会被更新

  • <permissions>标签:定义了目前系统中的所有权限,并分为两类:系统定义的(package属性为Android)和Apk定义的(package属性为Apk的包名)
  • <package>标签:代表一个Apk的属性。name: Apk的包名,codePath: Apk安装路径,主要有/system/app和/data/app两种,userId: 用户ID, version: 版本号
  • <perms>标签:对应Apk的AndroidManifest文件中的标签,记录Apk的权限信息

5. Android安全机制

5.1. Android安全机制简介
  1. 第一道防线:代码安全机制——代码混淆proguard
  2. 第二道防线:应用接入权限控制——AndroidManifest文件权限声明、权限检查机制
  3. 第三道防线:应用签名机制——数字证书
    数字证书用于保护App的作者对其App的信任关系,只有拥有相同数字签名的App,才会在升级时被认为是同一App
  4. 第四道防线:Linux内核层安全机制——Uid、访问权限控制
    Android继承了Linux的安全特性,比如文件访问机制
  5. 第五道防线:Android虚拟机沙箱机制——沙箱隔离
    Android的App运行在虚拟机中,因此才有沙箱机制,可以让应用之间相互隔离
5.2. Android系统安全隐患
  1. 代码漏洞
  2. Root风险
  3. 安全机制不健全
  4. 用户安全意识
  5. Android开发原则与安全
    Android与iOS系统一个非常显著的区别就是一个是开放系统一个是封闭系统
5.3. Android Apk反编译
  1. apktool
    执行反编译命令:apktool_2.0.0b7.jar d test.apk
    重新打包:apktool_2.0.0b7.jar b test 执行该命令后,在test文件夹下就会生成两个新的文件夹,重新打包的Apk在dlist目录下

  2. Dex2jar、jd-gui
    用解压缩工具解压Apk后的那个文件夹,有一个classes.dex文件
    反编译dex文件:d2j-dex2jar.bat classes.dex
    用jd-gui打开生成的classes-dex2jar.jar文件

5.4. Android Apk加密

为了能够对编译好的Java Class文件进行一些保护,通常会使用ProGuard来对Apk进行混淆处理,用无意义的字母来重命名类、字段、方法和属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值