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

这篇具有很好参考价值的文章主要介绍了Android 应用平台加固之后操作(apk重签名「zipalign」「apksigner」「jarsigner」) 操作环境:MacOS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

前言

说一个恐怖的事情:现在的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)
AndroidStudio 2021.3.1 Patch 1 (Dolphin)
JDK 1.8.0_322
Android SDK 27.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" //不显示log
            zipAlignEnabled true     //Zipalign优化
            shrinkResources true    // 移除无用的resource文件
            signingConfig signingConfigs.release
            multiDexKeepFile file ('multidex-config.txt')
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled true//混淆
            buildConfigField "boolean", "LOG_DEBUG", "false" //不显示log
            zipAlignEnabled true     //Zipalign优化
            shrinkResources true    // 移除无用的resource文件
            signingConfig signingConfigs.debug
            multiDexKeepFile 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

结果如下:

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

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

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

结果如下:

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

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

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

注意:这里的检测语句末尾的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

结果如下:

Android 应用平台加固之后操作(apk重签名「zipalign」「apksigner」「jarsigner」) 操作环境:MacOS
接下来继续在终端输入「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 则为重签名成功。

Android 应用平台加固之后操作(apk重签名「zipalign」「apksigner」「jarsigner」) 操作环境:MacOS
我们再来检查一下,终端输入检查语句,结果如下:

Android 应用平台加固之后操作(apk重签名「zipalign」「apksigner」「jarsigner」) 操作环境:MacOS
出现框起来的那两行,就说明,我们已经重签名「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

结果如下:

Android 应用平台加固之后操作(apk重签名「zipalign」「apksigner」「jarsigner」) 操作环境:MacOS
接下来继续在终端输入「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

结果如下:

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

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

Android 应用平台加固之后操作(apk重签名「zipalign」「apksigner」「jarsigner」) 操作环境:MacOS
检查完之后,我们就可以重复上面讲的对齐「zipalign」操作了,再对齐之后,我们就可以拿到对齐「zipalign」的apk包去各大应用市场上架了。

具体使用

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

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

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

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

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

Android 应用平台加固之后操作(apk重签名「zipalign」「apksigner」「jarsigner」) 操作环境:MacOS
终端在提醒我们,文件已经存在了。我们输入的这语句不支持覆盖。查阅Android官网 对齐 「zipalign」 的定义,文章末尾找到了解决方案:

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

官网列表可以看出,我们在终端输入的时候, 加一个 「 -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 应用平台加固之后操作(apk重签名「zipalign」「apksigner」「jarsigner」) 操作环境:MacOS
相关借鉴资料:文章来源地址https://www.toymoban.com/news/detail-429960.html

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

到了这里,关于Android 应用平台加固之后操作(apk重签名「zipalign」「apksigner」「jarsigner」) 操作环境:MacOS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • flutter开发实战-打包应用apk签名及Android studio没有generate signed bundle/apk问题修改

    flutter开发实战-打包应用apk签名及Android studio没有generate signed bundle/apk问题修改 最近使用flutter开发项目,需要将打包应用时候apk进行签名,我这边开发使用的是Android studio,发现在Android studio的build没有generate signed bundle/apk。这里记录一下问题修改,以及生产签名文件及gradle配置

    2024年02月08日
    浏览(52)
  • Android APK加固原理

    一、前言 Android作为开源框架,开放之余,所要面临的就是安全问题,世间之事,有正就有邪,有攻就有守,作为开发者虽然不需要进入专业安全领域,但还是需要掌握基本的安全常识和原理。 二、加壳 加壳最初用于windows平台可执行程序,后被Andriod平台采用用于apk加固,可

    2024年02月07日
    浏览(44)
  • Android APK 签名打包原理分析(二)【Android签名原理】

    说到签名,从这个词来理解,正常个人需要签名的时候,一般是用来证明这是某个人的特属认证。 大家是否有印象?还记得我们之前在学习、总结网络相关知识的时候,说到过,客户端和服务端虽然通信数据上,可以采用对称加密和非对称加密组合去进行数据的加密,但是这

    2024年01月18日
    浏览(51)
  • Android 对apk进行签名

    生成签名文件: 1.使用jarsigner(仅限V1签名): 2.使用apksigner(默认V1和V2签名),Android11以上不包含V2签名会装不上 Notice:    v1签名后再对齐,v2要签名前对齐。 对齐apk: 查看apk是否对齐: 1.查看apk是否签名(V1) 2.查看apk是否签名V1、V2、V3、V4 3.查看签名文件 

    2024年02月16日
    浏览(57)
  • Android APK 签名打包原理分析(一)【APK结构分析】

    最近在看AOSP Apk安装的相关源码时,发现自己对这块知识一直停留到用的层面,并未有深入的了解,例如打包的具体过程、签名的具体过程、渠道打包,最重要的,自己这几年在做系统方面的应用时,也解决过很多apk 安装的问题,修改过部分的系统源码,可是没有把这块知识

    2024年02月02日
    浏览(50)
  • Android 获取app(apk)签名

    以上方法参考微信开放平台的-获取安装到手机的第三方应用签名的apk包  源码  

    2024年02月16日
    浏览(47)
  • Android Studio APK签名教程

    Android Studio APK签名教程 在Android应用程序的开发过程中,签名APK文件是非常重要的一步。APK签名可以确保应用程序的完整性和可信度,并提供安全保障。本文将介绍如何使用Android Studio进行APK签名,并附带相应的代码和描述。 生成密钥库(Keystore) 首先,我们需要生成一个密

    2024年02月07日
    浏览(46)
  • Android逆向进阶,APK签名问题

    APK签名的原理基于公钥加密和数字证书的机制。在APK签名过程中,开发者使用私钥对应用的数字摘要进行加密,生成签名文件。然后,开发者将应用和签名文件一同发布。当用户下载应用时,系统会使用开发者的公钥对签名文件进行解密,并与应用的数字摘要进行比对,以验

    2024年02月11日
    浏览(46)
  • Android 加固包之后,vivo手机安装时出现解析包错误的情况

    原因 :因为我们跑的 run apk都是 debug 版本,也就是测试版本,而 vivo就不支持这个测试apk。 解决办法: gradle.properties文件中添加 此时,未加固的包可以在vivo手机上安装,但是在经过加固并重新签名后又会出现之前的情况,解决办法如下: 加固之后需要先对齐,否则可能会出

    2024年02月11日
    浏览(176)
  • Android apk 反编译后打包(含签名)

    想分析某些app源码时,遇到烦人弹框,现在想反编译看看具体实现。 用到的工具: GDA4.06 apk反编译工具 apktool apk 打包工具 jdk 环境 一、反编译分析 将apk反编译打开 找到入口代码 弹框代码如图 二、解包、打包 使用apktool解包 ps: apktool工具的用法自行百度 -o模式是指定解包后文

    2024年02月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包