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 ...
随机推荐
- 导出Office365中的组及成员
Set-ExecutionPolicy unrestricted $cred = Get-Credential $session = New-PSSession -ConfigurationName ...
- JAVA里面json和java对象之间的相互转换
1. 把java 对象列表转换为json对象数组,并转为字符串 JSONArray array = JSONArray.fromObject(list); String jsonstr = ar ...
- [微软官网]One Windows Kernel
One Windows Kernel https://techcommunity.microsoft.com/t5/Windows-Kernel-Internals/One-Windows-Kerne ...
- C语言为运算及 两个变量的赋值问题
#include <stdio.h>#define ARRAY_SIZE 10int main() { int arr[ARRAY_SIZE] = {51,116,53,120,85 ...
- LoadRunner脚本增强技巧之检查点
检查点的设置理解起来非常简单,就是要在服务器返回的页面中检查是否存在关键信息.检查点函数的错误会导致整个脚本运行结果的失败,通过这个功能可以方便地定位脚本运行中的逻辑错误.检查点的设置通常分为两种,一 ...
- SPAMS:稀疏建模工具箱
https://chunqiu.blog.ustc.edu.cn/?p=570 http://spams-devel.gforge.inria.fr/index.html 在一篇显著性检测文章:Sal ...
- collection 在创建迭代器后 不能在添加数据 否则会出现并发问题
collection 在创建迭代器后 不能在添加数据 否则会出现并发问题
- 秒杀多线程第七篇 经典线程同步 互斥量Mutex(续)
java使用Synchronized关键字实现互斥,而同时有Lock支持. 这两个的效果是等同的,Synchronized性能的起伏较大,而lock比较收敛. 为了代码的可读性,Synchronize ...
- 【Java】CSVUtils
package com.msk.ds.logic; import java.io.*; import java.util.List; /** * Created by Administrator on ...
- C++解析(13):临时对象与const对象
0.目录 1.临时对象 2.const对象 3.类成员 4.小结 1.临时对象 一个有趣的问题--下面的程序输出什么?为什么? #include <stdio.h> class Test ...