Android编译 - 证书介绍

news/2025/1/10 14:50:54/文章来源:https://www.cnblogs.com/wutou/p/18661880

前言全局说明


一、说明

1.1 环境:

Android

1.2 简介

在Android系统中,每个APK文件必须有一个有效的数字证书来证明其来源和完整性。当需要修改APK后再次发布时,原有的签名将不再有效,因此需要重新签名。

二、证书工具

2.1 路径:

android/build/tools/releasetools/sign_target_files_apks

sign_target_files_apks 是个软链接,实际指向同目录的 sign_target_files_apks.py 文件

2.2 帮助命令

./sign_target_files_apks
或
./sign_target_files_apks --help

2.2 帮助常用内容

更详细内容请查看本页最下面 - 另:帮助详细内容

verify
--print-certs  #打印证书信息
-v, --verbose 显示详情(显示是否使用V1和V2签名)

三、sign_target_files_apks 工具使用

3.1 打印 apk 签名信息

./apksigner verify --print-certs  <apk-name.apk>

3.2 打印 apk 用了哪个版本签名

行结尾为 true 的,是使用的签名

./apksigner verify --verbose  <apk-name.apk>

下图显示用了 V3 版签名
image

如果只使用v1签名方案,那么它就容易受到安卓5.0-8.0上的Janus漏洞(CVE-2017-13156)的攻击。
在安卓5.0-7.0上运行的使用了v1签名方案的应用程序,以及同时使用了v2/v3签名方案的应用程序也同样存在漏洞。


四、

4.1


4.2


另:帮助详细内容

