Android 应用平台加固之后操作(apk重签名「zipalign」「apksigner」「jarsigner」) 操作环境:MacOS

article/2025/9/19 14:24:24

抬头图片

Android 应用平台加固之后操作(apk重签名)「zipalign」「apksigner」「jarsigner」

  • 前言
  • 运行环境
  • 对齐(zipalign)
  • 重签名 apksigner (推荐方法)
  • 重签名 jarsigner (v1打包)
  • 具体使用
  • 对齐「zipalign」出现 "Output file '......apk' exists"
  • 总结

前言

说一个恐怖的事情:现在的Android签名方案已经有v1,v2,v3,v4了 ,v3支持多个证书,v4为增量签名。具体详情请看 官方文档 。我们目前还是以v1,v2为主。

当然,这是题外话,当前这篇文章的主题是:Android 平台加固之后的重签名姿势。我们在(腾讯加固/360加固/爱加密)等等平台上面加固之后的apk,下载下来的时候,都需要我们进行重签名的操作。而重签名呢,又有两种方法:

  • Java:jarsigner java自带的jar签名,也就是我们Android打包的v1签名,签名方案只能v1
  • Android:apksigner Android特有的签名,也就是打包的v2签名,支持多种签名方案(v1~v4)。

本文章将介绍从各大加固平台下载下来的apk包,进行「对齐(zipalign)」、「重签名(jarsigner与apksigner)」的操作详解。

运行环境

运行环境版本
操作系统macOS 13.0.1 (Ventura)
AndroidStudio2021.3.1 Patch 1 (Dolphin)
JDK1.8.0_322
Android SDK27.0.3

本文介绍的三种方法,都需要配置环境变量。否则需要打开终端,定位到相对应的位置:

  • zipalign工具位置:SDK路径/tools/zipalign

    例如:/Users/leomark/Library/Android/sdk/tools/zipalign

  • jarsigner工具位置:JDK路径/Contents/Home/bin/jarsigner

    例如:/Users/leomark/Library/Java/JavaVirtualMachines/corretto-1.8.0_322/Contents/Home/bin/jarsigner

  • apksigner工具位置:SDK路径/build-tools/「版本号」/apksigner 「版本号需 >= 24.0.3

    例如:/Users/leomark/Library/Android/sdk/build-tools/27.0.3/apksigner

配置环境变量请查看之前写的文章 Flutter 开发-安装与环境配置-配置环境变量失效问题 在里面新增三个个环境变量(已经新增过的可忽略,少了哪个添加哪个即可):

export PATH="「SDK路径」/tools"
export PATH="「JDK路径」/Contents/Home/bin"
export PATH="「SDK路径」/build-tools/「版本号」" 「版本号需 >= 24.0.3」
例如:
export PATH="/Users/leomark/Library/Android/sdk/tools"
export PATH="/Users/leomark/Library/Java/JavaVirtualMachines/corretto-1.8.0_322/Contents/Home/bin"
export PATH="/Users/leomark/Library/Android/sdk/build-tools/27.0.3"

需要注意的是,因为 apksigner 是Google在 Android 7.0 Nougat 推出的,所以我们的版本号的选择需要 >= 24.0.3 ,否则只能选择 jarsigner 方式打v1包。

对齐(zipalign)

