android apk文件的签名问题
android的APK文件实际上是一个jar文件。jar的意思是瓶、罐,那就意味着jar文件是一个用来存放android应用相关文件的容器。事实上,它也确实如此,它只是一个带或不带压缩的zip文件,当你把.apk后缀改成.zip后,就能对此进行解压了。用java写的不同类型应用都会使用jar来存储它们的文件。jar有一些特殊的结构。
参考:KeyStore文件
1. 编译一个未签名的apk文件
P2PIM % gradlew :app:assembleRelease
我们将在下面的路径找到未签名的apk文件app-release-unsigned.apk:
app/build/outputs/apk/release/app-release-unsigned.apk
2.用.jks对apk进行签名
// --ks 从初始化好的KeyStore加载私钥和证书链,KeyStore的初始化是基于指定的.jks文件的% ./apksigner sign --ks kyunban.jks --out app-release-signed.apk app-release-unsigned.apk
Keystore password for signer #1:
输入.jks的保护密码,就可以完成签名:
% ls
app-release-signed.apk
apksigner
apksigner对给定的apk文件进行签名,它会剥离任何先前存在的签名。
换句话说,当将要进行签名的apk已经签过名了,那么apksigner会把已存在的签名先删除掉,再进行重新签名。
使用一个或多个签名者执行,每个签名者由一个非对称密钥表示
Pair和对应的证书。通常,APK只由一个人签名
签名者。对于每个签名者,需要提供签名者的私钥和
证书。
签名是由一个或多个签名者来完成的,就像一份重要的文件一样,可能是由一个重要的人来签名即可,也可能需要好几个重要的人来共同签名才能有效。在计算机里的签名也是一样的,首先是选择非对称密钥对和相应的证书来完成。私钥是掌握在签名者自己手中,另人是没有的。证书是用来传输对应的公钥。 因为私钥加密的内容只能用其公钥来解密,又因私钥只掌握在签名者自己手中,因此就构成了签名者无法抵赖签名的事实。因此签名者都是要用各自的私钥来进行签名的。
在Android领域,要对apk文件进行签名时,只能用一个签名者的私钥来签名,它不能够联名签名。所以对已签名的apk文件进行重新签名时,它会先把先前的签名剥离掉先,再签名。
所以要对apk签名,签名者必须提供私钥和证书,证书中有私钥对应的公钥。
.jks只是一份存放了相应的私钥、公钥和证书的地方,其实,也可以用类似.jks文件来对apk文件进行签名,apksigner支持的就行,这里列举一些签名的例子:
- 只用keystore文件kyunban.jks中的私钥进行签名:
// 如果不通过--out指定新的文件名,签名的文件也就是app.apk,覆盖掉原先未签名的文件
$ apksigner sign --ks kyunban.jks app.apk
- 只用keystore文件kyunban.jks中的私钥进行签名,签名的文件不覆盖原来未签名的文件
$ apksigner sign --ks kyunban.jks --in app.apk --out app-signed.apk
- 通过.pk8文件中的私钥和证书文件中的证书链一起签名,注意这里要求证书文件格式必须是X.509 PEM 或 DER 格式:
$ apksigner sign --key release.pk8 --cert release.x509.pem app.apk
- 用两个私钥对apk文件进行签名
$ apksigner sign --ks release.jks --next-signer --ks magic.jks app.apk
- 如果签名时,.jks用的密码字符不是ASCII编码,那么需要通过
--pass-encoding
指定密码的字符集,这样就可以使用非ASCII编码的密码了。
$ apksigner sign --ks release.jks --pass-encoding ibm437 app.apk
- 使用 Java Crypto Architecture (JCA) (Java加密体系)签名apk文件,典型的就是用PKCS #11的提供者来签名,这些提供者的类文件要提前安装好,确保在命令行中能够访问到它们:
// --provider-class指定签名的提供者
// --provider-arg指定参数文件,这些参数是传给--provider-class指定的类的
// --ks NONE 不需要keystore文件来提供私钥,这种签名用的是PKCS #11密钥库,即PKCS #11的keystore。
// --key-type指定密钥库即keystore使用的类型或算法,没有指定就用默认的。这里用PKCS11算法
$ apksigner sign --provider-class sun.security.pkcs11.SunPKCS11 --provider-arg token.cfg --ks NONE --ks-type PKCS11 app.apk
- 用轮换签名证书签名apk文件,这个签名方案只在v3中支持。这种签名方式中,签名的历史记录会被使用到。本次签名用到的证书,与上次是不同的。
--lineage
指定的就是这个历史记录,这是用apksigner的rotate命令创建的。这个命令的作用就是添加一个新的签名证书到SigningCertificateLineage这个对象。如果使用这种方式签名的话,所有的签名者都必须在signing lineage中。估计比较少人用这种,但无疑它更加安全。
$ apksigner sign --ks release.jks --next-signer --ks release2.jks --lineage /path/to/signing/history/lineage app.apk
相关文章:
android apk文件的签名问题
android的APK文件实际上是一个jar文件。jar的意思是瓶、罐,那就意味着jar文件是一个用来存放android应用相关文件的容器。事实上,它也确实如此,它只是一个带或不带压缩的zip文件,当你把.apk后缀改成.zip后,就能对此进行…...
ATTCK视角下的信息收集:主机发现
目录 1、利用协议主动探测主机存活 利用ICMP发现主机 利用ARP发现主机 利用NetBIOS协议发现主机 利用TCP/UDP发现主机 利用DNS协议发现主机 利用PRC协议发现主机程序 2、被动主机存活检测 利用Browser主机探测存活主机 利用ip段探测主机存活 利用net命令探测主机存活…...
Redis 主从、哨兵和分片集群简单介绍
Redis 主从集群架构 单节点 redis 并发能力有上限,要进一步提高 redis 并发能力,就要搭建主从集群,实现读写分离 主从同步原理 Replicaition id:每台 master 机器都一个 repl_id,是数据集的表示,若 salv…...
群晖NAS+DMS7.0以上版本+无docker机型安装zerotier
测试机型:群晖synology 218play / DSM版本为7.2.1 因218play无法安装docker,且NAS系统已升级为7.0以上版本,按zerotier官网说法无法安装zerotier, 不过还是可以通过ssh终端和命令方式安装zerotier。 1、在DSM新建文件夹 用于存放zerotier脚…...
Pinia持久化存储插件 pinia-plugin-persist
1、pinia-plugin-persist 作用 pinia-plugin-persist是一个Pinia持久化存储插件,用于将Pinia状态存储到本地持久化存储中,例如localStorage或sessionStorage。 2、安装和使用pinia-plugin-persist 有时候需要把pinia中的数据持久化存储(存到…...
链家JAVA笔试题
单选题 1、在Java中下列关于自动类型转换说法正确的是( )。 A. 基本数据类型和String相加结果一定是字符串型 B. char类型和int类型相加结果一定是字符 C. double类型可以自动转换成int D. char int double “ ”结果一定是double 参考答案&am…...
当试图回复传入消息时,消息应用程序会闪烁
问题描述: Actual Results: Unable to reply for incoming message as Messaging app flickers and closes. Expected Results: User should be able to send reply for incoming messages. Reproduction Steps: Stay in home screen. Receive an incoming mes…...
Hubery-个人项目经历记录
研究生期间很有幸的进入到了崔老师的组,从此也就进入到了分析人体生理信号的领域,充满挑战的同时也充满了乐趣。借着CSDN整理一下近几年来参与的项目,这里蕴含着我各种美好的回忆,也作为一个展示自己的平台吧。博客中很多结果只给…...
Ubuntu18.04 安装 qt 5.15.2
一.安装qt 1.下载 在线安装包 使用国内镜像源在线安装QT(2023.3.25更新)_qt国内镜像-CSDN博客 2.安装 (1)QT库安装: 注意:我安装时 勾选 Qt Design studio 会导致报错,直接不勾选。 注意:Qtcreator 无…...
【Linux Shell】6. echo 命令
文章目录 【 1. 显示普通字符串 】【 2. 显示转义字符 】【 3. 显示变量 】【 4. 显示换行 】【 5. 显示不换行 】【 6. 显示命令执行结果 】 Shell 的 echo 指令用于字符串的输出。命令格式: echo string【 1. 显示普通字符串 】 #!/bin/bashecho "It is a …...
Dell 机架式服务器 - 高级定制服务
Dell 机架式服务器 - 高级定制服务 1. Dell Technologies2. 机架式服务器 - 高级定制服务2.1. Servers & Storage (服务器及存储) -> Servers2.2. Rack Servers (机架式服务器)2.3. Shop2.4. PowerEdge Rack Servers (PowerEdge 机架式服务器)2.5. PowerEdge R760 Rack …...
C++ 中关键字 Static
1、什么是static? static 是C中很常用的修饰符,它被用来控制变量的存储方式和可见性。由关键字static修饰类中成员,成为类的静态成员。类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用内存中。静态…...
系统学习Python——警告信息的控制模块warnings:警告过滤器-[重写默认的过滤器]
分类目录:《系统学习Python》总目录 Python应用程序的开发人员可能希望在默认情况下向用户隐藏所有Python级别的警告,而只在运行测试或其他调试时显示这些警告。用于向解释器传递过滤器配置的sys.warningoptions属性可以作为一个标记,表示是否…...
C++力扣题目-- 二叉树层序遍历
102.二叉树的层序遍历(opens new window)107.二叉树的层次遍历II(opens new window)199.二叉树的右视图(opens new window)637.二叉树的层平均值(opens new window)429.N叉树的层序遍历(opens new window)515.在每个树行中找最大值(opens new window)116.填充每个节点的下一个右…...
前端实现回车键触发搜索
前端实现回车键触发搜索 前言实现方法1. html里可以用 form 来实现2. 非form中的input 前言 搜索框是个常见的功能,除了用现有的ui组件库,有的时候必须要自己封装,所以涉及到点击按钮搜索和回车搜索都要实现 实现方法 1. html里可以用 for…...
k8s yaml文件pod的生命周期
Pod是k8s中最小限额资源管理组件,也是最小化运行容器化的应用的资源管理对象。 Pod是一个抽象的概念,可以理解为一个或者多个容器化应用的集合。 在一个pod当中运行一个容器是最常用的方式。 在一个pod当中同时运行多个容器,在一个pod当中…...
MPEG4Extractor
1、readMetaData 必须要找到 Moov box,找到 Mdat box或者 Moof box,并且创建了 ItemTable 大端 box 分为 box header 和 box content: box header由8个字节组成,前面四个字节表示这个box 的大小(包含这个头的8字节&a…...
我在工作一年时怎么都看不懂的编程写法。今天手把手教给你
作为一名程序员,你一定遇到或亲自写过这样的代码。有人将它形象的形容为shi山,或者被戏称为“面向保就业编程”。 以下面这个代码为例,其中的问题也显而易见,当越来越多的条件判断时,代码会变得非常臃肿,难…...
ThinkPHP5多小区物业管理系统源码(支持多小区)
基于 ThinkPHP5 Bootstrap 倾力打造的多小区物业 管理系统源码,操作简单,功能完善,用户体验良好 开发环境PHP7mysql 安装步骤: 1.新建数据库db_estate,还原数据db_estate.sql 2.修改配置文件:application/database.php 3.运…...
2024 年 API 安全:预测和趋势
随着技术以前所未有的速度不断进步,API(应用程序编程接口)安全性的复杂性也随之增加。随着 API 在现代应用程序和服务中的激增,组织将需要更好地了解其 API 环境以及 API 给运营带来的风险。 到 2024 年,预计几个关键…...
3D模型UV展开原理
今年早些时候,我为 MAKE 杂志写了一篇教程,介绍如何制作视频游戏角色的毛绒动物。 该技术采用给定的角色 3D 模型及其纹理,并以编程方式生成缝纫图案。 虽然我已经编写了一般摘要并将源代码上传到 GitHub,但我在这里编写了对使这一…...
SPL-cmcRVFL+
吐槽 作者未提供代码,还有图1敢再糊点吗?...
Vue3+TS+Vite 构建自动导入开发环境
关注⬆️⬆️⬆️⬆️ 专栏后期更新更多前端内容 在一个使用 Vue 3、Vite 和 TypeScript 的项目中,配置 unplugin-auto-import 和 unplugin-vue-components 插件可以极大地提高开发效率,因为它们可以自动导入 Vue 相关的 API 和 Vue 组件,从而减少了手动导入的需要。 文章目…...
长期使用外接键盘,外物压着自带键盘,容易导致华硕飞行堡垒FX53VD键盘全部失灵【除电源键】
华硕飞行堡垒FX53VD键盘全部失灵【除电源键】 前言一、故障排查二、发现问题三、使用方法总结 前言 版本型号: 型号 ASUS FX53VD(华硕-飞行堡垒) 板号:GL553VD 故障情况描述: 键盘无法使用,键盘除开机键外…...
JavaScript-循环嵌套断点调试-笔记
1.do...while循环 do while语法结构: 循环初始值; do{ //代码; 增量; }while(循环条件); <script> // 输出十句 : 你好世界 var …...
1042: 数列求和3 和 1057: 素数判定 和 1063: 最大公约与最小公倍
1042: 数列求和3 题目描述 求1-2/33/5-4/75/9-6/11...的前n项和,结果保留3位小数。 输入 输入正整数n(n>0)。 输出 输出一个实数,保留3位小数,单独占一行。 样例输入 5 样例输出 0.917 #include<stdio.h> int main(){in…...
[足式机器人]Part2 Dr. CAN学习笔记-动态系统建模与分析 Ch02-8 Bode Plot伯德图
本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-动态系统建模与分析 Ch02-8 Bode Plot伯德图 Bode Plot 手绘技巧与应用...
Java 将Excel转换为TXT文本格式
TXT文件是一种非常简单、通用且易于处理的文本格式。在处理大规模数据时,将Excel转为TXT纯文本文件可以提高处理效率。此外,许多编程语言和数据处理工具都有内置的函数和库来读取和处理TXT文件,因此将Excel文件转换为TXT还可以简化数据导入过…...
什么事“网络水军”?他们的违法活动主要有四种形式
我国治理网络水军,包括造谣引流、舆情敲诈、刷量控评、有偿删帖等各类“网络水军”等违法犯罪活动已经许久。 日前,官方召开新闻发布会,公布了相关的一些案件进程,今年已累计侦办相关案件339起,超过历年的全年侦办案件…...
授权策略(authorize方法)
authorize方法(授权策略的使用示例) $this->authorize(destroy, $status) 要实现这个功能,你需要执行以下步骤: 1、创建一个授权策略: 在Laravel中,授权策略是用于定义用户对特定操作的权限的类。你可…...
tk域名免费注册网站/浙江疫情最新情况
1、2、高斯发现两个复数乘法初看涉及4次实数乘法运算,但实际上可以简化为3次乘法运算。例:(abi)(cdi) ac - bd (bcad)i ,其中bcad (ab)(cd) - ac - bd所以只需计算(ab)(cd) 、 ac 和 bd。这条原理可以帮助我们实现更好的乘法运算ÿ…...
网站建设属于什么支出/杭州seo排名优化外包
为什么80%的码农都做不了架构师?>>> 常见的数据库优化方法:索引(数据库),缓存,分表,分库,sql优化。 索引:创建索引一般有以下两个目的:维护被索引…...
在大学做网站赚钱吗/国内最新新闻摘抄
(Numpy中ndarray和array的区别是什么?我在哪儿能够找到numpy中相应的实现?) 答:Well, np.array is just a convenience function to create an ndarray, it is not a class itself. (嗯,np.arra…...
哪里可做网站/新手电商运营从哪开始学
A. Nearest Interesting Number 题目链接:http://codeforces.com/problemset/problem/1183/A 题意:找到一个距离n最近并且不小于n的各个数位和%40的数。 思路:直接暴力即可。 AC代码: #include<bits/stdc.h> using nam…...
网站流量下滑/今日头条普通版
做工作都有需求在推动着我们,需求都需要强大的技术和分析能力做支撑,工欲善其事,必先利其器。在数据分析的过程中,我们需要针对不同用户的分析需求,去提供不同的分析模块、不同的模型,这些都需要有专业的分…...
企业网站资料大全/域名估价
背景:使用过 THINKPHP 的 PHPer 都知道有字段排除功能,个人觉得有时候还是比较好用的,所以分享一下!第一次分享,如有不好之处,请大神指教这里面主要是使用到 laravel 里面的 Macros;1、在 app\P…...