Signs all the APK files in a target-files zipfile, producing a new
target-files zip.Usage:  sign_target_files_apks [flags] input_target_files output_target_files-e  (--extra_apks)  <name,name,...=key>Add extra APK/APEX name/key pairs as though they appeared in apkcerts.txtor apexkeys.txt (so mappings specified by -k and -d are applied). Keysspecified in -e override any value for that app contained in theapkcerts.txt file, or the container key for an APEX. Option may berepeated to give multiple extra packages.--extra_apex_payload_key <name=key>Add a mapping for APEX package name to payload signing key, which willoverride the default payload signing key in apexkeys.txt. Note that thecontainer key should be overridden via the `--extra_apks` flag above.Option may be repeated for multiple APEXes.--skip_apks_with_path_prefix  <prefix>Skip signing an APK if it has the matching prefix in its path. The prefixshould be matching the entry name, which has partition names in uppercase, e.g. "VENDOR/app/", or "SYSTEM_OTHER/preloads/". Option may berepeated to give multiple prefixes.-k  (--key_mapping)  <src_key=dest_key>Add a mapping from the key name as specified in apkcerts.txt (thesrc_key) to the real key you wish to sign the package with(dest_key).  Option may be repeated to give multiple keymappings.-d  (--default_key_mappings)  <dir>Set up the following key mappings:$devkey/devkey    ==>  $dir/releasekey$devkey/testkey   ==>  $dir/releasekey$devkey/media     ==>  $dir/media$devkey/shared    ==>  $dir/shared$devkey/platform  ==>  $dir/platformwhere $devkey is the directory part of the value ofdefault_system_dev_certificate from the input target-files'sMETA/misc_info.txt.  (Defaulting to "build/make/target/product/security"if the value is not present in misc_info.-d and -k options are added to the set of mappings in the orderin which they appear on the command line.-o  (--replace_ota_keys)Replace the certificate (public key) used by OTA package verificationwith the ones specified in the input target_files zip (in theMETA/otakeys.txt file). Key remapping (-k and -d) is performed on thekeys. For A/B devices, the payload verification key will be replacedas well. If there're multiple OTA keys, only the first one will be usedfor payload verification.-t  (--tag_changes)  <+tag>,<-tag>,...Comma-separated list of changes to make to the set of tags (inthe last component of the build fingerprint).  Prefix each with'+' or '-' to indicate whether that tag should be added orremoved.  Changes are processed in the order they appear.Default value is "-test-keys,-dev-keys,+release-keys".--replace_verity_private_key <key>Replace the private key used for verity signing. It expects a filenameWITHOUT the extension (e.g. verity_key).--replace_verity_public_key <key>Replace the certificate (public key) used for verity verification. Thekey file replaces the one at BOOT/RAMDISK/verity_key (or ROOT/verity_keyfor devices using system_root_image). It expects the key filename WITHthe extension (e.g. verity_key.pub).--replace_verity_keyid <path_to_X509_PEM_cert_file>Replace the veritykeyid in BOOT/cmdline of input_target_file_zipwith keyid of the cert pointed by <path_to_X509_PEM_cert_file>.--remove_avb_public_keys <key1>,<key2>,...Remove AVB public keys from the first-stage ramdisk. The key file toremove is located at either of the following dirs:- BOOT/RAMDISK/avb/ or- BOOT/RAMDISK/first_stage_ramdisk/avb/The second dir will be used for lookup if BOARD_USES_RECOVERY_AS_BOOT isset to true.--avb_{boot,init_boot,recovery,system,system_other,vendor,dtbo,vbmeta,vbmeta_system,vbmeta_vendor}_algorithm <algorithm>--avb_{boot,init_boot,recovery,system,system_other,vendor,dtbo,vbmeta,vbmeta_system,vbmeta_vendor}_key <key>Use the specified algorithm (e.g. SHA256_RSA4096) and the key to AVB-signthe specified image. Otherwise it uses the existing values in info dict.--avb_{apex,init_boot,boot,recovery,system,system_other,vendor,dtbo,vbmeta,vbmeta_system,vbmeta_vendor}_extra_args <args>Specify any additional args that are needed to AVB-sign the image(e.g. "--signing_helper /path/to/helper"). The args will be appended tothe existing ones in info dict.--avb_extra_custom_image_key <partition=key>--avb_extra_custom_image_algorithm <partition=algorithm>Use the specified algorithm (e.g. SHA256_RSA4096) and the key to AVB-signthe specified custom images mounted on the partition. Otherwise it usesthe existing values in info dict.--avb_extra_custom_image_extra_args <partition=extra_args>Specify any additional args that are needed to AVB-sign the custom imagesmounted on the partition (e.g. "--signing_helper /path/to/helper"). Theargs will be appended to the existing ones in info dict.--gki_signing_algorithm <algorithm>--gki_signing_key <key>Use the specified algorithm (e.g. SHA256_RSA4096) and the key to generate'boot signature' in a v4 boot.img. Otherwise it uses the existing valuesin info dict.--gki_signing_extra_args <args>Specify any additional args that are needed to generate 'boot signature'(e.g. --prop foo:bar). The args will be appended to the existing onesin info dict.--android_jar_path <path>Path to the android.jar to repack the apex file.--allow_gsi_debug_sepolicyAllow the existence of the file 'userdebug_plat_sepolicy.cil' under(/system/system_ext|/system_ext)/etc/selinux.If not set, error out when the file exists.
Global options-p  (--path) <dir>Prepend <dir>/bin to the list of places to search for binaries run by thisscript, and expect to find jars in <dir>/framework.-s  (--device_specific) <file>Path to the Python module containing device-specific releasetools code.-x  (--extra) <key=value>Add a key/value pair to the 'extras' dict, which device-specific extensioncode may look at.-v  (--verbose)Show command lines being executed.-h  (--help)Display this usage message and exit.--logfile <file>Put verbose logs to specified file (regardless of --verbose option.)


免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。




参考、来源:
https://www.jianshu.com/p/bb5325760506 (AOSP系统签名的生成以及替换、自签名、创建证书)
https://blog.csdn.net/gitblog_00079/article/details/137450852
https://www.cnblogs.com/3clove/p/16949939.html
https://blog.csdn.net/qq_53003652/article/details/134186457 (证书攻击)
https://blog.csdn.net/mozushixin_1/article/details/144430804 (参数详细说明)
https://blog.csdn.net/yzyeilin/article/details/139968840 (问题分析)
https://source.android.google.cn/docs/core/ota/sign_builds?hl=zh-cn (对要发布的 build 进行签名)
https://magesfc.github.io/mage/6b05d90d3608239b75a55f283f5a45cc588cb157/ (sign_target_files_apks脚本执行过程分析)



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867155.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