我们从平台下载下来的加固apk包,官方文档有详细介绍说,具体看这里 《官方文档 - zipalign》我们只是看起来有一点陌生,但是这个其实就是我们项目在打包时候的 zipAlignEnabled true 的这个选项,只不过我们在加固完之后,这个 对齐「zipalign」 就被弄没了,我们需要重新 对齐「zipalign」。项目app目录下build.gradle文件:

    buildTypes {release {minifyEnabled true//混淆buildConfigField "boolean", "LOG_DEBUG", "false" //不显示logzipAlignEnabled true     //Zipalign优化shrinkResources true    // 移除无用的resource文件signingConfig signingConfigs.releasemultiDexKeepFile file ('multidex-config.txt')proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}debug {minifyEnabled true//混淆buildConfigField "boolean", "LOG_DEBUG", "false" //不显示logzipAlignEnabled true     //Zipalign优化shrinkResources true    // 移除无用的resource文件signingConfig signingConfigs.debugmultiDexKeepFile file ('multidex-config.txt')proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}

需要注意的是,zipalign的使用对于jarsigner和apksigner有一个时间前后规定:

  • 如果您使用的是 apksigner,则必须在为 APK 文件签名之前使用 zipalign。如果您在使用 apksigner 为APK 签名之后对 APK 做出了进一步更改,签名便会失效。
  • 如果您使用的是 jarsigner,则必须在为 APK 文件签名之后使用 zipalign。

当配置好环境变量之后,就可以使用终端使用相对应的对齐语句了,下面是检查apk是否对齐的方法,打开终端输入:

zipalign -c -v 4 apk路径
例如:
zipalign -c -v 4 /Volumes/Data/Android_jiagu/teacher/jiagu.apk

结果如下:

检查对齐终端语句检查对齐终端结果(失败)

接下来就是利用终端,实现apk对齐操作,在打开的终端输入:

zipalign  -v 4 「需要对齐操作的apk地址」 「对齐之后生成的地址」
例如:
zipalign  -v 4 /Volumes/Data/Android_jiagu/teacher/jiagu.apk /Volumes/Data/Android_jiagu/teacher/zipaligned.apk

结果如下:

在这里插入图片描述在这里插入图片描述

出现 “Verification succcessful” 为对齐成功。我们可以重复上诉检查对齐操作看看,结果如下:

在这里插入图片描述在这里插入图片描述

注意:这里的检测语句末尾的apk名字得修改为 zipaligned.apk,原因是我们对齐的时候,生成了新的命名为 zipaligned.apk 的新文件。当然这里的名字可以自己随意定义。

重签名 apksigner (推荐方法)

重签名 「apksigner」 和 「zipalign」对齐方法一样,我们需要用到的事检查语句和生成语句。
需要注意的是:

  • 我们采用「apksigner」的方法重签名,需要先对齐「zipalign」 apk包。不能重签名之后再对齐「zipalign」apk包。 虽然重签名之后可以运行对齐「zipalign」终端语句,但是对齐之后,该apk包的签名将失效。

所以我们如果采用 「apksigner」的方法进行重签名,必须先对齐「zipalign」apk包,再进行重签名操作。
下面是检查是否签名的终端语句,在打开的终端输入:

apksigner verify -v 检查的apk路径
例如:
apksigner verify -v /Volumes/Data/Android_jiagu/teacher/zipaligned.apk

结果如下:

检查结果(未签名)
接下来继续在终端输入「apksigner」重签名语句(当然,也可以不执行检查语句,对齐「zipalign」之后直接执行重签名语句):

apksigner sign -verbose --ks 「jks文件路径」 --v1-signing-enabled (「true/false」v1打包开启/关闭) --v2-signing-enabled (「true/false」v2打包开启/关闭) -ks-key-alias (jks别名 key-alias) --ks-pass pass: (jks密码,key store password) --key-pass pass:(key 密码,key password) --out 「生成的apk路径,重签名后的」 「对齐之后的apk路径」
例如:
apksigner sign -verbose --ks /Volumes/Data/Android_jiagu/teacher/zhty.jks --v1-signing-enabled true --v2-signing-enabled true --ks-key-alias key --ks-pass pass:123456 --key-pass pass:123456 --out /Volumes/Data/Android_jiagu/teacher/signed.apk /Volumes/Data/Android_jiagu/teacher/zipaligned.apk

终端运行结果如下:出现 Signed 则为重签名成功。

重签名成功
我们再来检查一下,终端输入检查语句,结果如下:

apksigner重签名之后检查
出现框起来的那两行,就说明,我们已经重签名「apksigner」成功了,我们可以拿apk包去各大应用市场上架操作了。

重签名 jarsigner (v1打包)

重签名「jarsigner」和 「adksigner」一样,也是只需要检查和重签名两个方法。
需要注意的是:

  • 重签名「jarsigner」是签名之后才能对齐「zipalign」apk包。如果对齐「zipalign」之后再进行重签名「jarsigner」,那么对齐「zipalign」将会失效。

所以我们需要先重签名「jarsigner」,再进行对齐「zipalign」操作,下面我们打开终端输入:

jarsigner -verify 「检查的apk路径」
例如:
jarsigner -verify /Volumes/Data/Android_jiagu/teacher/jiagu.apk

结果如下:

jarsigner检查未签名
接下来继续在终端输入「jarsigner」重签名语句(当然,也可以不执行检查语句,直接执行重签名语句):

jarsigner -verbose -keystore 「apk签名文件路径」 -storepass 「签名密码」 -signedjar 「需要重签名apk路径」  「加固的apk路径」 「签名别名 key-alias」
例如:
jarsigner -verbose -keystore /Volumes/Data/Android_jiagu/teacher/zhty.jks -storepass 123456 -signedjar /Volumes/Data/Android_jiagu/teacher/signed.apk /Volumes/Data/Android_jiagu/teacher/jiagu.apk key

结果如下:

jarsigner重签名jarsigner重签名结果

签名之后我们再检查一下:

jarsigner签名之后检查
检查完之后,我们就可以重复上面讲的对齐「zipalign」操作了,再对齐之后,我们就可以拿到对齐「zipalign」的apk包去各大应用市场上架了。

具体使用

重签名「jarsigner」与「apksigner」的操作顺序为:

  • jarsigner: 检查apk是否签名 ===> 「jarsigner」重签名 ===> 是否重签名成功 ===> 对齐「zipalign」 ===> 检查是否对齐
  • apksigner: 检查是否对齐 ===> 对齐「zipalign」 ===> 检查是否对齐 ===> 检查apk是否签名 ===> 「apksigner」重签名 ===> 是否重签名成功

具体操作语句请参考前面每一个方法的详细介绍。推荐使用 「apksigner」 进行重签名,直接打v1、v2 的签名apk包。

对齐「zipalign」出现 “Output file ‘…apk’ exists”

当我们多次执行对齐语句之后,如果每一次都是用同一个名字,输入对齐语句,终端就会爆这个错误,如下图所示:

对齐exists
终端在提醒我们,文件已经存在了。我们输入的这语句不支持覆盖。查阅Android官网 对齐 「zipalign」 的定义,文章末尾找到了解决方案:

Android 官网 - 对齐述

官网列表可以看出,我们在终端输入的时候, 加一个 「 -f 」 就可以覆盖输出文件。所以,我们目前有两种解决方案:

  • 我们在每一次加固的时候,清空当前操作文件夹的所有apk文件,然后再执行语句。
  • 在原来的语句基础上,增加一个 「 -f 」 终端语句:
    •  zipalign -f -v 4 「需要对齐操作的apk地址」 「对齐之后生成的地址」例如:zipalign -f -v 4 /Volumes/Data/Android_jiagu/teacher/jiagu.apk /Volumes/Data/Android_jiagu/teacher/zipaligned.apk

总结

以上就是本文所介绍的从加固平台下载下来之后,重签名的教程。还是那句话,推荐使用 「apksigner」 进行重签名,直接打v1、v2 的签名apk包。

有不对或者错误的地方,欢迎指出!

抬头图片
相关借鉴资料:

  • Android官方文档 - 应用程序签名
  • Android官方文档 - zipalign
  • Android官方文档 - apksigner
  • Android之通过 apksigner 对 apk 进行 手动签名
  • Android APK 加固重新签名
  • Flutter 开发-安装与环境配置-配置环境变量失效问题

http://chatgpt.dhexx.cn/article/7W3jUXfN.shtml

相关文章

Windows平台 使用jarsigner对Apk签名

使用的是JDK自带的jarsigner工具来完成Apk签名 1) 首先找到你的Java Jdk中bin的路径:C:\Program Files\Java\jdk1.8.0_152\bin jarsigner简单使用说明 #jarsigner的命令格式: jarsigner -verbose -keystore [您的私钥存放路径] -signedjar [签名后文件存…

jarsigner和apksigner对apk/aab签名

1、查看签名文件的信息 工具目录:C:\Program Files\Java\jre1.8.0_331\bin keytool -list -v -keystore E:\test.jks输入该命令,然后输入密码,即可查看签名信息 2、签名工具 签名工具说明位置jarsignerJDK提供的针对jar包签名的通用工具…

Android jarsigner和apksigner签名apk(.jks)

前言 为了增加 Apk 的安全性,防止反编译,我们会对开发的 Apk 做签名处理,如果要上架应用商店,部分还会要求 Apk 必须加固后才能上架。另外存在一部分免费加固apk后会删除AndroidStudio打包的签名,需要我们重新签名&am…

jarsigner命令详解

用法&#xff1a;jarsigner [选项] jar 文件别名 jarsigner -verify [选项] jar 文件 [-keystore <url>] 密钥库位置[-storepass <口令>] 用于密钥库完整性的口令[-storetype <类型>] 密钥库类型[-keypass <口令>] …

Java的安装及‘jarsigner‘ 不是内部或外部命令解决方法(附jdk8下载链接)

安装JDK 下载JDK&#xff1a; 网盘地址 , 提取码&#xff1a;y5f3 双击安装程序 一直点击下一步 到这里已经安装好了 但是执行 jarsigner命令会看到 ‘jarsigner‘ 不是内部或外部命令解决方法 的报错 解决 可能是因为在bin 目录下没有 jarsigner.exe&#xff0c;没有的…

【Android 教程系列第 28 篇】Android 分别使用 jarsigner 和 apksigner 对 APK 签名(v1、v2 签名)的详细教程

这是【Android 教程系列第 28 篇】&#xff0c;如果觉得有用的话&#xff0c;欢迎关注专栏。 为了增加 Apk 的安全性&#xff0c;防止反编译&#xff0c;我们会对开发的 Apk 做签名处理&#xff0c;如果要上架应用商店&#xff0c;部分还会要求 Apk 必须加固后才能上架。 而对…

【Java可执行命令】(十)JAR文件签名工具 jarsigner:通过数字签名及验证保证代码信任与安全,深入解析 Java的 jarsigner命令~

Java可执行命令之jarsigner 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法3.1.1 可选参数&#xff1a;jarsigner -keystore < url>3.1.2 可选参数&#xff1a;jarsigner -storepass <口令>3.1.3 可选参数&#xff1a;jarsigner -keypass <口令>3.1.4 可选参…

您的凭据不工作,请输入新凭据

转载自 http://m.blog.csdn.net/article/details?id47706021 今天上班同事说远程桌面无法使用&#xff0c;然后VNC连接&#xff0c;查看情况&#xff0c;密码是正确的&#xff0c;防火墙也关了&#xff0c;百思不得其解。 上网查询问题&#xff0c;找到一个解决办法&#xff0…

远程桌面连接提示“您的凭据不工作”

本次操作的是企图远程别人的电脑配置&#xff0c;而非被远程的电脑 在域环境中&#xff0c;如果使用Vista及以上的操作系统&#xff0c;默认情况下&#xff0c;在连接到远程计算机时无法保存凭据。 当我们使用远程桌面连接时&#xff0c;即使已经勾选了“记住我的凭证”。 但是…

凭据不工作

最悲催的事情是什么&#xff1f;那就是你可以远程别人的电脑&#xff0c;但是别人不能远程自己的电脑&#xff01; 背景&#xff1a; 换了个win8.1的系统&#xff0c;刚开始可以远程上,过了几天,电脑突然不能远程了,让我很是郁闷呀. 于是在网上查了好多资料,看看他到底是什么…

win10远程桌面连接凭据怎么设置_win10远程桌面连接提示您的凭据不工作修复方法...

在win10系统中&#xff0c;使用远程桌面可以不在用户电脑前就可以帮助他人&#xff0c;轻松的解决一些自己不在场的难题&#xff0c;然而近日有用户却发现自己的win10系统在进行远程桌面连接时出现提示您的凭据不工作的问题&#xff0c;那么对此有什么方法能够解决呢&#xff1…

计算机远程连接提示凭证不工作,连接远程桌面提示您的凭证不工作怎么办

安装win10正式版&#xff0c;工作需要连接远程桌面&#xff0c;但是连接过程中&#xff0c;提示您的凭证不工作。原有保存的远程帐号密码无法使用&#xff0c;导致远程登录系统失败&#xff0c;连接远程桌面提示您的凭证不工作的解决方法其实很简单&#xff0c;下面由学习啦小编…

远程连接不成功,提示您的凭据不工作的解决办法

1&#xff0c;输入WindowsR键 进入命令行输入模式&#xff0c;在弹出的运行框里输入【gpedit.msc】点击确定&#xff0c;打开本地组策略编辑器 2&#xff0c;然后依次点击【计算机配置】&#xff0c;【管理模板】&#xff0c;【系统】&#xff0c;【凭据分配】。双击打开点击右…

远程桌面连接提示“您的凭据不工作” 解决方案!求解

最佳的方案是&#xff1a; 最好的解决方案&#xff1a; 最重要一点, 主机上要允许用户以非guest身份登录: 主机上运行gpedit.msc, 计算机配置/windows设置/安全设置/本地策略/安全选项/ 网络访问:本地帐户的共享和安全模型 选择: 经典-对本地用户进行身份验证,不改变其本来…

【目标检测】(9) 改进PANet特征提取金字塔,附Tensorflow完整代码

各位同学好&#xff0c;今天和大家分享一下如何使用 注意力机制 和 深度可分离卷积 优化 YOLOV4 的 PANet 特征金字塔。看本篇博客之前&#xff0c;建议大家先看以下几篇&#xff1a; YOLOV4主干网络&#xff1a;https://blog.csdn.net/dgvv4/article/details/123818580 混合…

深度学习_图像分割_PANet论文详解

PANet论链接 PANet介绍 这篇文章提出的Path Aggregation Network (PANet)整体上可以看做是在Mask RCNN上做多处改进&#xff0c;充分利用了特征融合&#xff1a; 引入bottom-up path augmentation结构&#xff0c;充分利用网络浅特征进行分割。引入adaptive feature pooling…

【小样本分割 2020 ICCV】PANet

文章目录 【小样本分割 2020 ICCV】PANet1. 简介2. 网络2.1 整体架构2.2 原型学习2.3 非参数度量学习2.4 原型对齐正则化 3. 代码3.1 backbone3.2 模型代码 【小样本分割 2020 ICCV】PANet 论文题目&#xff1a;PANet: Few-Shot Image Semantic Segmentation with Prototype Al…

TPanel

TPanel位于Standard组件面板上&#xff0c;也是常用的一种容器控件。面板的一个优点就是放在面板上的组件称为面板的一部分&#xff0c;因此它们与面板一起移动。这在设计阶段很有用。 Panel组件的大部分功能在于其Align属性。例如&#xff0c;想显示标题在窗体上端&#xff0c…

[Neck] 空间金字塔池化【池化策略】(Space Pyramid Pool, SPP)模块和路径聚合网络【增强】(Path Aggregation Network, PANet)的结构

文章目录 背景yolo v4 中的空间金字塔池化(Space Pyramid Pool, SPP)模块和路径聚合网络(Path Aggregation Network, PANet)的结构SPP 模块Abstract IntroductionDeep Networks with Spatial Paramid PoolingTraining the NetworkSPP-Net for Image ClassificationSPP-Net for …

芒果改进YOLOv7系列:首发改进特征融合网络BiFPN结构,融合更多有效特征

💡统一使用 YOLOv7 代码框架,结合不同模块来构建不同的YOLO目标检测模型。文章目录 一、BiFPN论文理论部分代码部分YOLOv7+BiFPN在这篇文章中,将BiFPN结构加入到 YOLOv7 结构中 一、BiFPN论文理论部分 EfficientDet: Scalable and Efficient Object Detection BiFPN与P…