Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >android签名原理

android签名原理

作者头像
老马的编程之旅
发布于 2022-06-22 07:59:46
发布于 2022-06-22 07:59:46
1.2K0
举报
文章被收录于专栏:深入理解Android深入理解Android

为什么要签名? 确保Apk来源的真实性。 确保Apk没有被第三方篡改。

什么是签名? 在Apk中写入一个“指纹”。指纹写入以后,Apk中有任何修改,都会导致这个指纹无效,Android系统在安装Apk进行签名校验时就会不通过,从而保证了安全性。

apk组成

dex:最终生成的Dalvik字节码。 res:存放资源文件的目录。 asserts:额外建立的资源文件夹。 lib:如果存在的话,存放的是ndk编出来的so库。 META-INF:存放签名信息

MANIFEST.MF(清单文件):其中每一个资源文件都有一个SHA-256-Digest签名,MANIFEST.MF文件的SHA256(SHA1)并base64编码的结果即为CERT.SF中的SHA256-Digest-Manifest值。 CERT.SF(待签名文件):除了开头处定义的SHA256(SHA1)-Digest-Manifest值,后面几项的值是对MANIFEST.MF文件中的每项再次SHA256并base64编码后的值。 CERT.RSA(签名结果文件):其中包含了公钥、加密算法等信息。首先对前一步生成的MANIFEST.MF使用了SHA256(SHA1)-RSA算法,用开发者私钥签名,然后在安装时使用公钥解密。最后,将其与未加密的摘要信息(MANIFEST.MF文件)进行对比,如果相符,则表明内容没有被修改。

androidManifest:程序的全局清单配置文件。 resources.arsc:编译后的二进制资源文件。

数字摘要 对一个任意长度的数据,通过一个Hash算法计算后,都可以得到一个固定长度的二进制数据,这个数据就称为“摘要”。

补充:

散列算法的基础原理:将数据(如一段文字)运算变为另一固定长度值。 SHA-1:在密码学中,SHA-1(安全散列算法1)是一种加密散列函数,它接受输入并产生一个160 位(20 字节)散列值,称为消息摘要 。 MD5:MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。 SHA-2:名称来自于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,一种密码散列函数算法标准,其下又可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。

特征: 唯一性 固定长度:比较常用的Hash算法有MD5和SHA1,MD5的长度是128拉,SHA1的长度是160位。 不可逆性

签名和校验的主要过程 签名就是在摘要的基础上再进行一次加密,对摘要加密后的数据就可以当作数字签名

签名过程: 1、计算摘要:通过Hash算法提取出原始数据的摘要。 2、计算签名:再通过基于密钥(私钥)的非对称加密算法对提取出的摘要进行加密,加密后的数据就是签名信息。 3、写入签名:将签名信息写入原始数据的签名区块内。

校验过程: 1、首先用同样的Hash算法从接收到的数据中提取出摘要。 2、解密签名:使用发送方的公钥对数字签名进行解密,解密出原始摘要。 3、比较摘要:如果解密后的数据和提取的摘要一致,则校验通过;如果数据被第三方篡改过,解密后的数据和摘要将会不一致,则校验不通过。

数字证书 如何保证公钥的可靠性呢?答案是数字证书,数字证书是身份认证机构(Certificate Authority)颁发的,包含了以下信息:

证书颁发机构 证书颁发机构签名 证书绑定的服务器域名 证书版本、有效期 签名使用的加密算法(非对称算法,如RSA) 公钥等

接收方收到消息后,先向CA验证证书的合法性,再进行签名校验。 注意:Apk的证书通常是自签名的,也就是由开发者自己制作,没有向CA机构申请。Android在安装Apk时并没有校验证书本身的合法性,只是从证书中提取公钥和加密算法,这也正是对第三方Apk重新签名后,还能够继续在没有安装这个Apk的系统中继续安装的原因。

keystore和证书格式 keystore文件中包含了私钥、公钥和数字证书。根据编码不同,keystore文件分为很多种,Android使用的是Java标准keystore格式JKS(Java Key Storage),所以通过Android Studio导出的keystore文件是以.jks结尾的。

