Android系统的apk应用程序的编译方式
- 借助系统编译
- 借助IDE工具
- 命令行编译
第三方工具Ant(Another Neat Tool)
编译器 如:CCG Android工程有成千上万个文件,ccg已经无法满足了,所以image系统出现了,这就是make出现的意义 Google使用了Ant 采用java语言开发,并且以xml(build.xml)来描述过程和依赖关系 通过命令行编译和打包APK
Ant的两种编译方式
- Debug 使用命令编译后在bin生成一个apk已经用debug key签名也经过了zipalign优化
- Release 生成apk后使用jarsigner或其他工具签名,然后利用zip优化
Apk编译过程
apk包含内容
- AndroidManifest 清单文件
- classes.dex 应用程序核心,由项目源码生成了.class文件,经过进一步转化变成Android系统可识别的Dalvik byte code,三包也会包含
- resources.arsc 编译后的资源文件
- res 未编译的资源文件
- META-INF 签名和检验信息
步骤
- 首先.aidl通过aidl工具转换成编译器能处理的java接口文件
- 同时资源文件将被aapt处理为最终的resources,并生成r.java
- java的编译器将r.java,java源码文件,以及上述生成的接口文件编译成.class文件,因为.class不是Android能识别的格式,所以还要利用dex工具转化为dalvik字节码
- 接下来上面生成的dex,资源包以及其他通过apkbuilder生成初始的apk文件
- 签名使用其他工具如果在debug下签名用的keystore是系统自带的默认值,优化原理是对apk包中的数据进行边界对齐,从而加快读取和处理过程
信息安全基础概述
信息安全与密码学
目标
- Authentication 双方连接是必须要做相应的身份认证
- Confidentiality 加密信息内容
- Data Integrity 保证数据的完整性
- Non-repudiation 保证信息真实性
信息安全学基础
加密
解密
哈希散列
对称算法
DES,AES
通过公共值和私密值和公式验证互相的key值得正确性
公钥算法/不对称算法
加密解密使用的密钥不是同一个,公钥和私钥
哈希算法
有效防止通过推测来获知铭文信息
应用程序签名
签名和未签名的唯一区别就是错的META-INF文件编夹
他是专门用来保存应用程序签名和检验等安全信息的目录,通常情况下包括MANIFEST.MF,CERT.SF,CERT.RSA
应用程序安装流程
首先Package Manager会对其进行初始化处理,其中就包含对签名和文件哈希值的检查。
1.PackageParser
负责解析应用程序包,并完成安全检验
2.JarFile
继承自ZipFile,每一个apk只能对应一个jarfile,真正的匹配工作由jarVerifier
3.JarVerifier
检验各种数据的存储仓库,同事包含了VerifierEntry嵌套类,后者会对每一个文件做具体的检查和匹配工作
4.VerifierEntry
在生成的时候会初始化,然后jarfileInputStream会进一步完善数据
5.jarfileInputStream
继承自inputstream
检验过程
MANIFEST.MF
验证了该文件的可靠性,就可以读取其中的信息来为apk包中所有的文件一一检验
CERT.SF
签名加密
CERT.RSA
开发者提供的证书,包含了开发者的公钥和一系列身份信息