域名解析的QPS防护值是什么?

在当今数字化的时代,互联网已经渗透到生活的方方面面,而域名解析作为互联网运行的关键环节之一,起着至关重要的作用。其中,域名解析的QPS防护值更是保障网络稳定、安全与高效的一个重要指标。 一、QPS 防护值的定义与内涵 QPS,即Queries Per Second,意为每秒查询次数。域…

远程开机详细教程

要实现远程开机,被控端必须满足以下条件: 1.目前仅支持windows系统实现远程开机 2.被控端所在局域网内,需要有另一台设备保持todesk在线 如:其他电脑、iPhone、iPad、Android 设备(手机、平板)、家人的手机(充当辅助开机设备) 如图,辅助开机设备需显示在线,离线状态无法发…

CH585的SPI驱动WS2812

目录 链接: https://pan.baidu.com/s/1Su5dgmVWLre5kH2fYiGwQQ?pwd=wch6 CH573系列/583系列/592系列MCU,在使用SPI模拟WS2812波形时,MISO-PA15引脚上的实时电平,会影响MOSI-PA14引脚上的空闲电平状态,故建议SPI驱动WS2812的场景下,固定PA15的电平,不要接其他外设。异常场…

企业微信客服系统-实现对接微信客服接口与分配客服功能-实现GPT回复功能

企业微信客服是有对外的接口的,可以将用户发过来的消息传递给我们系统(注意,这里说的是企业微信客服,不是企业微信员工,也不是个人微信,这三个不是一回事)。并且,我们系统还可以实现,多个微信客服入口,分配到多个我们客服坐席,客服不在线时,可以分配给别人。微信客…

异地多活架构如何设计:活好你也好【转】

异地多活是分布式系统架构设计的一座高峰,当业务系统走到需要考虑异地多活这一步,其体量和复杂度都会达到很高的水准。接入层、逻辑层、数据层的三层架构,基本上是每个业务都会拥有的基础架构形态,而三层架构的关键在于数据层,本文将从数据层切入探讨异地多活对于基础架构…

一文告诉你什么是WBS——附应用方案

通过这些,结合板栗看板使用WBS可以极大地提高项目管理的效率和透明度,确保项目按时完成并达到预期目标。一、定义与原理 WBS(Work Breakdown Structure),即工作分解结构,是一种项目管理方法,它将一个复杂的项目或任务按照一定的原则分解成更小、更具体的部分,以便于管理…

思维导图xmind如何安装?附安装包

前言 大家好,我是小徐啊。我们在Java开发中,有时候是需要用到思维导图的,这可以帮助我们更好的理清思路,提高开发的效率。而说到思维导图,最有名的就是xmind了,它的功能十分强大,几乎是思维导图里面最强大的那一个。但是,默认只能使用初级功能,高级功能需要额外再开通…

网络是怎样连接的PDF免费下载

计算机网络概论图解趣味版,计算机网络基础,程序是怎样跑起来的,计算机是怎样跑起来的姊妹篇,Wireshark网络分析就这么简单作者林沛满作序推荐日文版重印32次。本书以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了…

敏捷转型时代:PSM 认证如何助力职业发展?

在现代职场中,敏捷正在深刻改变组织的工作方式。作为一种强调适应变化、快速响应和持续交付价值的理念,敏捷已经从软件开发扩展到几乎所有行业,而Scrum 是应用最广泛的敏捷框架。在团队管理和跨部门协作中,Scrum Master 扮演着不可或缺的角色,帮助团队在动态环境中实现高效…

龙哥量化:麦语言、宽语言例题转换学习

如果您需要代写技术指标公式, 请联系我。 龙哥QQ:591438821 龙哥微信:Long622889 也可以把您的通达信,文华技术指标改成TB交易开拓者、金字塔、文华8的自动交易量化策略定义一个变量,名为AA,出收盘价与开盘价的差,要求指标线以独立坐标方式显示,指定指标线颜色为红色。…