2016/2/26Android实习笔记(Android签名和aapt)

1. 咱们平时用eclipse或Android Studio开发获得的android应用程序,其实已经添加有默认的debug签名了。 html

Android系统要求全部的程序通过数字签名才能安装,若是没有可用的数字签名,系统将不准安装运行此程序,不论是模拟器仍是真实手机。所以,在设备或者是模拟器上运行调试程序以前,必须为应用程序设置数字签名。Android系统仅仅会在安装的时候测试签名证书的有效期,若是应用程序的签名是在安装以后才到期,那么应用程序仍然能够正常启用。         java

   Android经过数字签名来 标识应用程序的做者和在应用程序之间创建信任关系,不是用来决定用户可不能够安装该应用程序。android的这个签名由应用程序的做者完成,并不须要权 威的数字证书签名机构认证,他只是用来让应用程序包自我认证的。Android系统默认自动给应用程序签名,ADT会自动使用debug密钥为应用程序签名,debug密钥是一个名为debug.keystore的文件,位置位于电脑的:android

/Documents and Settings/liuhua/.Android/debug.keystore,其中的liuhua是电脑的用户名。算法

2. 因为Android应用程序资源的组织方式能够达到18个维度,所以就要求Android资源管理框架可以快速定位最匹配设备当前配置信息的资源来展示在UI上,不然的话,就会影响用户体验。为了支持Android资源管理框架快速定位最匹配资源,Android资源打包工具aapt在编译和打包资源的过程当中,会执行如下两个额外的操做:网络

        1). 赋予每个非assets资源一个ID值,这些ID值以常量的形式定义在一个R.java文件中。框架

        2). 生成一个resources.arsc文件,用来描述那些具备ID值的资源的配置信息,它的内容就至关因而一个资源索引表。eclipse

        有了资源ID以及资源索引表以后,Android资源管理框架就能够迅速将根据设备当前配置信息来定位最匹配的资源了。函数

    aapt即Android Asset Packaging Tool,在SDK的build-tools目录下。该工具能够查看,建立, 更新ZIP格式的文档附件(zip, jar, apk)。也可将资源文件编译成二进制文件,尽管你可能没有直接使用过aapt工具,可是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android 应用程序。在使用aapt以前须要在环境变量里面配置SDK-tools路径,或者是路径+aapt的方式进入aapt。工具

3.签名机制的原理

 

3.1基本知识

 
消息摘要 -Message Digest
简称摘要,请看英文翻译,是摘要,不是签名,网上几乎全部APK签名分析的文章都混淆了这两个概念。简单的说消息摘要就是在消息数据上,执行一个单向的Hash函数,生成一个固定长度的Hash值,这个Hash值便是消息摘要也称为数字指纹,消息摘要有如下特色:
1. 经过摘要没法推算得出消息自己
2. 若是修改了消息,那么摘要必定会变化(实际上,因为长明文生成短摘要的Hash必然会产生碰撞),因此这句话并不许确,咱们能够改成:很难找到一种模式,修改了消息,而它的摘要不会变化(抗冲突性)。
 
消息摘要的这种特性,很适合来验证数据的完整性,好比在网络传输过程当中下载一个大文件BigFile,咱们会同时从网络下载BigFile和BigFile.md5,BigFile.md5保存BigFile的摘要,咱们在本地生成BigFile的消息摘要,和BigFile.md5比较,若是内容相同,则表示下载过程正确。
注意,消息摘要只能保证消息的完整性,并不能保证消息的不可篡改性。

MD5/SHA-0 SHA-1
这些都是摘要生成算法,和签名没有关系。若是非要说他们和签名有关系,那就是签名是要借助于摘要技术。

数字签名 - Signature
数字签名,百度百科对数字签名有很是清楚的介绍。数字签名就是信息的发送者用本身的私钥对消息摘要加密产生一个字符串,加密算法确保别人没法伪造生成这段字符串,这段数字串也是对信息的发送者发送信息真实性的一个有效证实。数字签名是 非对称密钥加密技术 + 数字摘要技术 的结合。

数字签名技术是将信息摘要用发送者的私钥加密,与原文一块儿传送给接收者。接收者只有用发送者的公钥才能解密被加密的信息摘要,而后接收者用相同的Hash函数对收到的原文产生一个信息摘要,与解密的信息摘要作比对。若是相同,则说明收到的信息是完整的,在传输过程当中没有被修改;不一样则说明信息被修改过,所以数字签名能保证信息的完整性。而且因为只有发送者才有加密摘要的私钥,因此咱们能够肯定信息必定是发送者发送的。

数字证书 - Certificate
数字证书是一个经证书受权 中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。CERT.RSA包含了一个数字签名以及一个数字证书。
须要注意的是Android APK中的CERT.RSA证书是自签名的,并不须要这个证书是第三方权威机构发布或者认证的,用户能够在本地机器自行生成这个自签名证书。
 

3.2 Android签名分析

咱们将DF_SDM_1008.apk(本身任选)文件改成DF_SDM_1008.zip文件,打开DF_SDM_1008.zip文件,如图1所示。
 
图1 DF_SDM_1008.zip文件
 
1. META-INF\ (注:签名后的信息);
2. res\ (注:存放资源文件的目录) ;
3. AndroidManifest.xml (注:程序全局配置文件) ;
4. classes.dex (注:Dalvik字节码);
5. resources.arsc (注:编译后的二进制资源文件)。
接下来针对META-INF\文件进行分析。
 

3.3META-INF\文件

META-INF\文件中有三个文件,分别是MANIFEST.MF, CERT.SF, CERT.RSA,如图2所示。
如今有一个问题就是,三个文件怎么产生的的——签名产生的,第二个问题签名是怎么作的呢?这里Android提供了APK的签名工具signapk,经过xxx.keystore(java的密钥库、用来进行通讯加密用的、好比数字签名。keystore就是用来保存密钥对的,好比公钥和私钥)提供的信息,对APK进行签名,生成的META-INF\文件

 

转自:http://blog.csdn.net/feiyangxiaomi/article/details/40298155测试

     http://www.cnblogs.com/mfryf/archive/2013/05/21/3090844.html

   http://blog.csdn.net/penglijiang/article/details/8626108

相关文章
相关标签/搜索