jarsigner和apksigner的区别 Android提供了两种对Apk的签名方式,一种是基于JAR的签名方式,另一种是基于Apk的签名方式,它们的主要区别在于使用的签名文件不一样:jarsigner使用keystore文件进行签名;apksigner除了支持使用keystore文件进行签名外,还支持直接指定pem证书文件和私钥进行签名。

在签名时,除了要指定keystore文件和密码外,也要指定alias和key的密码,这是为什么呢? keystore是一个密钥库,也就是说它可以存储多对密钥和证书,keystore的密码是用于保护keystore本身的,一对密钥和证书是通过alias来区分的。所以jarsigner是支持使用多个证书对Apk进行签名的,apksigner也同样支持。

Android Apk V1 签名原理

1、解析出 CERT.RSA 文件中的证书、公钥,解密 CERT.RSA 中的加密数据。 2、解密结果和 CERT.SF 的指纹进行对比,保证 CERT.SF 没有被篡改。 3、而 CERT.SF 中的内容再和 MANIFEST.MF 指纹对比,保证 MANIFEST.MF 文件没有被篡改。 4、MANIFEST.MF 中的内容和 APK 所有文件指纹逐一对比,保证 APK 没有被篡改。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android APK 签名原理
Android APK 签名原理涉及到密码学的加密算法、数字签名、数字证书等基础知识,这里做个总结记录。
用户3596197
2018/10/15
3.5K0
Android APK 签名校验[通俗易懂]
非对称加密算法需要两个密钥:公开密钥(简称公钥)和私有密钥(简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
全栈程序员站长
2022/09/03
5.3K0
Android APK 签名校验[通俗易懂]
浅谈程序的数字签名
数字签名它是基于非对称密钥加密技术与数字摘要算法技术的应用,它是一个包含电子文件信息以及发送者身份,并能够鉴别发送者身份以及发送信息是否被篡改的一段数字串。
小道安全
2022/12/03
1.8K0
浅谈程序的数字签名
Android V1及V2签名签名原理简析
Android为了保证系统及应用的安全性,在安装APK的时候需要校验包的完整性,同时,对于覆盖安装的场景还要校验新旧是否匹配,这两者都是通过Android签名机制来进行保证的,本文就简单看下Android的签名与校验原理,分一下几个部分分析下:
看书的小蜗牛
2019/05/14
2.7K0
APK签名原理
网上已有多篇分析签名的类似文章,但是都有一个共同的问题,就是概念混乱,混乱的一塌糊涂。
全栈程序员站长
2022/07/01
8190
AndroidV1,V2,V3签名原理详解
背景介绍: 一般开发者会指定使用自己创建的证书,如果没有指定,则会默认使用系统的证书,该默认的证书存储在C:\Users\admin.android\debug.keystore,不同的电脑可能安装不同路径。一个签名证书文件中,是包含一对公私钥,用私钥对apk进行签名,在安装到android手机时,系统会使用证书中对应签名私钥的公钥来验证,查看apk是否被更改过,如果没有则可以安装在手机上。任何的app store都不允许使用默认的debug.keystore打包的apk发布上去,因为debug.keystore的密码是默认的,不安全。 一,没有签名的APK无法安装 Android的APK要进行签名才能够安装到手机上,这是因为在安装的时候系统会进行检测,平时我们直接点AS里面那个绿色的运行按钮也能够直接安装到手机上,这是因为其实它也进行了签名,只不过AS自动帮我们做了这个操作有个默认的签名
北洋
2021/12/08
1.1K0
AndroidV1,V2,V3签名原理详解
探究 Android 签名机制和原理
最近在调研一个测试工具的使用,在使用中发现被测试工具处理过的apk文件经安装后打开就会崩溃,分析崩溃日志后原因是签名不一致导致的。
用户5521279
2020/08/30
3.1K0
Android 新一代多渠道打包神器
李涛
2017/04/21
6.4K2
Android 新一代多渠道打包神器
移动安全(二)|APK打包流程及签名安全机制初探
切入正题,胡小毛在学习Android逆向的过程中又有所总结,先来看看apk文件结构:
用户1631416
2020/03/12
1.1K0
细说Android apk四代签名:APK v1、APK v2、APK v3、APK v4
大部分开发者对apk签名还停留在APK v2,对APK v3和APK v4了解很少,而且网上大部分文章讲解的含糊不清,所以根据官网文档重新整理一份。
BennuCTech
2021/12/10
6.6K0
细说Android apk四代签名:APK v1、APK v2、APK v3、APK v4
安卓安装包签名_笔记签名验证
我们知道,一款Android 要发布的话,必须经过签名,Android目前支持的签名方式包括三种:
全栈程序员站长
2022/11/17
1.3K0
安卓安装包签名_笔记签名验证
Android签名校验机制(数字证书)
之前有多个游戏遇到关于签名错误的问题,加上有些游戏开发不熟悉Android签名校验的机制以及打包的方法,就专门总结了一下,现在整理一下。 首先放上官方文档链接:http://developer.android.com/tools/publishing/app-signing.html 什么是签名 就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。数字签名是个加密的过程,数字签名验证是个解密的过程。 为什么有签名 最简单直接的回答: 系统要
子勰
2018/05/22
6.8K0
分析 Android V2 新签名打包机制
QQ音乐技术团队
2017/10/31
6.6K0
分析 Android V2 新签名打包机制
Android应用签名、反编译与防止二次签名
我们自己开发的app签名,就代表着我自己的版权,以后要进行升级,也必须要使用相同的签名才行。签名就代表着自己的身份即keystore。小编所在项目,遇到应用被恶意篡改的情况。新版本客户端加入了在线签名逻辑以及防止二次签名逻辑。小编对相关知识加深了理解,并运用在项目测试中,分享给大家。
用户5521279
2019/06/02
5.4K0
Android签名攻与防
JNI全称是Java Native Interface(Java本地接口)单词首字母的缩写,本地接口就是指用C和C++开发的接口。由于JNI是JVM规范中的一部份,因此可以将我们写的JNI程序在任何实现了JNI规范的Java虚拟机中运行。同时,这个特性使我们可以复用以前用C/C++写的大量代码。JNI目前提供两种注册方式,静态注册方式实现较为简单,但有一些系列的缺陷,动态注册要复写JNI_OnLoad函数,过程稍微复杂。
Anymarvel
2018/10/22
2.3K0
Android签名攻与防
【专业技术】Android如何保证安全?
存在问题: 那么多小伙伴想root,root后好处多多你懂的,那么开发的小伙伴最想关心的是安全机制问题。 解决方案: 我们就以此来了解一下Android 安全机制 安卓有一套自己的安全权限机制,大部分来自linux的权限机制,某些地方也做了延伸,比如linux中的用户概念,在安卓上来说就相当于app。对于一些刚学习安卓的同学来说,如果之前也没有了解过linux的权限概念,对于安卓的这个安全机制也会比较迷茫,看到一篇文章对于android的这个安全权限机制写的还算不错,推荐初学的同学阅读一下。当然如果某些部
程序员互动联盟
2018/03/15
1.3K0
APK签名流程详解
安卓的签名实际就是产生 MANIFEST.MF/ CERT.SF/ CERT.RSA这3个文件的过程。
全栈程序员站长
2022/08/26
1.1K0
APK签名流程详解
5分钟短文 | Android证书生成,签名,验证,虽然难,但学一次就够了!
从Android演进开始,APK签名就已经成为Android的一部分,并且android要求所有Apks都必须先签名,然后才能将其安装在设备上。关于如何生成密钥以及如何签名的文章很多。一个Apk,但我们将从安全角度进行研究。在对Apk文件进行反编译或反向工程之后,应查看哪个文件,以获取有关最初对应用进行签名的开发人员的更多信息。
程序员小助手
2020/06/17
1.2K0
Android逆向 | 基础知识篇 - 01
system分区常用目录:app、lib、xbin、bin、media、framework
咸鱼学Python
2019/08/06
1.1K0
手把手教你逆向分析 Android 程序
很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下。 第一张图是在把代码注入到地图里面,启动首页的时候弹出个浮窗,下载网络的图片,苍老师你们不会不认识吧? 第二张图是微信运动步数作弊,6不6? ok,那我们从头说起…… 1.反编译 Android 的反编译,相信大家都应该有所了解,apktool、JEB 等工具。 我们先看一下 Apk 文件的结构吧,如下图: 1.META-INF:签名文件(这个是如何生成的后面会提到)。 2.r
腾讯Bugly
2018/03/23
3.3K0
手把手教你逆向分析 Android 程序
相关推荐
Android APK 签名原理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档