Android安全机制

Android安全机制简介

Android系统中,可以用以下几种安全机制保护系统的安全。

代码安全机制

代码安全机制就是使用代码混淆proguard来保护系统安全。

APK存在被反编译的风险,proguard可以混淆关键代码,替换命名让破坏者阅读代码困难,同时可以压缩代码,优化编译后的Java字节码。

应用权限控制

应用权限控制是在Manifest文件中声明权限,对权限进行检查。

任何应用程序在使用系统受限资源时,都需要向系统声明所需要的权限,通过了权限检查,才能调用系统对应的服务。

应用签名机制

应用签名机制是利用数字证书来控制APK的来源是否安全。

Android中所有的APP都有一个数字证书,即APP的签名,用于保护APP的作者对已APP的信任关系。只有相同数字签名的APP,才会在升级时被认为是同一个APP,并且系统不会安装没有签名的APP。

Linux内核层安全机制

Android是基于Linux内核开发,所以Android继承了Linux的安全特性,比如文件访问权限控制。通常只有System和Root用户才有权限访问系统文件。

虚拟机沙箱机制

Android的APP运行在虚拟机中,因此有了沙箱机制,可以让APP之间相互隔离。通常情况下,不同APP之间不能相互访问,每个APP运行在单独的虚拟机中,与其它APP完全隔离,即使一个APP崩溃,也不会对导致其它APP异常。

APK反编译

APK文件本质上是一个压缩文件,但是APK一般都做过加密处理,普通的解压方式不能得到正确的文件,下面介绍一些常用的工具,它们可以分别反编译APK的不同部分。

apktool

apktool可以用来反编译APK中的XML资源文件。

通过以下命令反编译一个APK文件:

1
apktool.jar d test.apk

参数d是decode的意思,apk文件可以加上目录。执行反编译命令后,当前文件夹会出现对应APK名字的文件夹,打开文件夹就可以看到APK的资源文件。

这个工具在汉化时比较有用,在提前资源文件进行汉化后,可以用以下命令重新打包:

1
apktool.jar b test

smali

使用apktool工具反编译APK文件后,可以得到一个smali文件夹。要查看APK的源码,首先需要将使用smali工具将smali代码转换为dex文件。

通过以下命令将smali文件转换为dex文件:

1
smali.jar test/smali -o test.dex

使用以上命令后,后在当前文件夹会出现test.dex文件。

dex2jar

使用smali工具获取dex文件后,还需要将dex文件转换为jar文件。

通过以下命令将dex文件转换为jar文件:

1
dex2jar.bat test.dex

使用以上命令后,可以得到命名为test.dex.dex2jar.jar的文件。

jd-gui

通过dex2jar工具获得了APK源码对应的jar文件后,就可以使用jd-gui工具查看APK的源码了。

直接打开jd-gui.exe程序,打开对应的jar文件查看即可。

APK加密

Java字节码很容易被反编译,可以使用ProGuard对代码进行混淆,增加APK的安全性。

ProGuard的原理是使用无意义的字母来重命名类、字段和方法。不过,除了进行混淆代码,ProGuard还可以删除无用的类、字段和方法,以及无用的注释,最大限度地优化Class文件。

在Gradle中使用ProGuard的代码如下所示:

1
2
3
4
5
6
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

其中minifyEnabled表示是否打开代码混淆,proguardFiles表示混淆规则的文件。前一个是系统默认的混淆文件,大部分情况使用这个默认文件就行了;后一个是自定义的混淆文件,在这个文件中可以定义一些第三方依赖包的混淆规则。

坚持原创技术分享,您的支持将鼓励我继续创作!