Android APK文件签名机制
2015-12-17 23:10
232 查看
APK的签名机制是为了验证APK文件的发行机构。通过对比APK的签名,可以判断此APK是否是由原作者发行的,而不是陪破解篡改之后的重新打包版本。当然了,如果软件自身并没有在线验证的机制,又是第一次安装这个软件,就算安装的是再打包版本,用户也不会发觉什么异常的。
下面就来简单总结一下签名保护的原理和具体执行过程。
先说原理,既然是签名,依赖的原理肯定还是RSA那一套。就是非对称的加密,使用私钥进行加密,然后分发自己的公钥,使用者使用分发的公钥进行解密,如果验证通过,就说明软件确实是用你的私钥加密过的,也就是认证了确实是你发布的;而因为原则上别人不可能拿到你的私钥,而且数学上保证了不可能从你发布的公钥反推出你的私钥,也就保证了别人不可能伪装成你进行签名和发布(除非别人通过某种手段偷到了你的私钥,这就是另外一个层次上的安全问题了)。
说完了原理,我们来简单介绍一下Android签名应用程序的执行流程。签名功能的实现可以用下面一行命令完成:
java -jar signapk.jar
publickey.pem privatekey.pk8 target.apk signed_target.apk
各参数的含义如他们的名字说表示的。signapk的源码可以从android源代码库中找到,路径为/build/tools/signapk/SignApk.java
签名的过程实际是生成三个文件的过程,分别为MANIFEST.MF, CERT.SF和CERT.RSA。这三个文件的生成步骤为:
1. 生成MANIFEST.MF文件
遍历apk中的所有文件,逐个使用SHA1算法生成数字签名,再用Base64进行编码,最后将生成的签名写入MANIFEST.MF文件。这个文件可以用来验证文件的完整性,如果APK中有任何文件在打包之后又被修改,将导致完整性验证失败。
2. 生成CERT.SF文件
对前一步生成的MANIFEST文件,使用SHA1-RSA算法,用私钥进行签名。这个文件就是签名文件。
3. 在CERT.RSA文件中写入公钥和使用的加密算法等信息。
这个文件使安装程序知道如何对CERT.SF文件进行非对称的解密,从而对程序签名进行验证。
这就是签名的完整流程。
而解密过程可以参考源码文件frameworks\base\core\java\android\content\pm\PackageParser.java。
下面就来简单总结一下签名保护的原理和具体执行过程。
先说原理,既然是签名,依赖的原理肯定还是RSA那一套。就是非对称的加密,使用私钥进行加密,然后分发自己的公钥,使用者使用分发的公钥进行解密,如果验证通过,就说明软件确实是用你的私钥加密过的,也就是认证了确实是你发布的;而因为原则上别人不可能拿到你的私钥,而且数学上保证了不可能从你发布的公钥反推出你的私钥,也就保证了别人不可能伪装成你进行签名和发布(除非别人通过某种手段偷到了你的私钥,这就是另外一个层次上的安全问题了)。
说完了原理,我们来简单介绍一下Android签名应用程序的执行流程。签名功能的实现可以用下面一行命令完成:
java -jar signapk.jar
publickey.pem privatekey.pk8 target.apk signed_target.apk
各参数的含义如他们的名字说表示的。signapk的源码可以从android源代码库中找到,路径为/build/tools/signapk/SignApk.java
签名的过程实际是生成三个文件的过程,分别为MANIFEST.MF, CERT.SF和CERT.RSA。这三个文件的生成步骤为:
1. 生成MANIFEST.MF文件
遍历apk中的所有文件,逐个使用SHA1算法生成数字签名,再用Base64进行编码,最后将生成的签名写入MANIFEST.MF文件。这个文件可以用来验证文件的完整性,如果APK中有任何文件在打包之后又被修改,将导致完整性验证失败。
2. 生成CERT.SF文件
对前一步生成的MANIFEST文件,使用SHA1-RSA算法,用私钥进行签名。这个文件就是签名文件。
3. 在CERT.RSA文件中写入公钥和使用的加密算法等信息。
这个文件使安装程序知道如何对CERT.SF文件进行非对称的解密,从而对程序签名进行验证。
这就是签名的完整流程。
而解密过程可以参考源码文件frameworks\base\core\java\android\content\pm\PackageParser.java。
相关文章推荐
- Android: JNI动态注册
- Android-Universal-Image-Loader 的使用说明,android的imageview
- 【Android】瀑布流
- Android测试
- 接着归纳Android from 《第一行代码》
- Android网易新闻评论盖楼效果的实现
- Android 系统环境-常用adb命令操作
- Android BackgroundViewPager:类似桌面背景壁纸随手指滑动
- Android程序打包安装过程
- Android中的数学问题
- 6、android单例模式下使用观察者模式
- Freescale IMX6 Android (7): Android启动动画死循环 Home界面不出来与pid XXX exit 可能的原因汇总
- android事件分发的研究
- Android群英传第五章Scroll分析读书笔记
- android 常见对话框写法
- androidannotations摘要
- Android 对话框简单写法
- Ubuntu15.10 编译 Android5.0 源码
- 谷歌安卓官方文档之已知的问题
- 国内android资源备份很全的一个站