apk签名验证机制
声明:
1.本帖转载自:http://riusksk.blogbus.com/logs/272154406.html,仅供自用,勿喷
2.欢迎交流学习
签名后的APK,在/META-INF目录下会生成以下3个文件:
MANIFEST.MF:保存除META-INF文件以外其它各文件的SHA-1+base64编码后的值。
CERT.SF:在SHA1-Digest-Manifest中保存MANIFEST.MF文件的SHA-1+base64编码后的值,在后面的各项SHA1-Digest中保存MANIFEST.MF各子项内容SHA-1+Base64编码后的值
CERT.RSA/DSA/EC:保存用私钥计算出CERT.SF文件的数字签名、证书发布机构、有效期、公钥、所有者、签名算法等信息
Android应用签名验证过程中,满足以下条件才能安装应用:
1、SHA-1(除META-INF目录外的文件) == MANIFEST.MF中的各SHA-1值;
2、(SHA-1 + Base64)(MANIFEST.MF文件及各子项) == CERT.SF中各值
3、公钥(CERT.SF) == CERT.RSA/DSA对SF文件的签名
Android 中关于签名验证相关源码分析:
关键源码主要位于:
http://code.metager.de/source/xref/android/4.4/frameworks/base/core/java/android/content/pm/PackageParser.java
http://code.metager.de/source/xref/android/4.4/libcore/luni/src/main/java/java/util/jar/JarVerifier.java
1、读取DSA/RSA/EC后缀的签名证书文件,然后调用verifyCertificate进行难,此处并无限制文件名,因此将CERT.RSA改成CERT123.RSA依然有效,但SF文件得跟RSA文件等签名证书文件同名:
2、读取SF(与后面证书同名)与RSA/DSA/EC文件的内容,再调用verifySignature进行校验:
3、在verifySignature进行校验时会去读取各项证书信息,包括证书序列号、拥有者、加密算法等等,然后判断CERT.RSA证书对CERT.SF的文件签名是否正确,防止CERT.SF被篡改,若成功则返回证书链,否则抛出异常:
4、在返回证书链时,对于自签名证书,则直接作为合法证书返回
5、继续回到verifyCertificate函数,它会校验SF文件中的MANIFEST.MF中各项Hash值是否正确,防止MF文件被篡改:
6、对于非系统应用,去枚举除META-INF目录以外的所有文件,然后进行哈希运算,并将其与MANIFEST.MF中的各文件哈希值进行比对,只有相匹配后才允许安装应用:
apk签名验证机制的更多相关文章
- 转:Android 签名验证机制(相当不错,强烈推荐)
转: http://riusksk.blogbus.com/logs/272154406.html Android应用签名验证过程中,满足以下条件才能安装应用: 1.SHA-1(除META-INF目 ...
- stars-one的原创工具——APK签名验证破解工具
ASCTool APk签名验证破解工具 APK Signature Crack Tool 本工具只对那些仅通过 PackageManager.getPackageInfo().signatures 来 ...
- Android官方技术文档翻译——Apk 拆分机制
本文译自androd官方技术文档<Apk Splits>,原文地址:http://tools.android.com/tech-docs/new-build-system/user-gui ...
- ”只用 1 分钟“ - 超简极速 Apk 签名 & 多渠道打包神器
众所周知,渠道包作为当下国内 Android 应用市场常见的分发方式,当 APP 和后台交互或进行数据上报时,会带上各自的 channel 渠道信息,以此方便企业 & 开发者统计 APP 在各 ...
- 做自己的Android ROM,屏蔽对framework中的系统APK的签名检查
最近两天一直在尝试更新Android中的关键库以达到定制ROM的效果,中间比较曲折,记录下来供自己和大家参考. 因为我需要基于Android的原生代码做一定的修改,所以如果无法将我自己编译出的APK或 ...
- Android中APK签名工具之jarsigner和apksigner详解
一.工具介绍 jarsigner是JDK提供的针对jar包签名的通用工具, 位于JDK/bin/jarsigner.exe apksigner是Google官方提供的针对Android apk签名及验 ...
- 微信分享—ios和安卓机制居然不一样!
实际项目中,在做微信分享追踪的时候,遇到了一个百思不得其解的问题. 在加入了用户分享追踪功能之后,页面已经加载完成的情况下,安卓分享功能没有任何问题,ios却总是分享失败. 关于ios和安卓设备的差 ...
- 关于Android安装apk出现解析包异常问题情况总结
原文地址:关于Android安装apk出现解析包异常问题情况总结 | Stars-One的杂货小窝 说之前,可以推荐下各位使用这个开源库AndroidUtilCode,下面提及到的工具类,都是在此库中 ...
- 新一代开源Android渠道包生成工具Walle
本文转自:http://tech.meituan.com/android-apk-v2-signature-scheme.html 新一代开源Android渠道包生成工具Walle 新的应用签名方案A ...
随机推荐
- 亚马逊AWS业务副总裁:如何在基础设施上降成本
腾讯科技 林靖东 11月17日编译 亚马逊Amazon Web Services业务的副总裁.著名工程师詹姆斯汉密尔顿(James Hamilton)在AWS re:Invent大会上解释了公司是如何 ...
- 遗传算法框架GAFT优化小记
前言 前段时间一直在用自己写的遗传算法框架测试算法在优化力场参数的效果,但是跑起来效率很慢,因为适应度函数需要调用多次力场程序计算能量,但是还是比我预想中的慢我也没有及时对程序进行profiling和 ...
- CQOI2018 游记 再见OI,既是反思,也是祝福
哎,怎么说呢? 时运不齐,命途多舛? 从头开始说吧. 今年的NOIP大家考的都不尽人意,每个人都有或多或少的失误,全部都几十分几十分地丢.最后大家剩下的觉得可能冲击一下省队的人一共只有7个. 伙伴们变 ...
- 团队Alpha冲刺(四)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:何家伟 组员8:政演 组员9:鸿杰 组员10:刘一好 组员:何宇恒 展示组内最新 ...
- 2."结对项目"的心得体会
上个星期,老师给我们布置了个课堂小作业: 某公司程序员二柱的小孩上了小学二年级,老师让家长每天出30道(100以内)四则运算题目给小学生做.二柱立马就想到写一个小程序来做这件事. 这个事情可以用很 ...
- 模板CodeTemplate
/** * @author:dubbo@xxxx.com * @date: ${date} ${time} * @version: V1.0 * @review: dubbo/${date} ${ti ...
- C++变量内存分配及类型修饰符
前言 了解C++程序内存分配,有助于深刻理解变量的初始化值以及其生存周期.另外,变量类型修饰符也会影响到变量的初始化值及其生存周期.掌握了不同类型变量的初始化值及其生存周期,能够让我们设计程序时定义变 ...
- 框架整合小小总结【SSH】注解式
Spring 注解式注册 bean: 大致分为以下几步: 开启 context 空间支持 开启自动扫描功能,指定扫描包路径 使用注解配置 bean (使用@Component 注解) 给 bean 注 ...
- XTU 1233 Coins(DP)
题意: n个硬币摆成一排,问有连续m个正面朝上的硬币的序列种数. 很明显的DP题.定义状态dp[i][1]表示前i个硬币满足条件的序列种数.dp[i][0]表示前i个硬币不满足条件的序列种数. 那么显 ...
- 【bzoj3456】城市规划 容斥原理+NTT+多项式求逆
题目描述 求出n个点的简单(无重边无自环)无向连通图数目mod 1004535809(479 * 2 ^ 21 + 1). 输入 仅一行一个整数n(<=130000) 输出 仅一行一个整数, 为 ...